xref: /openbmc/linux/arch/x86/entry/syscall_64.c (revision 86aa961bb4619a68077ebeba21c52e9ba0eab43d)
1b2441318SGreg Kroah-Hartman // SPDX-License-Identifier: GPL-2.0
200398a00SIngo Molnar /* System call table for x86-64. */
300398a00SIngo Molnar 
400398a00SIngo Molnar #include <linux/linkage.h>
500398a00SIngo Molnar #include <linux/sys.h>
600398a00SIngo Molnar #include <linux/cache.h>
7f48f01a9SSami Tolvanen #include <linux/syscalls.h>
800398a00SIngo Molnar #include <asm/syscall.h>
900398a00SIngo Molnar 
106218d0f6SMasahiro Yamada #define __SYSCALL(nr, sym) extern long __x64_##sym(const struct pt_regs *);
1100398a00SIngo Molnar #include <asm/syscalls_64.h>
126218d0f6SMasahiro Yamada #undef __SYSCALL
1300398a00SIngo Molnar 
14*eb0f175bSLinus Torvalds /*
15*eb0f175bSLinus Torvalds  * The sys_call_table[] is no longer used for system calls, but
16*eb0f175bSLinus Torvalds  * kernel/trace/trace_syscalls.c still wants to know the system
17*eb0f175bSLinus Torvalds  * call address.
18*eb0f175bSLinus Torvalds  */
1944fe4895SMasahiro Yamada #define __SYSCALL(nr, sym) __x64_##sym,
20*eb0f175bSLinus Torvalds const sys_call_ptr_t sys_call_table[] = {
2100398a00SIngo Molnar #include <asm/syscalls_64.h>
2200398a00SIngo Molnar };
23*eb0f175bSLinus Torvalds #undef __SYSCALL
24*eb0f175bSLinus Torvalds 
25*eb0f175bSLinus Torvalds #define __SYSCALL(nr, sym) case nr: return __x64_##sym(regs);
26*eb0f175bSLinus Torvalds 
x64_sys_call(const struct pt_regs * regs,unsigned int nr)27*eb0f175bSLinus Torvalds long x64_sys_call(const struct pt_regs *regs, unsigned int nr)
28*eb0f175bSLinus Torvalds {
29*eb0f175bSLinus Torvalds 	switch (nr) {
30*eb0f175bSLinus Torvalds 	#include <asm/syscalls_64.h>
31*eb0f175bSLinus Torvalds 	default: return __x64_sys_ni_syscall(regs);
32*eb0f175bSLinus Torvalds 	}
33*eb0f175bSLinus Torvalds };
34