[Blackfin] arch: disable single stepping when delivering a signal
When delivering a signal, disable single stepping but call ptrace_notify if it was enabled before. The idea was taken from the x86 port. Signed-off-by: Bernd Schmidt <bernds_cb1@t-online.de> Signed-off-by: Bryan Wu <cooloney@kernel.org>
This commit is contained in:
Родитель
7d39270d31
Коммит
8513c42edb
|
@ -42,6 +42,9 @@
|
|||
|
||||
#define _BLOCKABLE (~(sigmask(SIGKILL) | sigmask(SIGSTOP)))
|
||||
|
||||
/* Location of the trace bit in SYSCFG. */
|
||||
#define TRACE_BITS 0x0001
|
||||
|
||||
struct fdpic_func_descriptor {
|
||||
unsigned long text;
|
||||
unsigned long GOT;
|
||||
|
@ -225,6 +228,16 @@ setup_rt_frame(int sig, struct k_sigaction *ka, siginfo_t * info,
|
|||
regs->r1 = (unsigned long)(&frame->info);
|
||||
regs->r2 = (unsigned long)(&frame->uc);
|
||||
|
||||
/*
|
||||
* Clear the trace flag when entering the signal handler, but
|
||||
* notify any tracer that was single-stepping it. The tracer
|
||||
* may want to single-step inside the handler too.
|
||||
*/
|
||||
if (regs->syscfg & TRACE_BITS) {
|
||||
regs->syscfg &= ~TRACE_BITS;
|
||||
ptrace_notify(SIGTRAP);
|
||||
}
|
||||
|
||||
return 0;
|
||||
|
||||
give_sigsegv:
|
||||
|
|
Загрузка…
Ссылка в новой задаче