xref: /linux/arch/x86/entry/syscall_64.c (revision 46e6acfe3501fa938af9c5bd730f0020235b08a2)
1 // SPDX-License-Identifier: GPL-2.0
2 /* System call table for x86-64. */
3 
4 #include <linux/linkage.h>
5 #include <linux/sys.h>
6 #include <linux/cache.h>
7 #include <linux/syscalls.h>
8 #include <asm/syscall.h>
9 
10 #define __SYSCALL(nr, sym) extern long __x64_##sym(const struct pt_regs *);
11 #define __SYSCALL_NORETURN(nr, sym) extern long __noreturn __x64_##sym(const struct pt_regs *);
12 #include <asm/syscalls_64.h>
13 #undef  __SYSCALL
14 
15 #undef  __SYSCALL_NORETURN
16 #define __SYSCALL_NORETURN __SYSCALL
17 
18 /*
19  * The sys_call_table[] is no longer used for system calls, but
20  * kernel/trace/trace_syscalls.c still wants to know the system
21  * call address.
22  */
23 #define __SYSCALL(nr, sym) __x64_##sym,
24 const sys_call_ptr_t sys_call_table[] = {
25 #include <asm/syscalls_64.h>
26 };
27 #undef  __SYSCALL
28 
29 #define __SYSCALL(nr, sym) case nr: return __x64_##sym(regs);
30 long x64_sys_call(const struct pt_regs *regs, unsigned int nr)
31 {
32 	switch (nr) {
33 	#include <asm/syscalls_64.h>
34 	default: return __x64_sys_ni_syscall(regs);
35 	}
36 };
37