File: /Users/paulross/dev/linux/linux-3.13/include/linux/personality.h

Green shading in the line number column means the source is part of the translation unit, red means it is conditionally excluded. Highlighted line numbers link to the translation unit page. Highlighted macros link to the macro page.

       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: 
      11: struct exec_domain;
      12: struct pt_regs;
      13: 
      14: extern int        register_exec_domain(struct exec_domain *);
      15: extern int        unregister_exec_domain(struct exec_domain *);
      16: extern 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:  */
      25: typedef void (*handler_t)(int, struct pt_regs *);
      26: 
      27: struct 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: