summaryrefslogtreecommitdiff
path: root/arch/arm/include/uapi/asm/unistd.h
diff options
context:
space:
mode:
authorArnd Bergmann <arnd@arndb.de>2021-08-11 10:30:21 +0300
committerRussell King (Oracle) <rmk+kernel@armlinux.org.uk>2021-08-20 13:39:26 +0300
commit4e57a4ddf6b0d9cce1cf2ffd153df1ad3c2c9cc2 (patch)
tree42437fff60b251bb78085be3f048dfa4edf27a33 /arch/arm/include/uapi/asm/unistd.h
parentb6e47f3c11c17965acb2a12001af3b1cd5658f37 (diff)
downloadlinux-4e57a4ddf6b0d9cce1cf2ffd153df1ad3c2c9cc2.tar.xz
ARM: 9107/1: syscall: always store thread_info->abi_syscall
The system call number is used in a a couple of places, in particular ptrace, seccomp and /proc/<pid>/syscall. The last one apparently never worked reliably on ARM for tasks that are not currently getting traced. Storing the syscall number in the normal entry path makes it work, as well as allowing us to see if the current system call is for OABI compat mode, which is the next thing I want to hook into. Since the thread_info->syscall field is not just the number any more, it is now renamed to abi_syscall. In kernels that enable both OABI and EABI, the upper bits of this field encode 0x900000 (__NR_OABI_SYSCALL_BASE) for OABI tasks, while normal EABI tasks do not set the upper bits. This makes it possible to implement the in_oabi_syscall() helper later. All other users of thread_info->syscall go through the syscall_get_nr() helper, which in turn filters out the ABI bits. Note that the ABI information is lost with PTRACE_SET_SYSCALL, so one cannot set the internal number to a particular version, but this was already the case. We could change it to let gdb encode the ABI type along with the syscall in a CONFIG_OABI_COMPAT-enabled kernel, but that itself would be a (backwards-compatible) ABI change, so I don't do it here. Acked-by: Christoph Hellwig <hch@lst.de> Signed-off-by: Arnd Bergmann <arnd@arndb.de> Signed-off-by: Russell King (Oracle) <rmk+kernel@armlinux.org.uk>
Diffstat (limited to 'arch/arm/include/uapi/asm/unistd.h')
-rw-r--r--arch/arm/include/uapi/asm/unistd.h1
1 files changed, 1 insertions, 0 deletions
diff --git a/arch/arm/include/uapi/asm/unistd.h b/arch/arm/include/uapi/asm/unistd.h
index ae7749e15726..a1149911464c 100644
--- a/arch/arm/include/uapi/asm/unistd.h
+++ b/arch/arm/include/uapi/asm/unistd.h
@@ -15,6 +15,7 @@
#define _UAPI__ASM_ARM_UNISTD_H
#define __NR_OABI_SYSCALL_BASE 0x900000
+#define __NR_SYSCALL_MASK 0x0fffff
#if defined(__thumb__) || defined(__ARM_EABI__)
#define __NR_SYSCALL_BASE 0