Commit e04984c8 authored by Linus Torvalds's avatar Linus Torvalds

Merge branch 'sh/for-2.6.33' of git://git.kernel.org/pub/scm/linux/kernel/git/lethal/sh-2.6

* 'sh/for-2.6.33' of git://git.kernel.org/pub/scm/linux/kernel/git/lethal/sh-2.6:
  sh64: fix tracing of signals.
parents 627a9a19 4b505db9
...@@ -133,6 +133,8 @@ void user_enable_single_step(struct task_struct *child) ...@@ -133,6 +133,8 @@ void user_enable_single_step(struct task_struct *child)
struct pt_regs *regs = child->thread.uregs; struct pt_regs *regs = child->thread.uregs;
regs->sr |= SR_SSTEP; /* auto-resetting upon exception */ regs->sr |= SR_SSTEP; /* auto-resetting upon exception */
set_tsk_thread_flag(child, TIF_SINGLESTEP);
} }
void user_disable_single_step(struct task_struct *child) void user_disable_single_step(struct task_struct *child)
...@@ -140,6 +142,8 @@ void user_disable_single_step(struct task_struct *child) ...@@ -140,6 +142,8 @@ void user_disable_single_step(struct task_struct *child)
struct pt_regs *regs = child->thread.uregs; struct pt_regs *regs = child->thread.uregs;
regs->sr &= ~SR_SSTEP; regs->sr &= ~SR_SSTEP;
clear_tsk_thread_flag(child, TIF_SINGLESTEP);
} }
static int genregs_get(struct task_struct *target, static int genregs_get(struct task_struct *target,
...@@ -454,6 +458,8 @@ asmlinkage long long do_syscall_trace_enter(struct pt_regs *regs) ...@@ -454,6 +458,8 @@ asmlinkage long long do_syscall_trace_enter(struct pt_regs *regs)
asmlinkage void do_syscall_trace_leave(struct pt_regs *regs) asmlinkage void do_syscall_trace_leave(struct pt_regs *regs)
{ {
int step;
if (unlikely(current->audit_context)) if (unlikely(current->audit_context))
audit_syscall_exit(AUDITSC_RESULT(regs->regs[9]), audit_syscall_exit(AUDITSC_RESULT(regs->regs[9]),
regs->regs[9]); regs->regs[9]);
...@@ -461,8 +467,9 @@ asmlinkage void do_syscall_trace_leave(struct pt_regs *regs) ...@@ -461,8 +467,9 @@ asmlinkage void do_syscall_trace_leave(struct pt_regs *regs)
if (unlikely(test_thread_flag(TIF_SYSCALL_TRACEPOINT))) if (unlikely(test_thread_flag(TIF_SYSCALL_TRACEPOINT)))
trace_sys_exit(regs, regs->regs[9]); trace_sys_exit(regs, regs->regs[9]);
if (test_thread_flag(TIF_SYSCALL_TRACE)) step = test_thread_flag(TIF_SINGLESTEP);
tracehook_report_syscall_exit(regs, 0); if (step || test_thread_flag(TIF_SYSCALL_TRACE))
tracehook_report_syscall_exit(regs, step);
} }
/* Called with interrupts disabled */ /* Called with interrupts disabled */
......
...@@ -118,7 +118,9 @@ static int do_signal(struct pt_regs *regs, sigset_t *oldset) ...@@ -118,7 +118,9 @@ static int do_signal(struct pt_regs *regs, sigset_t *oldset)
* clear the TS_RESTORE_SIGMASK flag. * clear the TS_RESTORE_SIGMASK flag.
*/ */
current_thread_info()->status &= ~TS_RESTORE_SIGMASK; current_thread_info()->status &= ~TS_RESTORE_SIGMASK;
tracehook_signal_handler(signr, &info, &ka, regs, 0);
tracehook_signal_handler(signr, &info, &ka, regs,
test_thread_flag(TIF_SINGLESTEP));
return 1; return 1;
} }
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment