home *** CD-ROM | disk | FTP | other *** search
/ PC Welt 2006 November (DVD) / PCWELT_11_2006.ISO / casper / filesystem.squashfs / usr / src / linux-headers-2.6.17-6 / include / asm-x86_64 / ia32.h < prev    next >
Encoding:
C/C++ Source or Header  |  2006-08-11  |  3.9 KB  |  179 lines

  1. #ifndef _ASM_X86_64_IA32_H
  2. #define _ASM_X86_64_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 */
  16. struct 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.  
  24. struct 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.  
  32. typedef struct sigaltstack_ia32 {
  33.     unsigned int    ss_sp;
  34.     int        ss_flags;
  35.     unsigned int    ss_size;
  36. } stack_ia32_t;
  37.  
  38. struct 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.  */
  49. struct 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.  
  80. typedef 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.  
  132. struct sigframe32
  133. {
  134.         u32 pretcode;
  135.         int sig;
  136.         struct sigcontext_ia32 sc;
  137.         struct _fpstate_ia32 fpstate;
  138.         unsigned int extramask[_COMPAT_NSIG_WORDS-1];
  139. };
  140.  
  141. struct rt_sigframe32
  142. {
  143.         u32 pretcode;
  144.         int sig;
  145.         u32 pinfo;
  146.         u32 puc;
  147.         compat_siginfo_t info;
  148.         struct ucontext_ia32 uc;
  149.         struct _fpstate_ia32 fpstate;
  150. };
  151.  
  152. struct ustat32 {
  153.     __u32    f_tfree;
  154.     compat_ino_t        f_tinode;
  155.     char            f_fname[6];
  156.     char            f_fpack[6];
  157. };
  158.  
  159. #define IA32_STACK_TOP IA32_PAGE_OFFSET
  160.  
  161. #ifdef __KERNEL__
  162. struct user_desc;
  163. struct siginfo_t;
  164. int do_get_thread_area(struct thread_struct *t, struct user_desc __user *info);
  165. int do_set_thread_area(struct thread_struct *t, struct user_desc __user *info);
  166. int ia32_child_tls(struct task_struct *p, struct pt_regs *childregs);
  167.  
  168. struct linux_binprm;
  169. extern int ia32_setup_arg_pages(struct linux_binprm *bprm,
  170.                 unsigned long stack_top, int exec_stack);
  171. struct mm_struct;
  172. extern void ia32_pick_mmap_layout(struct mm_struct *mm);
  173.  
  174. #endif
  175.  
  176. #endif /* !CONFIG_IA32_SUPPORT */
  177.  
  178. #endif 
  179.