|
@@ -134,7 +134,7 @@ ENTRY(ia32_sysenter_target)
|
|
|
CFI_REL_OFFSET rsp,0
|
|
|
pushfq_cfi
|
|
|
/*CFI_REL_OFFSET rflags,0*/
|
|
|
- movl 8*3-THREAD_SIZE+TI_sysenter_return(%rsp), %r10d
|
|
|
+ movl TI_sysenter_return+THREAD_INFO(%rsp,3*8-KERNEL_STACK_OFFSET),%r10d
|
|
|
CFI_REGISTER rip,r10
|
|
|
pushq_cfi $__USER32_CS
|
|
|
/*CFI_REL_OFFSET cs,0*/
|
|
@@ -150,9 +150,8 @@ ENTRY(ia32_sysenter_target)
|
|
|
.section __ex_table,"a"
|
|
|
.quad 1b,ia32_badarg
|
|
|
.previous
|
|
|
- GET_THREAD_INFO(%r10)
|
|
|
- orl $TS_COMPAT,TI_status(%r10)
|
|
|
- testl $_TIF_WORK_SYSCALL_ENTRY,TI_flags(%r10)
|
|
|
+ orl $TS_COMPAT,TI_status+THREAD_INFO(%rsp,RIP-ARGOFFSET)
|
|
|
+ testl $_TIF_WORK_SYSCALL_ENTRY,TI_flags+THREAD_INFO(%rsp,RIP-ARGOFFSET)
|
|
|
CFI_REMEMBER_STATE
|
|
|
jnz sysenter_tracesys
|
|
|
cmpq $(IA32_NR_syscalls-1),%rax
|
|
@@ -162,13 +161,12 @@ sysenter_do_call:
|
|
|
sysenter_dispatch:
|
|
|
call *ia32_sys_call_table(,%rax,8)
|
|
|
movq %rax,RAX-ARGOFFSET(%rsp)
|
|
|
- GET_THREAD_INFO(%r10)
|
|
|
DISABLE_INTERRUPTS(CLBR_NONE)
|
|
|
TRACE_IRQS_OFF
|
|
|
- testl $_TIF_ALLWORK_MASK,TI_flags(%r10)
|
|
|
+ testl $_TIF_ALLWORK_MASK,TI_flags+THREAD_INFO(%rsp,RIP-ARGOFFSET)
|
|
|
jnz sysexit_audit
|
|
|
sysexit_from_sys_call:
|
|
|
- andl $~TS_COMPAT,TI_status(%r10)
|
|
|
+ andl $~TS_COMPAT,TI_status+THREAD_INFO(%rsp,RIP-ARGOFFSET)
|
|
|
/* clear IF, that popfq doesn't enable interrupts early */
|
|
|
andl $~0x200,EFLAGS-R11(%rsp)
|
|
|
movl RIP-R11(%rsp),%edx /* User %eip */
|
|
@@ -205,7 +203,7 @@ sysexit_from_sys_call:
|
|
|
.endm
|
|
|
|
|
|
.macro auditsys_exit exit
|
|
|
- testl $(_TIF_ALLWORK_MASK & ~_TIF_SYSCALL_AUDIT),TI_flags(%r10)
|
|
|
+ testl $(_TIF_ALLWORK_MASK & ~_TIF_SYSCALL_AUDIT),TI_flags+THREAD_INFO(%rsp,RIP-ARGOFFSET)
|
|
|
jnz ia32_ret_from_sys_call
|
|
|
TRACE_IRQS_ON
|
|
|
sti
|
|
@@ -215,12 +213,11 @@ sysexit_from_sys_call:
|
|
|
movzbl %al,%edi /* zero-extend that into %edi */
|
|
|
inc %edi /* first arg, 0->1(AUDITSC_SUCCESS), 1->2(AUDITSC_FAILURE) */
|
|
|
call audit_syscall_exit
|
|
|
- GET_THREAD_INFO(%r10)
|
|
|
movl RAX-ARGOFFSET(%rsp),%eax /* reload syscall return value */
|
|
|
movl $(_TIF_ALLWORK_MASK & ~_TIF_SYSCALL_AUDIT),%edi
|
|
|
cli
|
|
|
TRACE_IRQS_OFF
|
|
|
- testl %edi,TI_flags(%r10)
|
|
|
+ testl %edi,TI_flags+THREAD_INFO(%rsp,RIP-ARGOFFSET)
|
|
|
jz \exit
|
|
|
CLEAR_RREGS -ARGOFFSET
|
|
|
jmp int_with_check
|
|
@@ -238,7 +235,7 @@ sysexit_audit:
|
|
|
|
|
|
sysenter_tracesys:
|
|
|
#ifdef CONFIG_AUDITSYSCALL
|
|
|
- testl $(_TIF_WORK_SYSCALL_ENTRY & ~_TIF_SYSCALL_AUDIT),TI_flags(%r10)
|
|
|
+ testl $(_TIF_WORK_SYSCALL_ENTRY & ~_TIF_SYSCALL_AUDIT),TI_flags+THREAD_INFO(%rsp,RIP-ARGOFFSET)
|
|
|
jz sysenter_auditsys
|
|
|
#endif
|
|
|
SAVE_REST
|
|
@@ -309,9 +306,8 @@ ENTRY(ia32_cstar_target)
|
|
|
.section __ex_table,"a"
|
|
|
.quad 1b,ia32_badarg
|
|
|
.previous
|
|
|
- GET_THREAD_INFO(%r10)
|
|
|
- orl $TS_COMPAT,TI_status(%r10)
|
|
|
- testl $_TIF_WORK_SYSCALL_ENTRY,TI_flags(%r10)
|
|
|
+ orl $TS_COMPAT,TI_status+THREAD_INFO(%rsp,RIP-ARGOFFSET)
|
|
|
+ testl $_TIF_WORK_SYSCALL_ENTRY,TI_flags+THREAD_INFO(%rsp,RIP-ARGOFFSET)
|
|
|
CFI_REMEMBER_STATE
|
|
|
jnz cstar_tracesys
|
|
|
cmpq $IA32_NR_syscalls-1,%rax
|
|
@@ -321,13 +317,12 @@ cstar_do_call:
|
|
|
cstar_dispatch:
|
|
|
call *ia32_sys_call_table(,%rax,8)
|
|
|
movq %rax,RAX-ARGOFFSET(%rsp)
|
|
|
- GET_THREAD_INFO(%r10)
|
|
|
DISABLE_INTERRUPTS(CLBR_NONE)
|
|
|
TRACE_IRQS_OFF
|
|
|
- testl $_TIF_ALLWORK_MASK,TI_flags(%r10)
|
|
|
+ testl $_TIF_ALLWORK_MASK,TI_flags+THREAD_INFO(%rsp,RIP-ARGOFFSET)
|
|
|
jnz sysretl_audit
|
|
|
sysretl_from_sys_call:
|
|
|
- andl $~TS_COMPAT,TI_status(%r10)
|
|
|
+ andl $~TS_COMPAT,TI_status+THREAD_INFO(%rsp,RIP-ARGOFFSET)
|
|
|
RESTORE_ARGS 0,-ARG_SKIP,0,0,0
|
|
|
movl RIP-ARGOFFSET(%rsp),%ecx
|
|
|
CFI_REGISTER rip,rcx
|
|
@@ -355,7 +350,7 @@ sysretl_audit:
|
|
|
|
|
|
cstar_tracesys:
|
|
|
#ifdef CONFIG_AUDITSYSCALL
|
|
|
- testl $(_TIF_WORK_SYSCALL_ENTRY & ~_TIF_SYSCALL_AUDIT),TI_flags(%r10)
|
|
|
+ testl $(_TIF_WORK_SYSCALL_ENTRY & ~_TIF_SYSCALL_AUDIT),TI_flags+THREAD_INFO(%rsp,RIP-ARGOFFSET)
|
|
|
jz cstar_auditsys
|
|
|
#endif
|
|
|
xchgl %r9d,%ebp
|
|
@@ -420,9 +415,8 @@ ENTRY(ia32_syscall)
|
|
|
/* note the registers are not zero extended to the sf.
|
|
|
this could be a problem. */
|
|
|
SAVE_ARGS 0,1,0
|
|
|
- GET_THREAD_INFO(%r10)
|
|
|
- orl $TS_COMPAT,TI_status(%r10)
|
|
|
- testl $_TIF_WORK_SYSCALL_ENTRY,TI_flags(%r10)
|
|
|
+ orl $TS_COMPAT,TI_status+THREAD_INFO(%rsp,RIP-ARGOFFSET)
|
|
|
+ testl $_TIF_WORK_SYSCALL_ENTRY,TI_flags+THREAD_INFO(%rsp,RIP-ARGOFFSET)
|
|
|
jnz ia32_tracesys
|
|
|
cmpq $(IA32_NR_syscalls-1),%rax
|
|
|
ja ia32_badsys
|