Commit | Line | Data |
---|---|---|
1da177e4 LT |
1 | #ifndef _LINUX_PERSONALITY_H |
2 | #define _LINUX_PERSONALITY_H | |
3 | ||
607ca46e DH |
4 | #include <uapi/linux/personality.h> |
5 | ||
34e856e6 | 6 | |
1da177e4 LT |
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 *); | |
485d5276 | 16 | extern int __set_personality(unsigned int); |
1da177e4 | 17 | |
1da177e4 LT |
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 | ||
1da177e4 LT |
47 | |
48 | /* | |
49 | * Change personality of the currently running process. | |
50 | */ | |
51 | #define set_personality(pers) \ | |
d8b295f2 | 52 | ((current->personality == (pers)) ? 0 : __set_personality(pers)) |
1da177e4 LT |
53 | |
54 | #endif /* _LINUX_PERSONALITY_H */ |