root/arch/mips/include/asm/compat.h

/* [<][>][^][v][top][bottom][index][help] */

INCLUDED FROM


DEFINITIONS

This source file includes following definitions.
  1. compat_ptr
  2. ptr_to_compat
  3. arch_compat_alloc_user_space
  4. is_compat_task

   1 /* SPDX-License-Identifier: GPL-2.0 */
   2 #ifndef _ASM_COMPAT_H
   3 #define _ASM_COMPAT_H
   4 /*
   5  * Architecture specific compatibility types
   6  */
   7 #include <linux/thread_info.h>
   8 #include <linux/types.h>
   9 #include <asm/page.h>
  10 #include <asm/ptrace.h>
  11 
  12 #include <asm-generic/compat.h>
  13 
  14 #define COMPAT_USER_HZ          100
  15 #define COMPAT_UTS_MACHINE      "mips\0\0\0"
  16 
  17 typedef s32             __compat_uid_t;
  18 typedef s32             __compat_gid_t;
  19 typedef __compat_uid_t  __compat_uid32_t;
  20 typedef __compat_gid_t  __compat_gid32_t;
  21 typedef u32             compat_mode_t;
  22 typedef u32             compat_dev_t;
  23 typedef u32             compat_nlink_t;
  24 typedef s32             compat_ipc_pid_t;
  25 typedef s32             compat_caddr_t;
  26 typedef struct {
  27         s32     val[2];
  28 } compat_fsid_t;
  29 typedef s64             compat_s64;
  30 typedef u64             compat_u64;
  31 
  32 struct compat_stat {
  33         compat_dev_t    st_dev;
  34         s32             st_pad1[3];
  35         compat_ino_t    st_ino;
  36         compat_mode_t   st_mode;
  37         compat_nlink_t  st_nlink;
  38         __compat_uid_t  st_uid;
  39         __compat_gid_t  st_gid;
  40         compat_dev_t    st_rdev;
  41         s32             st_pad2[2];
  42         compat_off_t    st_size;
  43         s32             st_pad3;
  44         old_time32_t    st_atime;
  45         s32             st_atime_nsec;
  46         old_time32_t    st_mtime;
  47         s32             st_mtime_nsec;
  48         old_time32_t    st_ctime;
  49         s32             st_ctime_nsec;
  50         s32             st_blksize;
  51         s32             st_blocks;
  52         s32             st_pad4[14];
  53 };
  54 
  55 struct compat_flock {
  56         short           l_type;
  57         short           l_whence;
  58         compat_off_t    l_start;
  59         compat_off_t    l_len;
  60         s32             l_sysid;
  61         compat_pid_t    l_pid;
  62         s32             pad[4];
  63 };
  64 
  65 #define F_GETLK64       33
  66 #define F_SETLK64       34
  67 #define F_SETLKW64      35
  68 
  69 struct compat_flock64 {
  70         short           l_type;
  71         short           l_whence;
  72         compat_loff_t   l_start;
  73         compat_loff_t   l_len;
  74         compat_pid_t    l_pid;
  75 };
  76 
  77 struct compat_statfs {
  78         int             f_type;
  79         int             f_bsize;
  80         int             f_frsize;
  81         int             f_blocks;
  82         int             f_bfree;
  83         int             f_files;
  84         int             f_ffree;
  85         int             f_bavail;
  86         compat_fsid_t   f_fsid;
  87         int             f_namelen;
  88         int             f_flags;
  89         int             f_spare[5];
  90 };
  91 
  92 #define COMPAT_RLIM_INFINITY    0x7fffffffUL
  93 
  94 typedef u32             compat_old_sigset_t;    /* at least 32 bits */
  95 
  96 #define _COMPAT_NSIG            128             /* Don't ask !$@#% ...  */
  97 #define _COMPAT_NSIG_BPW        32
  98 
  99 typedef u32             compat_sigset_word;
 100 
 101 #define COMPAT_OFF_T_MAX        0x7fffffff
 102 
 103 /*
 104  * A pointer passed in from user mode. This should not
 105  * be used for syscall parameters, just declare them
 106  * as pointers because the syscall entry code will have
 107  * appropriately converted them already.
 108  */
 109 
 110 static inline void __user *compat_ptr(compat_uptr_t uptr)
 111 {
 112         /* cast to a __user pointer via "unsigned long" makes sparse happy */
 113         return (void __user *)(unsigned long)(long)uptr;
 114 }
 115 
 116 static inline compat_uptr_t ptr_to_compat(void __user *uptr)
 117 {
 118         return (u32)(unsigned long)uptr;
 119 }
 120 
 121 static inline void __user *arch_compat_alloc_user_space(long len)
 122 {
 123         struct pt_regs *regs = (struct pt_regs *)
 124                 ((unsigned long) current_thread_info() + THREAD_SIZE - 32) - 1;
 125 
 126         return (void __user *) (regs->regs[29] - len);
 127 }
 128 
 129 struct compat_ipc64_perm {
 130         compat_key_t key;
 131         __compat_uid32_t uid;
 132         __compat_gid32_t gid;
 133         __compat_uid32_t cuid;
 134         __compat_gid32_t cgid;
 135         compat_mode_t mode;
 136         unsigned short seq;
 137         unsigned short __pad2;
 138         compat_ulong_t __unused1;
 139         compat_ulong_t __unused2;
 140 };
 141 
 142 struct compat_semid64_ds {
 143         struct compat_ipc64_perm sem_perm;
 144         compat_ulong_t  sem_otime;
 145         compat_ulong_t  sem_ctime;
 146         compat_ulong_t  sem_nsems;
 147         compat_ulong_t  sem_otime_high;
 148         compat_ulong_t  sem_ctime_high;
 149 };
 150 
 151 struct compat_msqid64_ds {
 152         struct compat_ipc64_perm msg_perm;
 153 #ifndef CONFIG_CPU_LITTLE_ENDIAN
 154         compat_ulong_t  msg_stime_high;
 155 #endif
 156         compat_ulong_t  msg_stime;
 157 #ifdef CONFIG_CPU_LITTLE_ENDIAN
 158         compat_ulong_t  msg_stime_high;
 159 #endif
 160 #ifndef CONFIG_CPU_LITTLE_ENDIAN
 161         compat_ulong_t  msg_rtime_high;
 162 #endif
 163         compat_ulong_t  msg_rtime;
 164 #ifdef CONFIG_CPU_LITTLE_ENDIAN
 165         compat_ulong_t  msg_rtime_high;
 166 #endif
 167 #ifndef CONFIG_CPU_LITTLE_ENDIAN
 168         compat_ulong_t  msg_ctime_high;
 169 #endif
 170         compat_ulong_t  msg_ctime;
 171 #ifdef CONFIG_CPU_LITTLE_ENDIAN
 172         compat_ulong_t  msg_ctime_high;
 173 #endif
 174         compat_ulong_t  msg_cbytes;
 175         compat_ulong_t  msg_qnum;
 176         compat_ulong_t  msg_qbytes;
 177         compat_pid_t    msg_lspid;
 178         compat_pid_t    msg_lrpid;
 179         compat_ulong_t  __unused4;
 180         compat_ulong_t  __unused5;
 181 };
 182 
 183 struct compat_shmid64_ds {
 184         struct compat_ipc64_perm shm_perm;
 185         compat_size_t   shm_segsz;
 186         compat_ulong_t  shm_atime;
 187         compat_ulong_t  shm_dtime;
 188         compat_ulong_t  shm_ctime;
 189         compat_pid_t    shm_cpid;
 190         compat_pid_t    shm_lpid;
 191         compat_ulong_t  shm_nattch;
 192         compat_ushort_t shm_atime_high;
 193         compat_ushort_t shm_dtime_high;
 194         compat_ushort_t shm_ctime_high;
 195         compat_ushort_t __unused2;
 196 };
 197 
 198 /* MIPS has unusual order of fields in stack_t */
 199 typedef struct compat_sigaltstack {
 200         compat_uptr_t                   ss_sp;
 201         compat_size_t                   ss_size;
 202         int                             ss_flags;
 203 } compat_stack_t;
 204 #define compat_sigaltstack compat_sigaltstack
 205 
 206 static inline int is_compat_task(void)
 207 {
 208         return test_thread_flag(TIF_32BIT_ADDR);
 209 }
 210 
 211 #endif /* _ASM_COMPAT_H */

/* [<][>][^][v][top][bottom][index][help] */