linux/include/linux/personality.h
<<
>>
Prefs
   1#ifndef _LINUX_PERSONALITY_H
   2#define _LINUX_PERSONALITY_H
   3
   4#include <uapi/linux/personality.h>
   5
   6
   7/*
   8 * Handling of different ABIs (personalities).
   9 */
  10
  11struct exec_domain;
  12struct pt_regs;
  13
  14extern int              register_exec_domain(struct exec_domain *);
  15extern int              unregister_exec_domain(struct exec_domain *);
  16extern int              __set_personality(unsigned int);
  17
  18
  19/*
  20 * Description of an execution domain.
  21 * 
  22 * The first two members are refernced from assembly source
  23 * and should stay where they are unless explicitly needed.
  24 */
  25typedef void (*handler_t)(int, struct pt_regs *);
  26
  27struct exec_domain {
  28        const char              *name;          /* name of the execdomain */
  29        handler_t               handler;        /* handler for syscalls */
  30        unsigned char           pers_low;       /* lowest personality */
  31        unsigned char           pers_high;      /* highest personality */
  32        unsigned long           *signal_map;    /* signal mapping */
  33        unsigned long           *signal_invmap; /* reverse signal mapping */
  34        struct map_segment      *err_map;       /* error mapping */
  35        struct map_segment      *socktype_map;  /* socket type mapping */
  36        struct map_segment      *sockopt_map;   /* socket option mapping */
  37        struct map_segment      *af_map;        /* address family mapping */
  38        struct module           *module;        /* module context of the ed. */
  39        struct exec_domain      *next;          /* linked list (internal) */
  40};
  41
  42/*
  43 * Return the base personality without flags.
  44 */
  45#define personality(pers)       (pers & PER_MASK)
  46
  47
  48/*
  49 * Change personality of the currently running process.
  50 */
  51#define set_personality(pers) \
  52        ((current->personality == (pers)) ? 0 : __set_personality(pers))
  53
  54#endif /* _LINUX_PERSONALITY_H */
  55