diff options
Diffstat (limited to 'arch/x86/kernel')
-rw-r--r-- | arch/x86/kernel/process_32.c | 17 | ||||
-rw-r--r-- | arch/x86/kernel/syscall_64.c | 14 |
2 files changed, 31 insertions, 0 deletions
diff --git a/arch/x86/kernel/process_32.c b/arch/x86/kernel/process_32.c index 76f8f84043a2..6d18b975674a 100644 --- a/arch/x86/kernel/process_32.c +++ b/arch/x86/kernel/process_32.c @@ -509,3 +509,20 @@ unsigned long arch_randomize_brk(struct mm_struct *mm) unsigned long range_end = mm->brk + 0x02000000; return randomize_range(mm->brk, range_end, 0) ? : mm->brk; } + +/* + * XXX This is just a dumb place-holder for testing until we find out how + * the x86 maintainers want this done. + */ +long arch_call_syscall(unsigned int nr, long arg0, long arg1, long arg2, + long arg3, long arg4, long arg5) +{ + typedef asmlinkage long (*syscall_fn_t)(long, long, long, long, long, + long); + syscall_fn_t *calls = (syscall_fn_t *)sys_call_table; + + if (nr > __NR_acall_cancel) + return -ENOSYS; + + return calls[nr](arg0, arg1, arg2, arg3, arg4, arg5); +} diff --git a/arch/x86/kernel/syscall_64.c b/arch/x86/kernel/syscall_64.c index de87d6008295..f5d5f6aac664 100644 --- a/arch/x86/kernel/syscall_64.c +++ b/arch/x86/kernel/syscall_64.c @@ -3,6 +3,7 @@ #include <linux/linkage.h> #include <linux/sys.h> #include <linux/cache.h> +#include <linux/errno.h> #include <asm/asm-offsets.h> #define __NO_STUBS @@ -27,3 +28,16 @@ const sys_call_ptr_t sys_call_table[__NR_syscall_max+1] = { [0 ... __NR_syscall_max] = &sys_ni_syscall, #include <asm/unistd_64.h> }; + +long arch_call_syscall(unsigned int nr, long arg0, long arg1, long arg2, + long arg3, long arg4, long arg5) +{ + typedef asmlinkage long (*syscall_fn_t)(long, long, long, long, long, + long); + syscall_fn_t *calls = (syscall_fn_t *)sys_call_table; + + if (nr > __NR_syscall_max) + return -ENOSYS; + + return calls[nr](arg0, arg1, arg2, arg3, arg4, arg5); +} |