blob: 9b281d260d8e3a672ad9b138b20ada9471642109 [file] [log] [blame]
sewardjde4a1d02002-03-22 01:27:54 +00001
2/*--------------------------------------------------------------------*/
3/*--- A header file defining structures and constants which are ---*/
4/*--- important at the kernel boundary for this platform. ---*/
5/*--- vg_kerneliface.h ---*/
6/*--------------------------------------------------------------------*/
7
8/*
njnc9539842002-10-02 13:26:35 +00009 This file is part of Valgrind, an extensible x86 protected-mode
10 emulator for monitoring program execution on x86-Unixes.
sewardjde4a1d02002-03-22 01:27:54 +000011
njn0e1b5142003-04-15 14:58:06 +000012 Copyright (C) 2000-2003 Julian Seward
sewardjde4a1d02002-03-22 01:27:54 +000013 jseward@acm.org
sewardjde4a1d02002-03-22 01:27:54 +000014
15 This program is free software; you can redistribute it and/or
16 modify it under the terms of the GNU General Public License as
17 published by the Free Software Foundation; either version 2 of the
18 License, or (at your option) any later version.
19
20 This program is distributed in the hope that it will be useful, but
21 WITHOUT ANY WARRANTY; without even the implied warranty of
22 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
23 General Public License for more details.
24
25 You should have received a copy of the GNU General Public License
26 along with this program; if not, write to the Free Software
27 Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
28 02111-1307, USA.
29
njn25e49d8e72002-09-23 09:36:25 +000030 The GNU General Public License is contained in the file COPYING.
sewardjde4a1d02002-03-22 01:27:54 +000031*/
32
33#ifndef __VG_KERNELIFACE_H
34#define __VG_KERNELIFACE_H
35
36/* This file is ONLY to be included into vg_include.h. Do not include
37 it directly into valgrind source .c files. This file defines types
38 and constants for the kernel interface, and to make that clear
39 everything is prefixed VKI. */
40
41/*--- All the following stuff is correct for Linux kernels 2.2.X and
42 2.4.X.
43---*/
44
45/* Should really get this from an include file somewhere. */
46#define VKI_BYTES_PER_PAGE_BITS 12
47#define VKI_BYTES_PER_PAGE (1 << VKI_BYTES_PER_PAGE_BITS)
48
49#define VKI_BYTES_PER_WORD 4
50#define VKI_WORDS_PER_PAGE (VKI_BYTES_PER_PAGE / VKI_BYTES_PER_WORD)
51
52
sewardjde4a1d02002-03-22 01:27:54 +000053/* An implementation of signal sets. These are the same as the sigset
54 implementations in the relevant Linux kernels. Note carefully that
55 this has nothing to do with glibc's signal sets. We work entirely
56 at the kernel boundary, so the libc stuff is invisible and
57 irrelevant. */
58
59/* The following is copied from
60 /usr/src/linux-2.4.9-13/include/asm-i386/signal.h */
61#define VKI_KNSIG 64 /* true for linux 2.2.X and 2.4.X */
62#define VKI_KNSIG_BPW 32 /* since we're using UInts */
63#define VKI_KNSIG_WORDS (VKI_KNSIG / VKI_KNSIG_BPW)
64
65typedef
66 struct {
67 UInt ws[VKI_KNSIG_WORDS];
68 }
69 vki_ksigset_t;
70
sewardjb48e5002002-05-13 00:16:03 +000071
sewardjde4a1d02002-03-22 01:27:54 +000072typedef
73 struct {
74 void* ksa_handler;
75 unsigned long ksa_flags;
76 void (*ksa_restorer)(void);
77 vki_ksigset_t ksa_mask;
78 }
79 vki_ksigaction;
80
81typedef
82 struct {
83 void* ss_sp;
84 Int ss_flags;
85 UInt ss_size;
86 }
87 vki_kstack_t;
88
jsgf855d93d2003-10-13 22:26:55 +000089#define SI_MAX_SIZE 128
90#define SI_PAD_SIZE ((SI_MAX_SIZE/sizeof(int)) - 3)
91
92union vki_sigval {
93 Int sival_int;
94 void *sival_ptr;
95};
96
97typedef
98 struct {
99 Int si_signo;
100 Int si_errno;
101 Int si_code;
102
103 union {
104 Int _pad[SI_PAD_SIZE];
105
106 /* kill() */
107 struct {
108 Int _pid; /* sender's pid */
109 Short _uid; /* sender's uid */
110 } _kill;
111
112 /* POSIX.1b timers */
113 struct {
114 UInt _timer1;
115 UInt _timer2;
116 } _timer;
117
118 /* POSIX.1b signals */
119 struct {
120 Int _pid; /* sender's pid */
121 UShort _uid; /* sender's uid */
122 union vki_sigval _sigval;
123 } _rt;
124
125 /* SIGCHLD */
126 struct {
127 Int _pid; /* which child */
128 UShort _uid; /* sender's uid */
129 Int _status; /* exit code */
130 Int _utime;
131 Int _stime;
132 } _sigchld;
133
134 /* SIGILL, SIGFPE, SIGSEGV, SIGBUS */
135 struct {
136 void *_addr; /* faulting insn/memory ref. */
137 } _sigfault;
138
139 /* SIGPOLL */
140 struct {
141 Int _band; /* POLL_IN, POLL_OUT, POLL_MSG */
142 Int _fd;
143 } _sigpoll;
144 } _sifields;
145 } vki_ksiginfo_t;
146
147/* linux-2.6/include/asm-generic/siginfo.h */
148
149#define VKI_SI_USER 0
150#define VKI_SI_QUEUE -1
151#define VKI_SI_TKILL -6
152
153struct vki_fpreg {
154 UShort significand[4];
155 UShort exponent;
156};
157
158struct vki_fpxreg {
159 UShort significand[4];
160 UShort exponent;
161 UShort padding[3];
162};
163
164struct vki_xmmreg {
165 UInt element[4];
166};
167
168struct vki_fpstate {
169 /* Regular FPU environment */
170 unsigned long cw;
171 unsigned long sw;
172 unsigned long tag;
173 unsigned long ipoff;
174 unsigned long cssel;
175 unsigned long dataoff;
176 unsigned long datasel;
177 struct vki_fpreg _st[8];
178 unsigned short status;
179 unsigned short magic; /* 0xffff = regular FPU data only */
180
181 /* FXSR FPU environment */
182 unsigned long _fxsr_env[6]; /* FXSR FPU env is ignored */
183 unsigned long mxcsr;
184 unsigned long reserved;
185 struct vki_fpxreg _fxsr_st[8]; /* FXSR FPU reg data is ignored */
186 struct vki_xmmreg _xmm[8];
187 unsigned long padding[56];
188};
189
190#define X86_FXSR_MAGIC 0x0000
191
192struct vki_sigcontext {
193 UShort gs, __gsh;
194 UShort fs, __fsh;
195 UShort es, __esh;
196 UShort ds, __dsh;
197 UInt edi;
198 UInt esi;
199 UInt ebp;
200 UInt esp;
201 UInt ebx;
202 UInt edx;
203 UInt ecx;
204 UInt eax;
205 UInt trapno;
206 UInt err;
207 UInt eip;
208 UShort cs, __csh;
209 UInt eflags;
210 UInt esp_at_signal;
211 UShort ss, __ssh;
212 struct vki_fpstate * fpstate;
213 UInt oldmask;
214 UInt cr2;
215};
216
217struct vki_ucontext {
218 UInt uc_flags;
219 struct vki_ucontext *uc_link;
220 vki_kstack_t uc_stack;
221 struct vki_sigcontext uc_mcontext;
222 vki_ksigset_t uc_sigmask; /* mask last for extensibility */
223};
224
sewardjde4a1d02002-03-22 01:27:54 +0000225
sewardj2342c972002-05-22 23:34:20 +0000226/* sigaltstack controls */
227#define VKI_SS_ONSTACK 1
228#define VKI_SS_DISABLE 2
229
230#define VKI_MINSIGSTKSZ 2048
231#define VKI_SIGSTKSZ 8192
232
sewardjb48e5002002-05-13 00:16:03 +0000233
234
sewardjde4a1d02002-03-22 01:27:54 +0000235#define VKI_SIG_BLOCK 0 /* for blocking signals */
236#define VKI_SIG_UNBLOCK 1 /* for unblocking signals */
237#define VKI_SIG_SETMASK 2 /* for setting the signal mask */
238
239#define VKI_SIG_DFL ((void*)0) /* default signal handling */
240#define VKI_SIG_IGN ((void*)1) /* ignore signal */
241#define VKI_SIG_ERR ((void*)-1) /* error return from signal */
242
243#define VKI_SA_ONSTACK 0x08000000
244#define VKI_SA_RESTART 0x10000000
sewardjde4a1d02002-03-22 01:27:54 +0000245#define VKI_SA_NOCLDSTOP 0x00000001
jsgf855d93d2003-10-13 22:26:55 +0000246#define VKI_SA_SIGINFO 0x00000004
sewardj018f7622002-05-15 21:13:39 +0000247#define VKI_SA_RESETHAND 0x80000000
248#define VKI_SA_ONESHOT VKI_SA_RESETHAND
249#define VKI_SA_NODEFER 0x40000000
250#define VKI_SA_NOMASK VKI_SA_NODEFER
jsgf855d93d2003-10-13 22:26:55 +0000251#define VKI_SA_NOCLDWAIT 0x00000002
sewardj018f7622002-05-15 21:13:39 +0000252#if 0
sewardjde4a1d02002-03-22 01:27:54 +0000253#define VKI_SA_INTERRUPT 0x20000000 /* dummy -- ignored */
254#define VKI_SA_RESTORER 0x04000000
255#endif
256
jsgf855d93d2003-10-13 22:26:55 +0000257/* extra wait flags */
258#define VKI_WNOHANG 1 /* Don't block waiting. */
259#define VKI_WUNTRACED 2 /* Report status of stopped children. */
260#define VKI__WALL 0x40000000 /* Wait for any child. */
261#define VKI__WCLONE 0x80000000 /* Wait for cloned process. */
262
263#define VKI_SIGHUP 1 /* Hangup (POSIX). */
264#define VKI_SIGINT 2 /* Interrupt (ANSI). */
265#define VKI_SIGQUIT 3 /* Quit (POSIX). */
266#define VKI_SIGILL 4 /* Illegal instruction (ANSI). */
267#define VKI_SIGTRAP 5 /* Trace trap (POSIX). */
268#define VKI_SIGABRT 6 /* Abort (ANSI). */
269#define VKI_SIGIOT 6 /* IOT trap (4.2 BSD). */
270#define VKI_SIGBUS 7 /* BUS error (4.2 BSD). */
271#define VKI_SIGFPE 8 /* Floating-point exception (ANSI). */
272#define VKI_SIGKILL 9 /* Kill, unblockable (POSIX). */
273#define VKI_SIGUSR1 10 /* User-defined signal 1 (POSIX). */
274#define VKI_SIGSEGV 11 /* Segmentation violation (ANSI). */
275#define VKI_SIGUSR2 12 /* User-defined signal 2 (POSIX). */
276#define VKI_SIGPIPE 13 /* Broken pipe (POSIX). */
277#define VKI_SIGALRM 14 /* Alarm clock (POSIX). */
278#define VKI_SIGTERM 15 /* Termination (ANSI). */
279#define VKI_SIGSTKFLT 16 /* Stack fault. */
280#define VKI_SIGCLD SIGCHLD /* Same as SIGCHLD (System V). */
281#define VKI_SIGCHLD 17 /* Child status has changed (POSIX). */
282#define VKI_SIGCONT 18 /* Continue (POSIX). */
283#define VKI_SIGSTOP 19 /* Stop, unblockable (POSIX). */
284#define VKI_SIGTSTP 20 /* Keyboard stop (POSIX). */
285#define VKI_SIGTTIN 21 /* Background read from tty (POSIX). */
286#define VKI_SIGTTOU 22 /* Background write to tty (POSIX). */
287#define VKI_SIGURG 23 /* Urgent condition on socket (4.2 BSD). */
288#define VKI_SIGXCPU 24 /* CPU limit exceeded (4.2 BSD). */
289#define VKI_SIGXFSZ 25 /* File size limit exceeded (4.2 BSD). */
290#define VKI_SIGVTALRM 26 /* Virtual alarm clock (4.2 BSD). */
291#define VKI_SIGPROF 27 /* Profiling alarm clock (4.2 BSD). */
292#define VKI_SIGWINCH 28 /* Window size change (4.3 BSD, Sun). */
293#define VKI_SIGPOLL SIGIO /* Pollable event occurred (System V). */
294#define VKI_SIGIO 29 /* I/O now possible (4.2 BSD). */
295#define VKI_SIGPWR 30 /* Power failure restart (System V). */
296#define VKI_SIGSYS 31 /* Bad system call. */
297#define VKI_SIGUNUSED 31
298
299#define VKI_SIGRTMIN 32
300#define VKI_SIGRTMAX 63
301
302#define VKI_SIGVGINT (VKI_SIGRTMIN+0) /* signal for internal use - interrupt */
303#define VKI_SIGVGKILL (VKI_SIGRTMIN+1) /* signal for internal use - kill */
304#define VKI_SIGRTUSERMIN (VKI_SIGRTMIN+2) /* first user-usable RT signal */
sewardjde4a1d02002-03-22 01:27:54 +0000305
sewardj64039bb2002-06-03 00:58:18 +0000306/* The following are copied from include/asm-i386/mman.h .*/
sewardjde4a1d02002-03-22 01:27:54 +0000307
308#define VKI_PROT_READ 0x1 /* Page can be read. */
309#define VKI_PROT_WRITE 0x2 /* Page can be written. */
310#define VKI_PROT_EXEC 0x4 /* Page can be executed. */
311#define VKI_MAP_ANONYMOUS 0x20 /* Don't use a file. */
312#define VKI_MAP_PRIVATE 0x02 /* Changes are private. */
sewardj64039bb2002-06-03 00:58:18 +0000313#define VKI_MAP_FIXED 0x10 /* Interpret addr exactly */
sewardjde4a1d02002-03-22 01:27:54 +0000314
njn25e49d8e72002-09-23 09:36:25 +0000315/* Copied from linux-2.4.19/include/asm-i386/fcntl.h */
316
sewardjf912dfc2002-11-13 21:51:10 +0000317#define VKI_O_ACCMODE 0003
njn25e49d8e72002-09-23 09:36:25 +0000318#define VKI_O_RDONLY 00
319#define VKI_O_WRONLY 01
320#define VKI_O_RDWR 02
321#define VKI_O_CREAT 0100 /* not fcntl */
322#define VKI_O_EXCL 0200 /* not fcntl */
323#define VKI_O_TRUNC 01000 /* not fcntl */
324#define VKI_O_APPEND 02000
325#define VKI_O_NONBLOCK 04000
326#define VKI_O_SYNC 010000
327#define VKI_FASYNC 020000 /* fcntl, for BSD compatibility */
328#define VKI_O_DIRECT 040000 /* direct disk access hint */
329#define VKI_O_LARGEFILE 0100000
330#define VKI_O_DIRECTORY 0200000 /* must be a directory */
331#define VKI_O_NOFOLLOW 0400000 /* don't follow links */
332
333/* Copied from linux-2.4.19/include/linux/stat.h */
334
335#define VKI_S_IRWXU 00700
336#define VKI_S_IRUSR 00400
337#define VKI_S_IWUSR 00200
338#define VKI_S_IXUSR 00100
339
340#define VKI_S_IRWXG 00070
341#define VKI_S_IRGRP 00040
342#define VKI_S_IWGRP 00020
343#define VKI_S_IXGRP 00010
344
345#define VKI_S_IRWXO 00007
346#define VKI_S_IROTH 00004
347#define VKI_S_IWOTH 00002
348#define VKI_S_IXOTH 00001
349
sewardjde4a1d02002-03-22 01:27:54 +0000350
sewardj0ca2a6b2002-03-29 14:02:34 +0000351/* Copied from /usr/src/linux-2.4.9-13/include/asm/errno.h */
352
sewardj2342c972002-05-22 23:34:20 +0000353#define VKI_EPERM 1 /* Operation not permitted */
jsgf855d93d2003-10-13 22:26:55 +0000354#define VKI_ENOENT 2 /* No such file or directory */
sewardj018f7622002-05-15 21:13:39 +0000355#define VKI_ESRCH 3 /* No such process */
jsgf855d93d2003-10-13 22:26:55 +0000356#define VKI_EINTR 4 /* Interrupted system call */
357#define VKI_EBADF 9 /* Bad file number */
358#define VKI_ENOMEM 12 /* Out of memory */
sewardj2e93c502002-04-12 11:12:52 +0000359#define VKI_EWOULDBLOCK VKI_EAGAIN /* Operation would block */
360#define VKI_EAGAIN 11 /* Try again */
jsgf855d93d2003-10-13 22:26:55 +0000361#define VKI_EFAULT 14 /* Bad address */
362#define VKI_EINVAL 22 /* Invalid argument */
363#define VKI_EMFILE 24 /* Too many open files */
364#define VKI_ENOSYS 38 /* Function not implemented */
365
366#define VKI_ERESTARTSYS 512
367#define VKI_ERESTARTNOINTR 513
368#define VKI_ERESTARTNOHAND 514
sewardj0ca2a6b2002-03-29 14:02:34 +0000369
370
sewardjde4a1d02002-03-22 01:27:54 +0000371/* Gawd ... hack ... */
372
373typedef struct vki__user_cap_header_struct {
374 UInt version;
375 int pid;
376} vki_cap_user_header_t;
377
378typedef struct vki__user_cap_data_struct {
379 UInt effective;
380 UInt permitted;
381 UInt inheritable;
382} vki_cap_user_data_t;
383
384
385/* "Byrial Jensen" <byrial@image.dk> says:
386 [various] ioctls take a pointer to a "struct
387 termios" but this is another and shorter "struct
388 termios" than the one defined in <termios.h> and used
389 by tcgetattr(3) and tcsetattr(3) and other library
390 functions. GNU libc translate between its library
391 termios and the kernel termios.
392*/
393
394#define VKI_SIZEOF_STRUCT_TERMIOS 36
395
sewardj2f0de322002-03-24 10:17:25 +0000396/* Adam Gundy <arg@cyberscience.com>, 20 Mar 2002, says: */
397#define VKI_SIZEOF_STRUCT_TERMIO 17
398
sewardjde4a1d02002-03-22 01:27:54 +0000399
sewardj2e93c502002-04-12 11:12:52 +0000400/* File descriptor sets, for doing select(). Copied from
401 /usr/src/linux-2.4.9-31/include/linux/posix_types.h
402*/
403/*
404 * This allows for 1024 file descriptors: if NR_OPEN is ever grown
405 * beyond that you'll have to change this too. But 1024 fd's seem to be
406 * enough even for such "real" unices like OSF/1, so hopefully this is
407 * one limit that doesn't have to be changed [again].
408 *
409 * Note that POSIX wants the FD_CLEAR(fd,fdsetp) defines to be in
410 * <sys/time.h> (and thus <linux/time.h>) - but this is a more logical
411 * place for them. Solved by having dummy defines in <sys/time.h>.
412 */
413
414/*
415 * Those macros may have been defined in <gnu/types.h>. But we always
416 * use the ones here.
417 */
418#undef VKI_NFDBITS
419#define VKI_NFDBITS (8 * sizeof(unsigned long))
420
421#undef VKI_FD_SETSIZE
422#define VKI_FD_SETSIZE 1024
423
424#undef VKI_FDSET_LONGS
425#define VKI_FDSET_LONGS (VKI_FD_SETSIZE/VKI_NFDBITS)
426
427#undef VKI_FDELT
428#define VKI_FDELT(d) ((d) / VKI_NFDBITS)
429
430#undef VKI_FDMASK
431#define VKI_FDMASK(d) (1UL << ((d) % VKI_NFDBITS))
432
433typedef struct {
434 unsigned long vki_fds_bits [VKI_FDSET_LONGS];
435} vki_fd_set;
436
437
438/* Gawd ...
439 Copied from /usr/src/linux-2.4.9-31/./include/asm-i386/posix_types.h
440*/
441#undef VKI_FD_SET
442#define VKI_FD_SET(fd,fdsetp) \
443 __asm__ __volatile__("btsl %1,%0": \
444 "=m" (*(vki_fd_set *) (fdsetp)):"r" ((int) (fd)))
445
446#undef VKI_FD_CLR
447#define VKI_FD_CLR(fd,fdsetp) \
448 __asm__ __volatile__("btrl %1,%0": \
449 "=m" (*(vki_fd_set *) (fdsetp)):"r" ((int) (fd)))
450
451#undef VKI_FD_ISSET
452#define VKI_FD_ISSET(fd,fdsetp) (__extension__ ({ \
453 unsigned char __result; \
454 __asm__ __volatile__("btl %1,%2 ; setb %0" \
455 :"=q" (__result) :"r" ((int) (fd)), \
456 "m" (*(vki_fd_set *) (fdsetp))); \
457 __result; }))
458
459#undef VKI_FD_ZERO
460#define VKI_FD_ZERO(fdsetp) \
461do { \
462 int __d0, __d1; \
463 __asm__ __volatile__("cld ; rep ; stosl" \
464 :"=m" (*(vki_fd_set *) (fdsetp)), \
465 "=&c" (__d0), "=&D" (__d1) \
466 :"a" (0), "1" (VKI_FDSET_LONGS), \
467 "2" ((vki_fd_set *) (fdsetp)) : "memory"); \
468} while (0)
469
470
471
jsgf855d93d2003-10-13 22:26:55 +0000472struct vki_pollfd {
473 Int fd;
474 Short events;
475 Short revents;
476};
477
478/* asm/poll.h */
479#define VKI_POLLIN 0x0001
480#define VKI_POLLPRI 0x0002
481#define VKI_POLLOUT 0x0004
482#define VKI_POLLERR 0x0008
483#define VKI_POLLHUP 0x0010
484#define VKI_POLLNVAL 0x0020
485
486
487
sewardj2e93c502002-04-12 11:12:52 +0000488/*
489./include/asm-i386/posix_types.h:typedef long __kernel_suseconds_t;
490./include/linux/types.h:typedef __kernel_suseconds_t suseconds_t;
491
492./include/asm-i386/posix_types.h:typedef long __kernel_time_t;
493./include/linux/types.h:typedef __kernel_time_t time_t;
494*/
495
496struct vki_timeval {
497 /* time_t */ long tv_sec; /* seconds */
498 /* suseconds_t */ long tv_usec; /* microseconds */
499};
500
501
502
503/* For fcntl on fds ..
504 from ./include/asm-i386/fcntl.h */
jsgf855d93d2003-10-13 22:26:55 +0000505#define VKI_F_DUPFD 0 /* dup */
506#define VKI_F_GETFD 1 /* get close_on_exec */
507#define VKI_F_SETFD 2 /* set/clear close_on_exec */
sewardj2e93c502002-04-12 11:12:52 +0000508#define VKI_F_GETFL 3 /* get file->f_flags */
509#define VKI_F_SETFL 4 /* set file->f_flags */
510
jsgf855d93d2003-10-13 22:26:55 +0000511/* for F_[GET|SET]FL */
512#define VKI_FD_CLOEXEC 1 /* actually anything with low bit set goes */
513
sewardj2e93c502002-04-12 11:12:52 +0000514#define VKI_O_NONBLOCK 04000
515
516/* For nanosleep ...
517 from ./include/linux/time.h */
518struct vki_timespec {
519 /* time_t */ long tv_sec; /* seconds */
520 long tv_nsec; /* nanoseconds */
521};
522
523
sewardjb3586202002-05-09 17:38:13 +0000524/* STAT stuff
525 from /usr/src/linux-2.4.9-31/include/asm-i386/stat.h */
526struct vki_stat {
527 unsigned short st_dev;
528 unsigned short __pad1;
529 unsigned long st_ino;
530 unsigned short st_mode;
531 unsigned short st_nlink;
532 unsigned short st_uid;
533 unsigned short st_gid;
534 unsigned short st_rdev;
535 unsigned short __pad2;
536 unsigned long st_size;
537 unsigned long st_blksize;
538 unsigned long st_blocks;
539 unsigned long st_atime;
540 unsigned long __unused1;
541 unsigned long st_mtime;
542 unsigned long __unused2;
543 unsigned long st_ctime;
544 unsigned long __unused3;
545 unsigned long __unused4;
546 unsigned long __unused5;
547};
548
549
sewardjb48e5002002-05-13 00:16:03 +0000550/* To do with the ELF frame constructed by the kernel on a process'
551 stack just before it transfers control to the program's interpreter
552 (to use the ELF parlance).
sewardja1679dd2002-05-10 22:31:40 +0000553 Constants from /usr/src/linux-2.4.9-31/include/linux/elf.h
554 Logic from /usr/src/linux-2.4.9-31/fs/binfmt_elf.c
555 and its counterpart in the 2.2.14 kernel sources
sewardjb48e5002002-05-13 00:16:03 +0000556 in Red Hat 6.2. */
sewardjd5815ec2003-04-06 12:23:27 +0000557#define VKI_AT_SYSINFO 32 /* address of system info page */
sewardja1679dd2002-05-10 22:31:40 +0000558#define VKI_AT_CLKTCK 17 /* frequency at which times() increments */
559#define VKI_AT_HWCAP 16 /* arch dependent hints at CPU capabilities */
560#define VKI_AT_BASE 7 /* base address of interpreter */
561#define VKI_AT_PAGESZ 6 /* system page size */
562#define VKI_AT_PHNUM 5 /* number of program headers */
563#define VKI_AT_PHENT 4 /* size of program header entry */
564#define VKI_AT_PHDR 3 /* program headers for program */
sewardjce61d052002-07-25 00:49:51 +0000565#define VKI_AT_USER_AUX_SEGMENT 23 /* tell glibc what address segment
566 0x3B points to. (Needed for
567 Red Hat Limbo, 7.3.92) */
sewardja1679dd2002-05-10 22:31:40 +0000568
sewardja83005f2002-06-13 16:07:51 +0000569/* Including <linux/module.h> leads to loads of hassle because then we
570 need <asm/atomic.h> sometimes (RedHat 7.3) and that is a
571 kernel-only header which deliberately #errors on gcc-3.1. Mucho
572 hassle considering that we only want to know sizeof(struct module).
573 Hence ...
574
575 #include <stdio.h>
576 #include <asm/atomic.h>
577 #include <linux/module.h>
578
579 int main ( void )
580 {
581 printf ("sizeof(struct module) = %d\n", sizeof(struct module) );
582 return 0;
583 }
584*/
585
586#define VKI_SIZEOF_STRUCT_MODULE 96
sewardja1679dd2002-05-10 22:31:40 +0000587
sewardj92a59562002-09-30 00:53:10 +0000588
589/* This is the structure passed to the modify_ldt syscall. Just so as
590 to confuse and annoy everyone, this is _not_ the same as an
591 VgLdtEntry and has to be translated into such. The logic for doing
592 so, in vg_ldt.c, is copied from the kernel sources. */
593/*
594 * ldt.h
595 *
596 * Definitions of structures used with the modify_ldt system call.
597 */
598typedef struct vki_modify_ldt_ldt_s {
599 unsigned int entry_number;
600 unsigned long base_addr;
601 unsigned int limit;
602 unsigned int seg_32bit:1;
603 unsigned int contents:2;
604 unsigned int read_exec_only:1;
605 unsigned int limit_in_pages:1;
606 unsigned int seg_not_present:1;
607 unsigned int useable:1;
608} vki_modify_ldt_t;
609
610#define VKI_MODIFY_LDT_CONTENTS_DATA 0
611#define VKI_MODIFY_LDT_CONTENTS_STACK 1
612#define VKI_MODIFY_LDT_CONTENTS_CODE 2
613
614
jsgf855d93d2003-10-13 22:26:55 +0000615/* Flags for clone() */
616/* linux/sched.h */
617#define VKI_CSIGNAL 0x000000ff /* signal mask to be sent at exit */
618#define VKI_CLONE_VM 0x00000100 /* set if VM shared between processes */
619#define VKI_CLONE_FS 0x00000200 /* set if fs info shared between processes */
620#define VKI_CLONE_FILES 0x00000400 /* set if open files shared between processes */
621#define VKI_CLONE_SIGHAND 0x00000800 /* set if signal handlers and blocked signals shared */
622#define VKI_CLONE_IDLETASK 0x00001000 /* set if new pid should be 0 (kernel only)*/
623#define VKI_CLONE_PTRACE 0x00002000 /* set if we want to let tracing continue on the child too */
624#define VKI_CLONE_VFORK 0x00004000 /* set if the parent wants the child to wake it up on mm_release */
625#define VKI_CLONE_PARENT 0x00008000 /* set if we want to have the same parent as the cloner */
626#define VKI_CLONE_THREAD 0x00010000 /* Same thread group? */
627#define VKI_CLONE_NEWNS 0x00020000 /* New namespace group? */
628#define VKI_CLONE_SYSVSEM 0x00040000 /* share system V SEM_UNDO semantics */
629#define VKI_CLONE_SETTLS 0x00080000 /* create a new TLS for the child */
630#define VKI_CLONE_PARENT_SETTID 0x00100000 /* set the TID in the parent */
631#define VKI_CLONE_CHILD_CLEARTID 0x00200000 /* clear the TID in the child */
632#define VKI_CLONE_DETACHED 0x00400000 /* parent wants no child-exit signal */
633#define VKI_CLONE_UNTRACED 0x00800000 /* set if the tracing process can't force VKI_CLONE_PTRACE on this clone */
634#define VKI_CLONE_CHILD_SETTID 0x01000000 /* set the TID in the child */
sewardj92a59562002-09-30 00:53:10 +0000635
sewardjde4a1d02002-03-22 01:27:54 +0000636#endif /* ndef __VG_KERNELIFACE_H */
637
638/*--------------------------------------------------------------------*/
639/*--- end vg_kerneliface.h ---*/
640/*--------------------------------------------------------------------*/