LCOV - code coverage report
Current view: top level - arch/x86/include/asm - compat.h (source / functions) Hit Total Coverage
Test: fstests of 6.5.0-rc3-achx @ Mon Jul 31 20:08:12 PDT 2023 Lines: 4 5 80.0 %
Date: 2023-07-31 20:08:12 Functions: 1 1 100.0 %

          Line data    Source code
       1             : /* SPDX-License-Identifier: GPL-2.0 */
       2             : #ifndef _ASM_X86_COMPAT_H
       3             : #define _ASM_X86_COMPAT_H
       4             : 
       5             : /*
       6             :  * Architecture specific compatibility types
       7             :  */
       8             : #include <linux/types.h>
       9             : #include <linux/sched.h>
      10             : #include <linux/sched/task_stack.h>
      11             : #include <asm/processor.h>
      12             : #include <asm/user32.h>
      13             : #include <asm/unistd.h>
      14             : 
      15             : #define compat_mode_t   compat_mode_t
      16             : typedef u16             compat_mode_t;
      17             : 
      18             : #define __compat_uid_t  __compat_uid_t
      19             : typedef u16             __compat_uid_t;
      20             : typedef u16             __compat_gid_t;
      21             : 
      22             : #define compat_dev_t    compat_dev_t
      23             : typedef u16             compat_dev_t;
      24             : 
      25             : #define compat_ipc_pid_t compat_ipc_pid_t
      26             : typedef u16              compat_ipc_pid_t;
      27             : 
      28             : #define compat_statfs   compat_statfs
      29             : 
      30             : #include <asm-generic/compat.h>
      31             : 
      32             : #define COMPAT_UTS_MACHINE      "i686\0\0"
      33             : 
      34             : typedef u16             compat_nlink_t;
      35             : 
      36             : struct compat_stat {
      37             :         u32             st_dev;
      38             :         compat_ino_t    st_ino;
      39             :         compat_mode_t   st_mode;
      40             :         compat_nlink_t  st_nlink;
      41             :         __compat_uid_t  st_uid;
      42             :         __compat_gid_t  st_gid;
      43             :         u32             st_rdev;
      44             :         u32             st_size;
      45             :         u32             st_blksize;
      46             :         u32             st_blocks;
      47             :         u32             st_atime;
      48             :         u32             st_atime_nsec;
      49             :         u32             st_mtime;
      50             :         u32             st_mtime_nsec;
      51             :         u32             st_ctime;
      52             :         u32             st_ctime_nsec;
      53             :         u32             __unused4;
      54             :         u32             __unused5;
      55             : };
      56             : 
      57             : /*
      58             :  * IA32 uses 4 byte alignment for 64 bit quantities, so we need to pack the
      59             :  * compat flock64 structure.
      60             :  */
      61             : #define __ARCH_NEED_COMPAT_FLOCK64_PACKED
      62             : 
      63             : struct compat_statfs {
      64             :         int             f_type;
      65             :         int             f_bsize;
      66             :         int             f_blocks;
      67             :         int             f_bfree;
      68             :         int             f_bavail;
      69             :         int             f_files;
      70             :         int             f_ffree;
      71             :         compat_fsid_t   f_fsid;
      72             :         int             f_namelen;      /* SunOS ignores this field. */
      73             :         int             f_frsize;
      74             :         int             f_flags;
      75             :         int             f_spare[4];
      76             : };
      77             : 
      78             : #ifdef CONFIG_X86_X32_ABI
      79             : #define COMPAT_USE_64BIT_TIME \
      80             :         (!!(task_pt_regs(current)->orig_ax & __X32_SYSCALL_BIT))
      81             : #endif
      82             : 
      83             : static inline bool in_x32_syscall(void)
      84             : {
      85             : #ifdef CONFIG_X86_X32_ABI
      86   153289683 :         if (task_pt_regs(current)->orig_ax & __X32_SYSCALL_BIT)
      87           0 :                 return true;
      88             : #endif
      89             :         return false;
      90             : }
      91             : 
      92   153289436 : static inline bool in_32bit_syscall(void)
      93             : {
      94   153289436 :         return in_ia32_syscall() || in_x32_syscall();
      95             : }
      96             : 
      97             : #ifdef CONFIG_COMPAT
      98             : static inline bool in_compat_syscall(void)
      99             : {
     100   153289877 :         return in_32bit_syscall();
     101             : }
     102             : #define in_compat_syscall in_compat_syscall     /* override the generic impl */
     103             : #define compat_need_64bit_alignment_fixup in_ia32_syscall
     104             : #endif
     105             : 
     106             : struct compat_siginfo;
     107             : 
     108             : #ifdef CONFIG_X86_X32_ABI
     109             : int copy_siginfo_to_user32(struct compat_siginfo __user *to,
     110             :                 const kernel_siginfo_t *from);
     111             : #define copy_siginfo_to_user32 copy_siginfo_to_user32
     112             : #endif /* CONFIG_X86_X32_ABI */
     113             : 
     114             : #endif /* _ASM_X86_COMPAT_H */

Generated by: LCOV version 1.14