[S390] duplicate SIGTRAP on signal delivery.
The code in do_signal sets the TIF_SINGLE_STEP bit and calls tracehook_signal_handler after the signal frame has been set up. This causes two SIGTRAP signals to be delivered to the tracer. Stop setting the TIF_SINGLE_STEP bit in do_signal to get the correct number of SIGTRAPs. Signed-off-by: Martin Schwidefsky <schwidefsky@de.ibm.com>
This commit is contained in:
Родитель
f8d5faf718
Коммит
6f50248ef0
|
@ -499,19 +499,11 @@ void do_signal(struct pt_regs *regs)
|
||||||
if (test_thread_flag(TIF_RESTORE_SIGMASK))
|
if (test_thread_flag(TIF_RESTORE_SIGMASK))
|
||||||
clear_thread_flag(TIF_RESTORE_SIGMASK);
|
clear_thread_flag(TIF_RESTORE_SIGMASK);
|
||||||
|
|
||||||
/*
|
|
||||||
* If we would have taken a single-step trap
|
|
||||||
* for a normal instruction, act like we took
|
|
||||||
* one for the handler setup.
|
|
||||||
*/
|
|
||||||
if (current->thread.per_info.single_step)
|
|
||||||
set_thread_flag(TIF_SINGLE_STEP);
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Let tracing know that we've done the handler setup.
|
* Let tracing know that we've done the handler setup.
|
||||||
*/
|
*/
|
||||||
tracehook_signal_handler(signr, &info, &ka, regs,
|
tracehook_signal_handler(signr, &info, &ka, regs,
|
||||||
test_thread_flag(TIF_SINGLE_STEP));
|
current->thread.per_info.single_step);
|
||||||
}
|
}
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
Загрузка…
Ссылка в новой задаче