LCOV - code coverage report
Current view: top level - lkbce/arch/x86/include/asm - compat.h (source / functions) Hit Total Coverage
Test: coverage.info Lines: 5 5 100.0 %
Date: 2017-01-25 Functions: 1 1 100.0 %

          Line data    Source code
       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           1 : 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           1 : 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           1 : 
      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           1 : typedef u32             compat_uptr_t;
     196             : 
     197             : static inline void __user *compat_ptr(compat_uptr_t uptr)
     198             : {
     199           1 :         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 *arch_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 */

Generated by: LCOV version 1.10