Subversion Repositories Kolibri OS

Rev

Rev 5270 | Go to most recent revision | Only display areas with differences | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed

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