arch/x86/include/asm/compat.h
changeset 0 aa628870c1d3
equal deleted inserted replaced
-1:000000000000 0:aa628870c1d3
       
     1 #ifndef _ASM_X86_COMPAT_H
       
     2 #define _ASM_X86_COMPAT_H
       
     3 
       
     4 /*
       
     5  * Architecture specific compatibility types
       
     6  */
       
     7 #include <linux/types.h>
       
     8 #include <linux/sched.h>
       
     9 #include <asm/user32.h>
       
    10 
       
    11 #define COMPAT_USER_HZ	100
       
    12 
       
    13 typedef u32		compat_size_t;
       
    14 typedef s32		compat_ssize_t;
       
    15 typedef s32		compat_time_t;
       
    16 typedef s32		compat_clock_t;
       
    17 typedef s32		compat_pid_t;
       
    18 typedef u16		__compat_uid_t;
       
    19 typedef u16		__compat_gid_t;
       
    20 typedef u32		__compat_uid32_t;
       
    21 typedef u32		__compat_gid32_t;
       
    22 typedef u16		compat_mode_t;
       
    23 typedef u32		compat_ino_t;
       
    24 typedef u16		compat_dev_t;
       
    25 typedef s32		compat_off_t;
       
    26 typedef s64		compat_loff_t;
       
    27 typedef u16		compat_nlink_t;
       
    28 typedef u16		compat_ipc_pid_t;
       
    29 typedef s32		compat_daddr_t;
       
    30 typedef u32		compat_caddr_t;
       
    31 typedef __kernel_fsid_t	compat_fsid_t;
       
    32 typedef s32		compat_timer_t;
       
    33 typedef s32		compat_key_t;
       
    34 
       
    35 typedef s32		compat_int_t;
       
    36 typedef s32		compat_long_t;
       
    37 typedef s64 __attribute__((aligned(4))) compat_s64;
       
    38 typedef u32		compat_uint_t;
       
    39 typedef u32		compat_ulong_t;
       
    40 typedef u64 __attribute__((aligned(4))) compat_u64;
       
    41 
       
    42 struct compat_timespec {
       
    43 	compat_time_t	tv_sec;
       
    44 	s32		tv_nsec;
       
    45 };
       
    46 
       
    47 struct compat_timeval {
       
    48 	compat_time_t	tv_sec;
       
    49 	s32		tv_usec;
       
    50 };
       
    51 
       
    52 struct compat_stat {
       
    53 	compat_dev_t	st_dev;
       
    54 	u16		__pad1;
       
    55 	compat_ino_t	st_ino;
       
    56 	compat_mode_t	st_mode;
       
    57 	compat_nlink_t	st_nlink;
       
    58 	__compat_uid_t	st_uid;
       
    59 	__compat_gid_t	st_gid;
       
    60 	compat_dev_t	st_rdev;
       
    61 	u16		__pad2;
       
    62 	u32		st_size;
       
    63 	u32		st_blksize;
       
    64 	u32		st_blocks;
       
    65 	u32		st_atime;
       
    66 	u32		st_atime_nsec;
       
    67 	u32		st_mtime;
       
    68 	u32		st_mtime_nsec;
       
    69 	u32		st_ctime;
       
    70 	u32		st_ctime_nsec;
       
    71 	u32		__unused4;
       
    72 	u32		__unused5;
       
    73 };
       
    74 
       
    75 struct compat_flock {
       
    76 	short		l_type;
       
    77 	short		l_whence;
       
    78 	compat_off_t	l_start;
       
    79 	compat_off_t	l_len;
       
    80 	compat_pid_t	l_pid;
       
    81 };
       
    82 
       
    83 #define F_GETLK64	12	/*  using 'struct flock64' */
       
    84 #define F_SETLK64	13
       
    85 #define F_SETLKW64	14
       
    86 
       
    87 /*
       
    88  * IA32 uses 4 byte alignment for 64 bit quantities,
       
    89  * so we need to pack this structure.
       
    90  */
       
    91 struct compat_flock64 {
       
    92 	short		l_type;
       
    93 	short		l_whence;
       
    94 	compat_loff_t	l_start;
       
    95 	compat_loff_t	l_len;
       
    96 	compat_pid_t	l_pid;
       
    97 } __attribute__((packed));
       
    98 
       
    99 struct compat_statfs {
       
   100 	int		f_type;
       
   101 	int		f_bsize;
       
   102 	int		f_blocks;
       
   103 	int		f_bfree;
       
   104 	int		f_bavail;
       
   105 	int		f_files;
       
   106 	int		f_ffree;
       
   107 	compat_fsid_t	f_fsid;
       
   108 	int		f_namelen;	/* SunOS ignores this field. */
       
   109 	int		f_frsize;
       
   110 	int		f_spare[5];
       
   111 };
       
   112 
       
   113 #define COMPAT_RLIM_OLD_INFINITY	0x7fffffff
       
   114 #define COMPAT_RLIM_INFINITY		0xffffffff
       
   115 
       
   116 typedef u32		compat_old_sigset_t;	/* at least 32 bits */
       
   117 
       
   118 #define _COMPAT_NSIG		64
       
   119 #define _COMPAT_NSIG_BPW	32
       
   120 
       
   121 typedef u32               compat_sigset_word;
       
   122 
       
   123 #define COMPAT_OFF_T_MAX	0x7fffffff
       
   124 #define COMPAT_LOFF_T_MAX	0x7fffffffffffffffL
       
   125 
       
   126 struct compat_ipc64_perm {
       
   127 	compat_key_t key;
       
   128 	__compat_uid32_t uid;
       
   129 	__compat_gid32_t gid;
       
   130 	__compat_uid32_t cuid;
       
   131 	__compat_gid32_t cgid;
       
   132 	unsigned short mode;
       
   133 	unsigned short __pad1;
       
   134 	unsigned short seq;
       
   135 	unsigned short __pad2;
       
   136 	compat_ulong_t unused1;
       
   137 	compat_ulong_t unused2;
       
   138 };
       
   139 
       
   140 struct compat_semid64_ds {
       
   141 	struct compat_ipc64_perm sem_perm;
       
   142 	compat_time_t  sem_otime;
       
   143 	compat_ulong_t __unused1;
       
   144 	compat_time_t  sem_ctime;
       
   145 	compat_ulong_t __unused2;
       
   146 	compat_ulong_t sem_nsems;
       
   147 	compat_ulong_t __unused3;
       
   148 	compat_ulong_t __unused4;
       
   149 };
       
   150 
       
   151 struct compat_msqid64_ds {
       
   152 	struct compat_ipc64_perm msg_perm;
       
   153 	compat_time_t  msg_stime;
       
   154 	compat_ulong_t __unused1;
       
   155 	compat_time_t  msg_rtime;
       
   156 	compat_ulong_t __unused2;
       
   157 	compat_time_t  msg_ctime;
       
   158 	compat_ulong_t __unused3;
       
   159 	compat_ulong_t msg_cbytes;
       
   160 	compat_ulong_t msg_qnum;
       
   161 	compat_ulong_t msg_qbytes;
       
   162 	compat_pid_t   msg_lspid;
       
   163 	compat_pid_t   msg_lrpid;
       
   164 	compat_ulong_t __unused4;
       
   165 	compat_ulong_t __unused5;
       
   166 };
       
   167 
       
   168 struct compat_shmid64_ds {
       
   169 	struct compat_ipc64_perm shm_perm;
       
   170 	compat_size_t  shm_segsz;
       
   171 	compat_time_t  shm_atime;
       
   172 	compat_ulong_t __unused1;
       
   173 	compat_time_t  shm_dtime;
       
   174 	compat_ulong_t __unused2;
       
   175 	compat_time_t  shm_ctime;
       
   176 	compat_ulong_t __unused3;
       
   177 	compat_pid_t   shm_cpid;
       
   178 	compat_pid_t   shm_lpid;
       
   179 	compat_ulong_t shm_nattch;
       
   180 	compat_ulong_t __unused4;
       
   181 	compat_ulong_t __unused5;
       
   182 };
       
   183 
       
   184 /*
       
   185  * The type of struct elf_prstatus.pr_reg in compatible core dumps.
       
   186  */
       
   187 typedef struct user_regs_struct32 compat_elf_gregset_t;
       
   188 
       
   189 /*
       
   190  * A pointer passed in from user mode. This should not
       
   191  * be used for syscall parameters, just declare them
       
   192  * as pointers because the syscall entry code will have
       
   193  * appropriately converted them already.
       
   194  */
       
   195 typedef	u32		compat_uptr_t;
       
   196 
       
   197 static inline void __user *compat_ptr(compat_uptr_t uptr)
       
   198 {
       
   199 	return (void __user *)(unsigned long)uptr;
       
   200 }
       
   201 
       
   202 static inline compat_uptr_t ptr_to_compat(void __user *uptr)
       
   203 {
       
   204 	return (u32)(unsigned long)uptr;
       
   205 }
       
   206 
       
   207 static inline void __user *compat_alloc_user_space(long len)
       
   208 {
       
   209 	struct pt_regs *regs = task_pt_regs(current);
       
   210 	return (void __user *)regs->sp - len;
       
   211 }
       
   212 
       
   213 static inline int is_compat_task(void)
       
   214 {
       
   215 	return current_thread_info()->status & TS_COMPAT;
       
   216 }
       
   217 
       
   218 #endif /* _ASM_X86_COMPAT_H */