lkml.org 
[lkml]   [2009]   [Apr]   [24]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 03/17] arm: tracehook_report_syscall
    Date
    This makes arm use the standard tracehook_report_syscall_entry()
    and tracehook_report_syscall_exit() hooks in <linux/tracehook.h>.

    Signed-off-by: Roland McGrath <roland@redhat.com>
    ---
    arch/arm/kernel/ptrace.c | 22 +++++++++-------------
    1 files changed, 9 insertions(+), 13 deletions(-)

    diff --git a/arch/arm/kernel/ptrace.c b/arch/arm/kernel/ptrace.c
    index 93d7822..effada1 100644
    --- a/arch/arm/kernel/ptrace.c
    +++ b/arch/arm/kernel/ptrace.c
    @@ -14,6 +14,7 @@
    #include <linux/mm.h>
    #include <linux/smp.h>
    #include <linux/ptrace.h>
    +#include <linux/tracehook.h>
    #include <linux/user.h>
    #include <linux/security.h>
    #include <linux/init.h>
    @@ -811,8 +812,6 @@ asmlinkage int syscall_trace(int why, struct pt_regs *regs, int scno)

    if (!test_thread_flag(TIF_SYSCALL_TRACE))
    return scno;
    - if (!(current->ptrace & PT_PTRACED))
    - return scno;

    /*
    * Save IP. IP is used to denote syscall entry/exit:
    @@ -823,19 +822,16 @@ asmlinkage int syscall_trace(int why, struct pt_regs *regs, int scno)

    current_thread_info()->syscall = scno;

    - /* 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
    + * Report the system call for tracing. Entry tracing can
    + * decide to abort the call. We handle that by setting an
    + * invalid syscall number (-1) to force an ENOSYS error.
    */
    - if (current->exit_code) {
    - send_sig(current->exit_code, current, 1);
    - current->exit_code = 0;
    - }
    + if (why)
    + tracehook_report_syscall_exit(regs, 0);
    + else if (tracehook_report_syscall_entry(regs))
    + current_thread_info()->syscall = -1;
    +
    regs->ARM_ip = ip;

    return current_thread_info()->syscall;

    \
     
     \ /
      Last update: 2009-04-25 02:13    [W:0.023 / U:0.064 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site