On 01/05, Martin Schwidefsky wrote:
>
> On Tue, 5 Jan 2010 16:36:33 +0100
> Oleg Nesterov <o...@redhat.com> wrote:
>
> > For example, why do_signal() sets TIF_SINGLE_STEP? Why can't we do
> > 
> >     --- a/arch/s390/kernel/signal.c
> >     +++ b/arch/s390/kernel/signal.c
> >     @@ -500,18 +500,10 @@ void do_signal(struct pt_regs *regs)
> >                                     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.
> >                              */
> >                             tracehook_signal_handler(signr, &info, &ka, 
> > regs,
> >     -                                        
> > test_thread_flag(TIF_SINGLE_STEP));
> >     +                                       
> > current->thread.per_info.single_step);
> >                     }
> >                     return;
> >             }
> > 
> > ?
>
> The reason why we set the TIF_SINGLE_STEP bit in do_signal is that we
> want to be able to stop the debugged program before the first
> instruction of the signal handler has been executed. The PER single
> step causes a trap after an instruction has been executed. That first
> instruction can do bad things to the arguments of the signal handler..

Yes, but afaics all we need is to pass the correct "int stepping" arg
to tracehook_signal_handler(). If it is true, the tracee does
ptrace_notify() before it returns to user-mode.

> > dmesg shows 799 lines of
> >
> >     XXX: 2389 0
> >
> >
> > The kernel is 2.6.32.2 + utrace, but CONFIG_UTRACE is not set.
>
> With or without my bug fix ?

With, but please see another email.


I'll add clear_bit(TIF_SINGLE_STEP) into do_fork() path and re-test.

Oleg.

Reply via email to