Blame view

include/linux/compat.h 8.34 KB
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
1
2
3
4
5
6
  #ifndef _LINUX_COMPAT_H
  #define _LINUX_COMPAT_H
  /*
   * These are the type definitions for the architecture specific
   * syscall compatibility layer.
   */
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
7
8
9
10
11
12
13
14
15
  
  #ifdef CONFIG_COMPAT
  
  #include <linux/stat.h>
  #include <linux/param.h>	/* for HZ */
  #include <linux/sem.h>
  
  #include <asm/compat.h>
  #include <asm/siginfo.h>
3f2e05e90   David Howells   [PATCH] BLOCK: Re...
16
  #include <asm/signal.h>
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
17
18
19
  
  #define compat_jiffies_to_clock_t(x)	\
  		(((unsigned long)(x) * COMPAT_USER_HZ) / HZ)
202e5979a   Stephen Rothwell   [PATCH] compat: b...
20
21
  typedef __compat_uid32_t	compat_uid_t;
  typedef __compat_gid32_t	compat_gid_t;
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
  struct rusage;
  
  struct compat_itimerspec { 
  	struct compat_timespec it_interval;
  	struct compat_timespec it_value;
  };
  
  struct compat_utimbuf {
  	compat_time_t		actime;
  	compat_time_t		modtime;
  };
  
  struct compat_itimerval {
  	struct compat_timeval	it_interval;
  	struct compat_timeval	it_value;
  };
  
  struct compat_tms {
  	compat_clock_t		tms_utime;
  	compat_clock_t		tms_stime;
  	compat_clock_t		tms_cutime;
  	compat_clock_t		tms_cstime;
  };
88959ea96   Stephen Rothwell   [PATCH] create st...
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
  struct compat_timex {
  	compat_uint_t modes;
  	compat_long_t offset;
  	compat_long_t freq;
  	compat_long_t maxerror;
  	compat_long_t esterror;
  	compat_int_t status;
  	compat_long_t constant;
  	compat_long_t precision;
  	compat_long_t tolerance;
  	struct compat_timeval time;
  	compat_long_t tick;
  	compat_long_t ppsfreq;
  	compat_long_t jitter;
  	compat_int_t shift;
  	compat_long_t stabil;
  	compat_long_t jitcnt;
  	compat_long_t calcnt;
  	compat_long_t errcnt;
  	compat_long_t stbcnt;
153b5d054   Roman Zippel   ntp: support for TAI
65
  	compat_int_t tai;
88959ea96   Stephen Rothwell   [PATCH] create st...
66
67
68
  
  	compat_int_t :32; compat_int_t :32; compat_int_t :32; compat_int_t :32;
  	compat_int_t :32; compat_int_t :32; compat_int_t :32; compat_int_t :32;
153b5d054   Roman Zippel   ntp: support for TAI
69
  	compat_int_t :32; compat_int_t :32; compat_int_t :32;
88959ea96   Stephen Rothwell   [PATCH] create st...
70
  };
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
71
72
73
74
75
  #define _COMPAT_NSIG_WORDS	(_COMPAT_NSIG / _COMPAT_NSIG_BPW)
  
  typedef struct {
  	compat_sigset_word	sig[_COMPAT_NSIG_WORDS];
  } compat_sigset_t;
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
  extern int get_compat_timespec(struct timespec *, const struct compat_timespec __user *);
  extern int put_compat_timespec(const struct timespec *, struct compat_timespec __user *);
  
  struct compat_iovec {
  	compat_uptr_t	iov_base;
  	compat_size_t	iov_len;
  };
  
  struct compat_rlimit {
  	compat_ulong_t	rlim_cur;
  	compat_ulong_t	rlim_max;
  };
  
  struct compat_rusage {
  	struct compat_timeval ru_utime;
  	struct compat_timeval ru_stime;
  	compat_long_t	ru_maxrss;
  	compat_long_t	ru_ixrss;
  	compat_long_t	ru_idrss;
  	compat_long_t	ru_isrss;
  	compat_long_t	ru_minflt;
  	compat_long_t	ru_majflt;
  	compat_long_t	ru_nswap;
  	compat_long_t	ru_inblock;
  	compat_long_t	ru_oublock;
  	compat_long_t	ru_msgsnd;
  	compat_long_t	ru_msgrcv;
  	compat_long_t	ru_nsignals;
  	compat_long_t	ru_nvcsw;
  	compat_long_t	ru_nivcsw;
  };
  
  extern int put_compat_rusage(const struct rusage *, struct compat_rusage __user *);
  
  struct compat_siginfo;
  
  extern asmlinkage long compat_sys_waitid(int, compat_pid_t,
  		struct compat_siginfo __user *, int,
  		struct compat_rusage __user *);
  
  struct compat_dirent {
  	u32		d_ino;
  	compat_off_t	d_off;
  	u16		d_reclen;
  	char		d_name[256];
  };
  
  typedef union compat_sigval {
  	compat_int_t	sival_int;
  	compat_uptr_t	sival_ptr;
  } compat_sigval_t;
  
  #define COMPAT_SIGEV_PAD_SIZE	((SIGEV_MAX_SIZE/sizeof(int)) - 3)
  
  typedef struct compat_sigevent {
  	compat_sigval_t sigev_value;
  	compat_int_t sigev_signo;
  	compat_int_t sigev_notify;
  	union {
  		compat_int_t _pad[COMPAT_SIGEV_PAD_SIZE];
  		compat_int_t _tid;
  
  		struct {
  			compat_uptr_t _function;
  			compat_uptr_t _attribute;
  		} _sigev_thread;
  	} _sigev_un;
  } compat_sigevent_t;
34f192c65   Ingo Molnar   [PATCH] lightweig...
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
  struct compat_robust_list {
  	compat_uptr_t			next;
  };
  
  struct compat_robust_list_head {
  	struct compat_robust_list	list;
  	compat_long_t			futex_offset;
  	compat_uptr_t			list_op_pending;
  };
  
  extern void compat_exit_robust_list(struct task_struct *curr);
  
  asmlinkage long
  compat_sys_set_robust_list(struct compat_robust_list_head __user *head,
  			   compat_size_t len);
  asmlinkage long
ba46df984   Al Viro   [PATCH] __user an...
160
  compat_sys_get_robust_list(int pid, compat_uptr_t __user *head_ptr,
34f192c65   Ingo Molnar   [PATCH] lightweig...
161
  			   compat_size_t __user *len_ptr);
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
  
  long compat_sys_semctl(int first, int second, int third, void __user *uptr);
  long compat_sys_msgsnd(int first, int second, int third, void __user *uptr);
  long compat_sys_msgrcv(int first, int second, int msgtyp, int third,
  		int version, void __user *uptr);
  long compat_sys_msgctl(int first, int second, void __user *uptr);
  long compat_sys_shmat(int first, int second, compat_uptr_t third, int version,
  		void __user *uptr);
  long compat_sys_shmctl(int first, int second, void __user *uptr);
  long compat_sys_semtimedop(int semid, struct sembuf __user *tsems,
  		unsigned nsems, const struct compat_timespec __user *timeout);
  asmlinkage long compat_sys_keyctl(u32 option,
  			      u32 arg2, u32 arg3, u32 arg4, u32 arg5);
  
  asmlinkage ssize_t compat_sys_readv(unsigned long fd,
  		const struct compat_iovec __user *vec, unsigned long vlen);
  asmlinkage ssize_t compat_sys_writev(unsigned long fd,
  		const struct compat_iovec __user *vec, unsigned long vlen);
  
  int compat_do_execve(char * filename, compat_uptr_t __user *argv,
  	        compat_uptr_t __user *envp, struct pt_regs * regs);
  
  asmlinkage long compat_sys_select(int n, compat_ulong_t __user *inp,
  		compat_ulong_t __user *outp, compat_ulong_t __user *exp,
  		struct compat_timeval __user *tvp);
c202f298d   Thomas Gleixner   x86: clean up arc...
187
  asmlinkage long compat_sys_wait4(compat_pid_t pid,
7d61c4596   Al Viro   compat_sys_wait4(...
188
189
  				 compat_uint_t __user *stat_addr, int options,
  				 struct compat_rusage __user *ru);
c202f298d   Thomas Gleixner   x86: clean up arc...
190

1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
191
192
193
194
  #define BITS_PER_COMPAT_LONG    (8*sizeof(compat_long_t))
  
  #define BITS_TO_COMPAT_LONGS(bits) \
  	(((bits)+BITS_PER_COMPAT_LONG-1)/BITS_PER_COMPAT_LONG)
5fa3839a6   Stephen Rothwell   [PATCH] Constify ...
195
  long compat_get_bitmap(unsigned long *mask, const compat_ulong_t __user *umask,
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
196
197
198
199
200
201
202
  		       unsigned long bitmap_size);
  long compat_put_bitmap(compat_ulong_t __user *umask, unsigned long *mask,
  		       unsigned long bitmap_size);
  int copy_siginfo_from_user32(siginfo_t *to, struct compat_siginfo __user *from);
  int copy_siginfo_to_user32(struct compat_siginfo __user *to, siginfo_t *from);
  int get_compat_sigevent(struct sigevent *event,
  		const struct compat_sigevent __user *u_event);
643a65454   Andrew Morton   [PATCH] select: f...
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
  static inline int compat_timeval_compare(struct compat_timeval *lhs,
  					struct compat_timeval *rhs)
  {
  	if (lhs->tv_sec < rhs->tv_sec)
  		return -1;
  	if (lhs->tv_sec > rhs->tv_sec)
  		return 1;
  	return lhs->tv_usec - rhs->tv_usec;
  }
  
  static inline int compat_timespec_compare(struct compat_timespec *lhs,
  					struct compat_timespec *rhs)
  {
  	if (lhs->tv_sec < rhs->tv_sec)
  		return -1;
  	if (lhs->tv_sec > rhs->tv_sec)
  		return 1;
  	return lhs->tv_nsec - rhs->tv_nsec;
  }
83f5d1266   Davide Libenzi   signal/timer/even...
222
223
224
225
  extern int get_compat_itimerspec(struct itimerspec *dst,
  				 const struct compat_itimerspec __user *src);
  extern int put_compat_itimerspec(struct compat_itimerspec __user *dst,
  				 const struct itimerspec *src);
b418da16d   Christoph Hellwig   compat: generic c...
226
227
228
229
  asmlinkage long compat_sys_gettimeofday(struct compat_timeval __user *tv,
  		struct timezone __user *tz);
  asmlinkage long compat_sys_settimeofday(struct compat_timeval __user *tv,
  		struct timezone __user *tz);
3158e9411   Stephen Rothwell   [PATCH] consolida...
230
  asmlinkage long compat_sys_adjtimex(struct compat_timex __user *utp);
bebfa1013   Andi Kleen   [PATCH] x86_64: A...
231
  extern int compat_printk(const char *fmt, ...);
0235497f7   Linus Torvalds   Add prototype for...
232
  extern void sigset_from_compat(sigset_t *set, compat_sigset_t *compat);
bebfa1013   Andi Kleen   [PATCH] x86_64: A...
233

3fd593979   Stephen Rothwell   [PATCH] Create co...
234
235
236
  asmlinkage long compat_sys_migrate_pages(compat_pid_t pid,
  		compat_ulong_t maxnode, const compat_ulong_t __user *old_nodes,
  		const compat_ulong_t __user *new_nodes);
032d82d90   Roland McGrath   x86: compat_ptrac...
237
238
239
  extern int compat_ptrace_request(struct task_struct *child,
  				 compat_long_t request,
  				 compat_ulong_t addr, compat_ulong_t data);
c269f1961   Roland McGrath   x86: compat_sys_p...
240
241
242
243
244
245
  #ifdef __ARCH_WANT_COMPAT_SYS_PTRACE
  extern long compat_arch_ptrace(struct task_struct *child, compat_long_t request,
  			       compat_ulong_t addr, compat_ulong_t data);
  asmlinkage long compat_sys_ptrace(compat_long_t request, compat_long_t pid,
  				  compat_long_t addr, compat_long_t data);
  #endif	/* __ARCH_WANT_COMPAT_SYS_PTRACE */
f6dfb4fd7   Davide Libenzi   [PATCH] Add epoll...
246
247
248
  /*
   * epoll (fs/eventpoll.c) compat bits follow ...
   */
f6dfb4fd7   Davide Libenzi   [PATCH] Add epoll...
249
250
  struct epoll_event;
  #define compat_epoll_event	epoll_event
f6dfb4fd7   Davide Libenzi   [PATCH] Add epoll...
251
252
253
254
255
  asmlinkage long compat_sys_epoll_pwait(int epfd,
  			struct compat_epoll_event __user *events,
  			int maxevents, int timeout,
  			const compat_sigset_t __user *sigmask,
  			compat_size_t sigsetsize);
97416ce82   Stephen Rothwell   Declare {compat_}...
256
257
  asmlinkage long compat_sys_utimensat(unsigned int dfd, char __user *filename,
  				struct compat_timespec __user *t, int flags);
140ff8b04   Stephen Rothwell   Declare another c...
258
259
260
  asmlinkage long compat_sys_signalfd(int ufd,
  				const compat_sigset_t __user *sigmask,
                                  compat_size_t sigsetsize);
4d672e7ac   Davide Libenzi   timerfd: new time...
261
262
263
264
265
  asmlinkage long compat_sys_timerfd_settime(int ufd, int flags,
  				   const struct compat_itimerspec __user *utmr,
  				   struct compat_itimerspec __user *otmr);
  asmlinkage long compat_sys_timerfd_gettime(int ufd,
  				   struct compat_itimerspec __user *otmr);
140ff8b04   Stephen Rothwell   Declare another c...
266

1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
267
268
  #endif /* CONFIG_COMPAT */
  #endif /* _LINUX_COMPAT_H */