Linux kernel mirror (for testing)
git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel
os
linux
1/* SPDX-License-Identifier: GPL-2.0-only */
2/*
3 * Copyright (C) 2012 ARM Ltd.
4 */
5#ifndef __ASM_COMPAT_H
6#define __ASM_COMPAT_H
7
8#define compat_mode_t compat_mode_t
9typedef u16 compat_mode_t;
10
11#define __compat_uid_t __compat_uid_t
12typedef u16 __compat_uid_t;
13typedef u16 __compat_gid_t;
14
15#define compat_ipc_pid_t compat_ipc_pid_t
16typedef u16 compat_ipc_pid_t;
17
18#define compat_statfs compat_statfs
19
20#include <asm-generic/compat.h>
21
22#ifdef CONFIG_COMPAT
23
24/*
25 * Architecture specific compatibility types
26 */
27#include <linux/types.h>
28#include <linux/sched.h>
29#include <linux/sched/task_stack.h>
30
31#ifdef __AARCH64EB__
32#define COMPAT_UTS_MACHINE "armv8b\0\0"
33#else
34#define COMPAT_UTS_MACHINE "armv8l\0\0"
35#endif
36
37typedef u16 __compat_uid16_t;
38typedef u16 __compat_gid16_t;
39typedef s32 compat_nlink_t;
40
41struct compat_stat {
42#ifdef __AARCH64EB__
43 short st_dev;
44 short __pad1;
45#else
46 compat_dev_t st_dev;
47#endif
48 compat_ino_t st_ino;
49 compat_mode_t st_mode;
50 compat_ushort_t st_nlink;
51 __compat_uid16_t st_uid;
52 __compat_gid16_t st_gid;
53#ifdef __AARCH64EB__
54 short st_rdev;
55 short __pad2;
56#else
57 compat_dev_t st_rdev;
58#endif
59 compat_off_t st_size;
60 compat_off_t st_blksize;
61 compat_off_t st_blocks;
62 old_time32_t st_atime;
63 compat_ulong_t st_atime_nsec;
64 old_time32_t st_mtime;
65 compat_ulong_t st_mtime_nsec;
66 old_time32_t st_ctime;
67 compat_ulong_t st_ctime_nsec;
68 compat_ulong_t __unused4[2];
69};
70
71struct compat_statfs {
72 int f_type;
73 int f_bsize;
74 int f_blocks;
75 int f_bfree;
76 int f_bavail;
77 int f_files;
78 int f_ffree;
79 compat_fsid_t f_fsid;
80 int f_namelen; /* SunOS ignores this field. */
81 int f_frsize;
82 int f_flags;
83 int f_spare[4];
84};
85
86#define compat_user_stack_pointer() (user_stack_pointer(task_pt_regs(current)))
87#define COMPAT_MINSIGSTKSZ 2048
88
89static inline int is_compat_task(void)
90{
91 return test_thread_flag(TIF_32BIT);
92}
93
94static inline int is_compat_thread(struct thread_info *thread)
95{
96 return test_ti_thread_flag(thread, TIF_32BIT);
97}
98
99long compat_arm_syscall(struct pt_regs *regs, int scno);
100
101#else /* !CONFIG_COMPAT */
102
103static inline int is_compat_thread(struct thread_info *thread)
104{
105 return 0;
106}
107
108#endif /* CONFIG_COMPAT */
109#endif /* __ASM_COMPAT_H */