Skip to content

Commit

Permalink
arm64: generate 64-bit syscall.tbl
Browse files Browse the repository at this point in the history
Change the asm/unistd.h header for arm64 to no longer include
asm-generic/unistd.h itself, but instead generate both the asm/unistd.h
contents and the list of entry points using the syscall.tbl scripts that
we use on most other architectures.

Once his is done for the remaining architectures, the generic unistd.h
header can be removed and the generated tbl file put in its place.

The Makefile changes are more complex than they should be, I need
a little help to improve those. Ideally this should be done in an
architecture-independent way as well.

Acked-by: Catalin Marinas <catalin.marinas@arm.com>
Signed-off-by: Arnd Bergmann <arnd@arndb.de>
  • Loading branch information
Arnd Bergmann committed Jul 10, 2024
1 parent 7fe33e9 commit e632bca
Show file tree
Hide file tree
Showing 9 changed files with 17 additions and 29 deletions.
1 change: 1 addition & 0 deletions arch/arm64/include/asm/Kbuild
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
# SPDX-License-Identifier: GPL-2.0
syscall-y += syscall_table_32.h
syscall-y += syscall_table_64.h

# arm32 syscall table used by lib/compat_audit.c:
syscall-y += unistd_32.h
Expand Down
1 change: 1 addition & 0 deletions arch/arm64/include/asm/seccomp.h
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@
#define SECCOMP_ARCH_NATIVE_NR NR_syscalls
#define SECCOMP_ARCH_NATIVE_NAME "aarch64"
#ifdef CONFIG_COMPAT
#include <asm/unistd_compat_32.h>
# define SECCOMP_ARCH_COMPAT AUDIT_ARCH_ARM
# define SECCOMP_ARCH_COMPAT_NR __NR_compat32_syscalls
# define SECCOMP_ARCH_COMPAT_NAME "arm"
Expand Down
5 changes: 2 additions & 3 deletions arch/arm64/include/asm/unistd.h
Original file line number Diff line number Diff line change
Expand Up @@ -41,9 +41,8 @@
#endif

#define __ARCH_WANT_SYS_CLONE
#define __ARCH_WANT_NEW_STAT

#ifndef __COMPAT_SYSCALL_NR
#include <uapi/asm/unistd.h>
#endif
#include <asm/unistd_64.h>

#define NR_syscalls (__NR_syscalls)
1 change: 1 addition & 0 deletions arch/arm64/include/uapi/asm/Kbuild
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
# SPDX-License-Identifier: GPL-2.0
syscall-y += unistd_64.h

generic-y += kvm_para.h
24 changes: 1 addition & 23 deletions arch/arm64/include/uapi/asm/unistd.h
Original file line number Diff line number Diff line change
@@ -1,24 +1,2 @@
/* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */
/*
* Copyright (C) 2012 ARM Ltd.
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License version 2 as
* published by the Free Software Foundation.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/

#define __ARCH_WANT_RENAMEAT
#define __ARCH_WANT_NEW_STAT
#define __ARCH_WANT_SET_GET_RLIMIT
#define __ARCH_WANT_TIME32_SYSCALLS
#define __ARCH_WANT_MEMFD_SECRET

#include <asm-generic/unistd.h>
#include <asm/unistd_64.h>
1 change: 1 addition & 0 deletions arch/arm64/kernel/Makefile.syscalls
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
# SPDX-License-Identifier: GPL-2.0

syscall_abis_32 +=
syscall_abis_64 += renameat newstat rlimit memfd_secret

syscalltbl = arch/arm64/tools/syscall_%.tbl
6 changes: 4 additions & 2 deletions arch/arm64/kernel/sys.c
Original file line number Diff line number Diff line change
Expand Up @@ -48,14 +48,16 @@ asmlinkage long __arm64_sys_ni_syscall(const struct pt_regs *__unused)
*/
#define __arm64_sys_personality __arm64_sys_arm64_personality

#define __SYSCALL_WITH_COMPAT(nr, native, compat) __SYSCALL(nr, native)

#undef __SYSCALL
#define __SYSCALL(nr, sym) asmlinkage long __arm64_##sym(const struct pt_regs *);
#include <asm/unistd.h>
#include <asm/syscall_table_64.h>

#undef __SYSCALL
#define __SYSCALL(nr, sym) [nr] = __arm64_##sym,

const syscall_fn_t sys_call_table[__NR_syscalls] = {
[0 ... __NR_syscalls - 1] = __arm64_sys_ni_syscall,
#include <asm/unistd.h>
#include <asm/syscall_table_64.h>
};
6 changes: 5 additions & 1 deletion arch/arm64/tools/Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -3,12 +3,16 @@
gen := arch/$(ARCH)/include/generated
kapi := $(gen)/asm

kapi-hdrs-y := $(kapi)/cpucap-defs.h $(kapi)/sysreg-defs.h
kapisyshdr-y := cpucap-defs.h sysreg-defs.h

kapi-hdrs-y := $(addprefix $(kapi)/, $(kapisyshdr-y))

targets += $(addprefix ../../../, $(kapi-hdrs-y))

PHONY += kapi

all: $(syscall64) kapi

kapi: $(kapi-hdrs-y)

quiet_cmd_gen_cpucaps = GEN $@
Expand Down
1 change: 1 addition & 0 deletions arch/arm64/tools/syscall_64.tbl

0 comments on commit e632bca

Please sign in to comment.