ia32.h 3.8 KB
Newer Older
H
H. Peter Anvin 已提交
1 2
#ifndef _ASM_X86_IA32_H
#define _ASM_X86_IA32_H
L
Linus Torvalds 已提交
3 4 5 6 7 8 9 10 11 12 13 14 15 16


#ifdef CONFIG_IA32_EMULATION

#include <linux/compat.h>

/*
 * 32 bit structures for IA32 support.
 */

#include <asm/sigcontext32.h>

/* signal.h */
struct sigaction32 {
17 18 19 20 21
	unsigned int  sa_handler;	/* Really a pointer, but need to deal
					   with 32 bits */
	unsigned int sa_flags;
	unsigned int sa_restorer;	/* Another 32 bit pointer */
	compat_sigset_t sa_mask;	/* A 32 bit mask */
L
Linus Torvalds 已提交
22 23 24
};

struct old_sigaction32 {
25 26 27 28 29
	unsigned int  sa_handler;	/* Really a pointer, but need to deal
					   with 32 bits */
	compat_old_sigset_t sa_mask;	/* A 32 bit mask */
	unsigned int sa_flags;
	unsigned int sa_restorer;	/* Another 32 bit pointer */
L
Linus Torvalds 已提交
30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45
};

typedef struct sigaltstack_ia32 {
	unsigned int	ss_sp;
	int		ss_flags;
	unsigned int	ss_size;
} stack_ia32_t;

struct ucontext_ia32 {
	unsigned int	  uc_flags;
	unsigned int 	  uc_link;
	stack_ia32_t	  uc_stack;
	struct sigcontext_ia32 uc_mcontext;
	compat_sigset_t	  uc_sigmask;	/* mask last for extensibility */
};

H
H. J. Lu 已提交
46 47 48 49 50 51 52 53 54
struct ucontext_x32 {
	unsigned int	  uc_flags;
	unsigned int 	  uc_link;
	stack_ia32_t	  uc_stack;
	unsigned int	  uc__pad0;     /* needed for alignment */
	struct sigcontext uc_mcontext;  /* the 64-bit sigcontext type */
	compat_sigset_t	  uc_sigmask;	/* mask last for extensibility */
};

L
Linus Torvalds 已提交
55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76
/* This matches struct stat64 in glibc2.2, hence the absolutely
 * insane amounts of padding around dev_t's.
 */
struct stat64 {
	unsigned long long	st_dev;
	unsigned char		__pad0[4];

#define STAT64_HAS_BROKEN_ST_INO	1
	unsigned int		__st_ino;

	unsigned int		st_mode;
	unsigned int		st_nlink;

	unsigned int		st_uid;
	unsigned int		st_gid;

	unsigned long long	st_rdev;
	unsigned char		__pad3[4];

	long long		st_size;
	unsigned int		st_blksize;

77
	long long		st_blocks;/* Number 512-byte blocks allocated */
L
Linus Torvalds 已提交
78 79 80 81 82 83 84 85 86 87 88

	unsigned 		st_atime;
	unsigned 		st_atime_nsec;
	unsigned 		st_mtime;
	unsigned 		st_mtime_nsec;
	unsigned 		st_ctime;
	unsigned 		st_ctime_nsec;

	unsigned long long	st_ino;
} __attribute__((packed));

89
typedef struct compat_siginfo {
L
Linus Torvalds 已提交
90 91 92 93 94
	int si_signo;
	int si_errno;
	int si_code;

	union {
95
		int _pad[((128 / sizeof(int)) - 3)];
L
Linus Torvalds 已提交
96 97 98 99 100 101 102 103 104

		/* kill() */
		struct {
			unsigned int _pid;	/* sender's pid */
			unsigned int _uid;	/* sender's uid */
		} _kill;

		/* POSIX.1b timers */
		struct {
105
			compat_timer_t _tid;	/* timer id */
L
Linus Torvalds 已提交
106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127
			int _overrun;		/* overrun count */
			compat_sigval_t _sigval;	/* same as below */
			int _sys_private;	/* not to be passed to user */
			int _overrun_incr;	/* amount to add to overrun */
		} _timer;

		/* POSIX.1b signals */
		struct {
			unsigned int _pid;	/* sender's pid */
			unsigned int _uid;	/* sender's uid */
			compat_sigval_t _sigval;
		} _rt;

		/* SIGCHLD */
		struct {
			unsigned int _pid;	/* which child */
			unsigned int _uid;	/* sender's uid */
			int _status;		/* exit code */
			compat_clock_t _utime;
			compat_clock_t _stime;
		} _sigchld;

H
H. Peter Anvin 已提交
128 129 130 131 132
		/* SIGCHLD (x32 version) */
		struct {
			unsigned int _pid;	/* which child */
			unsigned int _uid;	/* sender's uid */
			int _status;		/* exit code */
133 134
			compat_s64 _utime;
			compat_s64 _stime;
H
H. Peter Anvin 已提交
135 136
		} _sigchld_x32;

L
Linus Torvalds 已提交
137 138 139 140 141 142 143 144 145 146
		/* SIGILL, SIGFPE, SIGSEGV, SIGBUS */
		struct {
			unsigned int _addr;	/* faulting insn/memory ref. */
		} _sigfault;

		/* SIGPOLL */
		struct {
			int _band;	/* POLL_IN, POLL_OUT, POLL_MSG */
			int _fd;
		} _sigpoll;
147 148 149 150 151 152

		struct {
			unsigned int _call_addr; /* calling insn */
			int _syscall;	/* triggering system call number */
			unsigned int _arch;	/* AUDIT_ARCH_* of syscall */
		} _sigsys;
L
Linus Torvalds 已提交
153 154 155 156 157 158
	} _sifields;
} compat_siginfo_t;

#define IA32_STACK_TOP IA32_PAGE_OFFSET

#ifdef __KERNEL__
159 160 161
struct linux_binprm;
extern int ia32_setup_arg_pages(struct linux_binprm *bprm,
				unsigned long stack_top, int exec_stack);
162 163
struct mm_struct;
extern void ia32_pick_mmap_layout(struct mm_struct *mm);
164

L
Linus Torvalds 已提交
165 166 167
#endif

#endif /* !CONFIG_IA32_SUPPORT */
168

H
H. Peter Anvin 已提交
169
#endif /* _ASM_X86_IA32_H */