diff options
| author | Linus Torvalds <torvalds@linux-foundation.org> | 2010-02-15 22:50:34 -0500 |
|---|---|---|
| committer | Linus Torvalds <torvalds@linux-foundation.org> | 2010-02-15 22:50:34 -0500 |
| commit | e04984c8394b17bab85c28956ada6aba81cdf746 (patch) | |
| tree | cb95d74f76c3b118d15e402d223776e7a9c93985 | |
| parent | 627a9a194d6b29d345d99ef806171395bc6e3e38 (diff) | |
| parent | 4b505db9c4c72dbd2a8e66b8d681640101325af6 (diff) | |
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.
| -rw-r--r-- | arch/sh/kernel/ptrace_64.c | 11 | ||||
| -rw-r--r-- | arch/sh/kernel/signal_64.c | 4 |
2 files changed, 12 insertions, 3 deletions
diff --git a/arch/sh/kernel/ptrace_64.c b/arch/sh/kernel/ptrace_64.c index 873ebdc4f98e..b063eb8b18e3 100644 --- a/arch/sh/kernel/ptrace_64.c +++ b/arch/sh/kernel/ptrace_64.c | |||
| @@ -133,6 +133,8 @@ void user_enable_single_step(struct task_struct *child) | |||
| 133 | struct pt_regs *regs = child->thread.uregs; | 133 | struct pt_regs *regs = child->thread.uregs; |
| 134 | 134 | ||
| 135 | regs->sr |= SR_SSTEP; /* auto-resetting upon exception */ | 135 | regs->sr |= SR_SSTEP; /* auto-resetting upon exception */ |
| 136 | |||
| 137 | set_tsk_thread_flag(child, TIF_SINGLESTEP); | ||
| 136 | } | 138 | } |
| 137 | 139 | ||
| 138 | void user_disable_single_step(struct task_struct *child) | 140 | void user_disable_single_step(struct task_struct *child) |
| @@ -140,6 +142,8 @@ void user_disable_single_step(struct task_struct *child) | |||
| 140 | struct pt_regs *regs = child->thread.uregs; | 142 | struct pt_regs *regs = child->thread.uregs; |
| 141 | 143 | ||
| 142 | regs->sr &= ~SR_SSTEP; | 144 | regs->sr &= ~SR_SSTEP; |
| 145 | |||
| 146 | clear_tsk_thread_flag(child, TIF_SINGLESTEP); | ||
| 143 | } | 147 | } |
| 144 | 148 | ||
| 145 | static int genregs_get(struct task_struct *target, | 149 | static int genregs_get(struct task_struct *target, |
| @@ -454,6 +458,8 @@ asmlinkage long long do_syscall_trace_enter(struct pt_regs *regs) | |||
| 454 | 458 | ||
| 455 | asmlinkage void do_syscall_trace_leave(struct pt_regs *regs) | 459 | asmlinkage void do_syscall_trace_leave(struct pt_regs *regs) |
| 456 | { | 460 | { |
| 461 | int step; | ||
| 462 | |||
| 457 | if (unlikely(current->audit_context)) | 463 | if (unlikely(current->audit_context)) |
| 458 | audit_syscall_exit(AUDITSC_RESULT(regs->regs[9]), | 464 | audit_syscall_exit(AUDITSC_RESULT(regs->regs[9]), |
| 459 | regs->regs[9]); | 465 | regs->regs[9]); |
| @@ -461,8 +467,9 @@ asmlinkage void do_syscall_trace_leave(struct pt_regs *regs) | |||
| 461 | if (unlikely(test_thread_flag(TIF_SYSCALL_TRACEPOINT))) | 467 | if (unlikely(test_thread_flag(TIF_SYSCALL_TRACEPOINT))) |
| 462 | trace_sys_exit(regs, regs->regs[9]); | 468 | trace_sys_exit(regs, regs->regs[9]); |
| 463 | 469 | ||
| 464 | if (test_thread_flag(TIF_SYSCALL_TRACE)) | 470 | step = test_thread_flag(TIF_SINGLESTEP); |
| 465 | tracehook_report_syscall_exit(regs, 0); | 471 | if (step || test_thread_flag(TIF_SYSCALL_TRACE)) |
| 472 | tracehook_report_syscall_exit(regs, step); | ||
| 466 | } | 473 | } |
| 467 | 474 | ||
| 468 | /* Called with interrupts disabled */ | 475 | /* Called with interrupts disabled */ |
diff --git a/arch/sh/kernel/signal_64.c b/arch/sh/kernel/signal_64.c index ce76dbdef294..580e97d46ca5 100644 --- a/arch/sh/kernel/signal_64.c +++ b/arch/sh/kernel/signal_64.c | |||
| @@ -118,7 +118,9 @@ static int do_signal(struct pt_regs *regs, sigset_t *oldset) | |||
| 118 | * clear the TS_RESTORE_SIGMASK flag. | 118 | * clear the TS_RESTORE_SIGMASK flag. |
| 119 | */ | 119 | */ |
| 120 | current_thread_info()->status &= ~TS_RESTORE_SIGMASK; | 120 | current_thread_info()->status &= ~TS_RESTORE_SIGMASK; |
| 121 | tracehook_signal_handler(signr, &info, &ka, regs, 0); | 121 | |
| 122 | tracehook_signal_handler(signr, &info, &ka, regs, | ||
| 123 | test_thread_flag(TIF_SINGLESTEP)); | ||
| 122 | return 1; | 124 | return 1; |
| 123 | } | 125 | } |
| 124 | } | 126 | } |
