x86: ia32 ptrace vs -ENOSYS sysenter/syscall
The previous "x86_64 ia32 ptrace vs -ENOSYS" fix only covered the int $0x80 system call entries. This does the same fix for the sysenter and syscall instruction paths. Signed-off-by: Roland McGrath <roland@redhat.com> Signed-off-by: Ingo Molnar <mingo@elte.hu>
This commit is contained in:
parent
a31f8dd7ee
commit
48ee679a02
1 changed files with 6 additions and 2 deletions
|
@ -162,12 +162,14 @@ sysenter_tracesys:
|
||||||
SAVE_REST
|
SAVE_REST
|
||||||
CLEAR_RREGS
|
CLEAR_RREGS
|
||||||
movq %r9,R9(%rsp)
|
movq %r9,R9(%rsp)
|
||||||
movq $-ENOSYS,RAX(%rsp) /* really needed? */
|
movq $-ENOSYS,RAX(%rsp)/* ptrace can change this for a bad syscall */
|
||||||
movq %rsp,%rdi /* &pt_regs -> arg1 */
|
movq %rsp,%rdi /* &pt_regs -> arg1 */
|
||||||
call syscall_trace_enter
|
call syscall_trace_enter
|
||||||
LOAD_ARGS32 ARGOFFSET /* reload args from stack in case ptrace changed it */
|
LOAD_ARGS32 ARGOFFSET /* reload args from stack in case ptrace changed it */
|
||||||
RESTORE_REST
|
RESTORE_REST
|
||||||
xchgl %ebp,%r9d
|
xchgl %ebp,%r9d
|
||||||
|
cmpl $(IA32_NR_syscalls-1),%eax
|
||||||
|
ja int_ret_from_sys_call /* sysenter_tracesys has set RAX(%rsp) */
|
||||||
jmp sysenter_do_call
|
jmp sysenter_do_call
|
||||||
CFI_ENDPROC
|
CFI_ENDPROC
|
||||||
ENDPROC(ia32_sysenter_target)
|
ENDPROC(ia32_sysenter_target)
|
||||||
|
@ -261,13 +263,15 @@ cstar_tracesys:
|
||||||
SAVE_REST
|
SAVE_REST
|
||||||
CLEAR_RREGS
|
CLEAR_RREGS
|
||||||
movq %r9,R9(%rsp)
|
movq %r9,R9(%rsp)
|
||||||
movq $-ENOSYS,RAX(%rsp) /* really needed? */
|
movq $-ENOSYS,RAX(%rsp) /* ptrace can change this for a bad syscall */
|
||||||
movq %rsp,%rdi /* &pt_regs -> arg1 */
|
movq %rsp,%rdi /* &pt_regs -> arg1 */
|
||||||
call syscall_trace_enter
|
call syscall_trace_enter
|
||||||
LOAD_ARGS32 ARGOFFSET /* reload args from stack in case ptrace changed it */
|
LOAD_ARGS32 ARGOFFSET /* reload args from stack in case ptrace changed it */
|
||||||
RESTORE_REST
|
RESTORE_REST
|
||||||
xchgl %ebp,%r9d
|
xchgl %ebp,%r9d
|
||||||
movl RSP-ARGOFFSET(%rsp), %r8d
|
movl RSP-ARGOFFSET(%rsp), %r8d
|
||||||
|
cmpl $(IA32_NR_syscalls-1),%eax
|
||||||
|
ja int_ret_from_sys_call /* cstar_tracesys has set RAX(%rsp) */
|
||||||
jmp cstar_do_call
|
jmp cstar_do_call
|
||||||
END(ia32_cstar_target)
|
END(ia32_cstar_target)
|
||||||
|
|
||||||
|
|
Loading…
Add table
Reference in a new issue