On Thu, Mar 10, 2011 at 12:26:08PM +0100, Denys Vlasenko wrote:
[...]
> Show job control stop differently from signal notification
> 
> * strace.c (trace): Query PTRACE_GETSIGINFO on stop signals,
> if it fails, show "--- stopped by SIGFOO ---"
> to indicate that tracee is in job control stop now.
> 
> --- strace.0/strace.c 2011-02-14 20:11:45.690110153 +0100
> +++ strace.1/strace.c 2011-03-10 12:15:14.259222703 +0100
> @@ -2626,6 +2626,7 @@ Process %d attached (waiting for parent)
>                       }
>                       if (cflag != CFLAG_ONLY_STATS
>                           && (qual_flags[WSTOPSIG(status)] & QUAL_SIGNAL)) {
> +                             int in_job_control_stop;
>                               unsigned long addr = 0;
>                               long pc = 0;
>  #if defined(PT_CR_IPSR) && defined(PT_CR_IIP) && defined(PT_GETSIGINFO)
> @@ -2649,8 +2650,25 @@ Process %d attached (waiting for parent)
>                                                       si.si_addr;
>                               }
>  #endif
> +                             in_job_control_stop = 0;
> +                             if (WSTOPSIG(status) == SIGSTOP ||
> +                                 WSTOPSIG(status) == SIGTSTP ||
> +                                 WSTOPSIG(status) == SIGTTIN ||
> +                                 WSTOPSIG(status) == SIGTTOU) {
> +                                     /*
> +                                      * PTRACE_GETSIGINFO fails if this is
> +                                      * genuine *stop* notification,
> +                                      * not *signal* notification
> +                                      */
> +                                     siginfo_t si;
> +                                     if (ptrace(PTRACE_GETSIGINFO, pid,
> +                                                 0, &si) != 0)
> +                                             in_job_control_stop = 1;
> +                             }

The more I look at this special handling for job control stop signals, the
more I think something is going wrong.
Why not to differentiate output format just depending on PTRACE_GETSIGINFO
success or failure, without special handling for stop signals?
For example,
http://strace.git.sourceforge.net/git/gitweb.cgi?p=strace/strace;a=shortlog;h=ldv/trace-siginfo

It's a bit intrusive, so I'm not sure it should go before the release,
though.

P.S.  While testing these changes, I've spotted a bug.
Try to run "cat > /dev/null & strace -p $!", it looks like some
stop signals are not actually delivered to traced processes.


-- 
ldv

Attachment: pgpU3DsSlPOtL.pgp
Description: PGP signature

------------------------------------------------------------------------------
Colocation vs. Managed Hosting
A question and answer guide to determining the best fit
for your organization - today and in the future.
http://p.sf.net/sfu/internap-sfd2d
_______________________________________________
Strace-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/strace-devel

Reply via email to