linux/arch/x86/include/asm/ia32.h
<<
>>
Prefs
   1#ifndef _ASM_X86_IA32_H
   2#define _ASM_X86_IA32_H
   3
   4
   5#ifdef CONFIG_IA32_EMULATION
   6
   7#include <linux/compat.h>
   8
   9/*
  10 * 32 bit structures for IA32 support.
  11 */
  12
  13#include <asm/sigcontext32.h>
  14
  15/* signal.h */
  16struct sigaction32 {
  17        unsigned int  sa_handler;       /* Really a pointer, but need to deal
  18                                           with 32 bits */
  19        unsigned int sa_flags;
  20        unsigned int sa_restorer;       /* Another 32 bit pointer */
  21        compat_sigset_t sa_mask;        /* A 32 bit mask */
  22};
  23
  24struct old_sigaction32 {
  25        unsigned int  sa_handler;       /* Really a pointer, but need to deal
  26                                           with 32 bits */
  27        compat_old_sigset_t sa_mask;    /* A 32 bit mask */
  28        unsigned int sa_flags;
  29        unsigned int sa_restorer;       /* Another 32 bit pointer */
  30};
  31
  32typedef struct sigaltstack_ia32 {
  33        unsigned int    ss_sp;
  34        int             ss_flags;
  35        unsigned int    ss_size;
  36} stack_ia32_t;
  37
  38struct ucontext_ia32 {
  39        unsigned int      uc_flags;
  40        unsigned int      uc_link;
  41        stack_ia32_t      uc_stack;
  42        struct sigcontext_ia32 uc_mcontext;
  43        compat_sigset_t   uc_sigmask;   /* mask last for extensibility */
  44};
  45
  46/* This matches struct stat64 in glibc2.2, hence the absolutely
  47 * insane amounts of padding around dev_t's.
  48 */
  49struct stat64 {
  50        unsigned long long      st_dev;
  51        unsigned char           __pad0[4];
  52
  53#define STAT64_HAS_BROKEN_ST_INO        1
  54        unsigned int            __st_ino;
  55
  56        unsigned int            st_mode;
  57        unsigned int            st_nlink;
  58
  59        unsigned int            st_uid;
  60        unsigned int            st_gid;
  61
  62        unsigned long long      st_rdev;
  63        unsigned char           __pad3[4];
  64
  65        long long               st_size;
  66        unsigned int            st_blksize;
  67
  68        long long               st_blocks;/* Number 512-byte blocks allocated */
  69
  70        unsigned                st_atime;
  71        unsigned                st_atime_nsec;
  72        unsigned                st_mtime;
  73        unsigned                st_mtime_nsec;
  74        unsigned                st_ctime;
  75        unsigned                st_ctime_nsec;
  76
  77        unsigned long long      st_ino;
  78} __attribute__((packed));
  79
  80typedef struct compat_siginfo {
  81        int si_signo;
  82        int si_errno;
  83        int si_code;
  84
  85        union {
  86                int _pad[((128 / sizeof(int)) - 3)];
  87
  88                /* kill() */
  89                struct {
  90                        unsigned int _pid;      /* sender's pid */
  91                        unsigned int _uid;      /* sender's uid */
  92                } _kill;
  93
  94                /* POSIX.1b timers */
  95                struct {
  96                        compat_timer_t _tid;    /* timer id */
  97                        int _overrun;           /* overrun count */
  98                        compat_sigval_t _sigval;        /* same as below */
  99                        int _sys_private;       /* not to be passed to user */
 100                        int _overrun_incr;      /* amount to add to overrun */
 101                } _timer;
 102
 103                /* POSIX.1b signals */
 104                struct {
 105                        unsigned int _pid;      /* sender's pid */
 106                        unsigned int _uid;      /* sender's uid */
 107                        compat_sigval_t _sigval;
 108                } _rt;
 109
 110                /* SIGCHLD */
 111                struct {
 112                        unsigned int _pid;      /* which child */
 113                        unsigned int _uid;      /* sender's uid */
 114                        int _status;            /* exit code */
 115                        compat_clock_t _utime;
 116                        compat_clock_t _stime;
 117                } _sigchld;
 118
 119                /* SIGILL, SIGFPE, SIGSEGV, SIGBUS */
 120                struct {
 121                        unsigned int _addr;     /* faulting insn/memory ref. */
 122                } _sigfault;
 123
 124                /* SIGPOLL */
 125                struct {
 126                        int _band;      /* POLL_IN, POLL_OUT, POLL_MSG */
 127                        int _fd;
 128                } _sigpoll;
 129        } _sifields;
 130} compat_siginfo_t;
 131
 132struct sigframe32 {
 133        u32 pretcode;
 134        int sig;
 135        struct sigcontext_ia32 sc;
 136        struct _fpstate_ia32 fpstate;
 137        unsigned int extramask[_COMPAT_NSIG_WORDS-1];
 138};
 139
 140struct rt_sigframe32 {
 141        u32 pretcode;
 142        int sig;
 143        u32 pinfo;
 144        u32 puc;
 145        compat_siginfo_t info;
 146        struct ucontext_ia32 uc;
 147        struct _fpstate_ia32 fpstate;
 148};
 149
 150struct ustat32 {
 151        __u32                   f_tfree;
 152        compat_ino_t            f_tinode;
 153        char                    f_fname[6];
 154        char                    f_fpack[6];
 155};
 156
 157#define IA32_STACK_TOP IA32_PAGE_OFFSET
 158
 159#ifdef __KERNEL__
 160struct linux_binprm;
 161extern int ia32_setup_arg_pages(struct linux_binprm *bprm,
 162                                unsigned long stack_top, int exec_stack);
 163struct mm_struct;
 164extern void ia32_pick_mmap_layout(struct mm_struct *mm);
 165
 166#endif
 167
 168#endif /* !CONFIG_IA32_SUPPORT */
 169
 170#endif /* _ASM_X86_IA32_H */
 171
lxr.linux.no kindly hosted by Redpill Linpro AS, provider of Linux consulting and operations services since 1995.