Loading arch/alpha/kernel/entry.S +6 −7 Original line number Diff line number Diff line Loading @@ -418,11 +418,10 @@ $work_notifysig: strace: /* set up signal stack, call syscall_trace */ bsr $1, do_switch_stack jsr $26, syscall_trace jsr $26, syscall_trace_enter /* returns the syscall number */ bsr $1, undo_switch_stack /* get the system call number and the arguments back.. */ ldq $0, 0($sp) /* get the arguments back.. */ ldq $16, SP_OFF+24($sp) ldq $17, SP_OFF+32($sp) ldq $18, SP_OFF+40($sp) Loading @@ -449,7 +448,7 @@ $strace_success: stq $0, 0($sp) /* save return value */ bsr $1, do_switch_stack jsr $26, syscall_trace jsr $26, syscall_trace_leave bsr $1, undo_switch_stack br $31, ret_from_sys_call Loading @@ -467,7 +466,7 @@ $strace_error: bsr $1, do_switch_stack mov $19, $9 /* save old syscall number */ mov $20, $10 /* save old a3 */ jsr $26, syscall_trace jsr $26, syscall_trace_leave mov $9, $19 mov $10, $20 bsr $1, undo_switch_stack Loading Loading @@ -698,7 +697,7 @@ sys_sigreturn: lda $sp, -SWITCH_STACK_SIZE($sp) jsr $26, do_sigreturn bne $9, 1f jsr $26, syscall_trace jsr $26, syscall_trace_leave 1: br $1, undo_switch_stack br ret_from_sys_call .end sys_sigreturn Loading @@ -715,7 +714,7 @@ sys_rt_sigreturn: lda $sp, -SWITCH_STACK_SIZE($sp) jsr $26, do_rt_sigreturn bne $9, 1f jsr $26, syscall_trace jsr $26, syscall_trace_leave 1: br $1, undo_switch_stack br ret_from_sys_call .end sys_rt_sigreturn Loading arch/alpha/kernel/ptrace.c +13 −19 Original line number Diff line number Diff line Loading @@ -13,6 +13,7 @@ #include <linux/user.h> #include <linux/security.h> #include <linux/signal.h> #include <linux/tracehook.h> #include <asm/uaccess.h> #include <asm/pgtable.h> Loading Loading @@ -312,25 +313,18 @@ long arch_ptrace(struct task_struct *child, long request, return ret; } asmlinkage void syscall_trace(void) asmlinkage unsigned long syscall_trace_enter(void) { if (!test_thread_flag(TIF_SYSCALL_TRACE)) return; if (!(current->ptrace & PT_PTRACED)) return; /* The 0x80 provides a way for the tracing parent to distinguish between a syscall stop and SIGTRAP delivery */ ptrace_notify(SIGTRAP | ((current->ptrace & PT_TRACESYSGOOD) ? 0x80 : 0)); /* * This isn't the same as continuing with a signal, but it will do * for normal use. strace only continues with a signal if the * stopping signal is not SIGTRAP. -brl */ if (current->exit_code) { send_sig(current->exit_code, current, 1); current->exit_code = 0; unsigned long ret = 0; if (test_thread_flag(TIF_SYSCALL_TRACE) && tracehook_report_syscall_entry(current_pt_regs())) ret = -1UL; return ret ?: current_pt_regs()->r0; } asmlinkage void syscall_trace_leave(void) { if (test_thread_flag(TIF_SYSCALL_TRACE)) tracehook_report_syscall_exit(current_pt_regs(), 0); } Loading
arch/alpha/kernel/entry.S +6 −7 Original line number Diff line number Diff line Loading @@ -418,11 +418,10 @@ $work_notifysig: strace: /* set up signal stack, call syscall_trace */ bsr $1, do_switch_stack jsr $26, syscall_trace jsr $26, syscall_trace_enter /* returns the syscall number */ bsr $1, undo_switch_stack /* get the system call number and the arguments back.. */ ldq $0, 0($sp) /* get the arguments back.. */ ldq $16, SP_OFF+24($sp) ldq $17, SP_OFF+32($sp) ldq $18, SP_OFF+40($sp) Loading @@ -449,7 +448,7 @@ $strace_success: stq $0, 0($sp) /* save return value */ bsr $1, do_switch_stack jsr $26, syscall_trace jsr $26, syscall_trace_leave bsr $1, undo_switch_stack br $31, ret_from_sys_call Loading @@ -467,7 +466,7 @@ $strace_error: bsr $1, do_switch_stack mov $19, $9 /* save old syscall number */ mov $20, $10 /* save old a3 */ jsr $26, syscall_trace jsr $26, syscall_trace_leave mov $9, $19 mov $10, $20 bsr $1, undo_switch_stack Loading Loading @@ -698,7 +697,7 @@ sys_sigreturn: lda $sp, -SWITCH_STACK_SIZE($sp) jsr $26, do_sigreturn bne $9, 1f jsr $26, syscall_trace jsr $26, syscall_trace_leave 1: br $1, undo_switch_stack br ret_from_sys_call .end sys_sigreturn Loading @@ -715,7 +714,7 @@ sys_rt_sigreturn: lda $sp, -SWITCH_STACK_SIZE($sp) jsr $26, do_rt_sigreturn bne $9, 1f jsr $26, syscall_trace jsr $26, syscall_trace_leave 1: br $1, undo_switch_stack br ret_from_sys_call .end sys_rt_sigreturn Loading
arch/alpha/kernel/ptrace.c +13 −19 Original line number Diff line number Diff line Loading @@ -13,6 +13,7 @@ #include <linux/user.h> #include <linux/security.h> #include <linux/signal.h> #include <linux/tracehook.h> #include <asm/uaccess.h> #include <asm/pgtable.h> Loading Loading @@ -312,25 +313,18 @@ long arch_ptrace(struct task_struct *child, long request, return ret; } asmlinkage void syscall_trace(void) asmlinkage unsigned long syscall_trace_enter(void) { if (!test_thread_flag(TIF_SYSCALL_TRACE)) return; if (!(current->ptrace & PT_PTRACED)) return; /* The 0x80 provides a way for the tracing parent to distinguish between a syscall stop and SIGTRAP delivery */ ptrace_notify(SIGTRAP | ((current->ptrace & PT_TRACESYSGOOD) ? 0x80 : 0)); /* * This isn't the same as continuing with a signal, but it will do * for normal use. strace only continues with a signal if the * stopping signal is not SIGTRAP. -brl */ if (current->exit_code) { send_sig(current->exit_code, current, 1); current->exit_code = 0; unsigned long ret = 0; if (test_thread_flag(TIF_SYSCALL_TRACE) && tracehook_report_syscall_entry(current_pt_regs())) ret = -1UL; return ret ?: current_pt_regs()->r0; } asmlinkage void syscall_trace_leave(void) { if (test_thread_flag(TIF_SYSCALL_TRACE)) tracehook_report_syscall_exit(current_pt_regs(), 0); }