|
@@ -404,8 +404,8 @@ GLOBAL(system_call_after_swapgs)
|
|
|
* and short:
|
|
|
*/
|
|
|
ENABLE_INTERRUPTS(CLBR_NONE)
|
|
|
- SAVE_ARGS 8,0
|
|
|
- movq %rax,ORIG_RAX-ARGOFFSET(%rsp)
|
|
|
+ SAVE_ARGS 8, 0, rax_enosys=1
|
|
|
+ movq_cfi rax,(ORIG_RAX-ARGOFFSET)
|
|
|
movq %rcx,RIP-ARGOFFSET(%rsp)
|
|
|
CFI_REL_OFFSET rip,RIP-ARGOFFSET
|
|
|
testl $_TIF_WORK_SYSCALL_ENTRY,TI_flags+THREAD_INFO(%rsp,RIP-ARGOFFSET)
|
|
@@ -417,7 +417,7 @@ system_call_fastpath:
|
|
|
andl $__SYSCALL_MASK,%eax
|
|
|
cmpl $__NR_syscall_max,%eax
|
|
|
#endif
|
|
|
- ja badsys
|
|
|
+ ja ret_from_sys_call /* and return regs->ax */
|
|
|
movq %r10,%rcx
|
|
|
call *sys_call_table(,%rax,8) # XXX: rip relative
|
|
|
movq %rax,RAX-ARGOFFSET(%rsp)
|
|
@@ -476,10 +476,6 @@ sysret_signal:
|
|
|
FIXUP_TOP_OF_STACK %r11, -ARGOFFSET
|
|
|
jmp int_check_syscall_exit_work
|
|
|
|
|
|
-badsys:
|
|
|
- movq $-ENOSYS,RAX-ARGOFFSET(%rsp)
|
|
|
- jmp ret_from_sys_call
|
|
|
-
|
|
|
#ifdef CONFIG_AUDITSYSCALL
|
|
|
/*
|
|
|
* Fast path for syscall audit without full syscall trace.
|
|
@@ -519,7 +515,6 @@ tracesys:
|
|
|
jz auditsys
|
|
|
#endif
|
|
|
SAVE_REST
|
|
|
- movq $-ENOSYS,RAX(%rsp) /* ptrace can change this for a bad syscall */
|
|
|
FIXUP_TOP_OF_STACK %rdi
|
|
|
movq %rsp,%rdi
|
|
|
call syscall_trace_enter
|
|
@@ -536,7 +531,7 @@ tracesys:
|
|
|
andl $__SYSCALL_MASK,%eax
|
|
|
cmpl $__NR_syscall_max,%eax
|
|
|
#endif
|
|
|
- ja int_ret_from_sys_call /* RAX(%rsp) set to -ENOSYS above */
|
|
|
+ ja int_ret_from_sys_call /* RAX(%rsp) is already set */
|
|
|
movq %r10,%rcx /* fixup for C */
|
|
|
call *sys_call_table(,%rax,8)
|
|
|
movq %rax,RAX-ARGOFFSET(%rsp)
|