Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
torvalds
GitHub Repository: torvalds/linux
Path: blob/master/arch/x86/include/asm/compat.h
26481 views
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
if (task_pt_regs(current)->orig_ax & __X32_SYSCALL_BIT)
87
return true;
88
#endif
89
return false;
90
}
91
92
static inline bool in_32bit_syscall(void)
93
{
94
return in_ia32_syscall() || in_x32_syscall();
95
}
96
97
#ifdef CONFIG_COMPAT
98
static inline bool in_compat_syscall(void)
99
{
100
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 */
115
116