From 6b7a261ff81fdbe84769cb59852fa43cabc77e8f Mon Sep 17 00:00:00 2001 From: "Dmitry V. Levin" Date: Thu, 10 Mar 2011 21:20:35 +0000 Subject: Show more details about signals received by traced processess * strace.c [!USE_PROCFS] (trace): Differentiate output format depending on PTRACE_GETSIGINFO success or failure. In the former case, use printsiginfo() to show more details about received signal. --- strace.c | 29 +++++++++++++++++++---------- 1 file changed, 19 insertions(+), 10 deletions(-) diff --git a/strace.c b/strace.c index 42d436e1a..774d172d2 100644 --- a/strace.c +++ b/strace.c @@ -2637,25 +2637,34 @@ Process %d attached (waiting for parent)\n", } if (cflag != CFLAG_ONLY_STATS && (qual_flags[WSTOPSIG(status)] & QUAL_SIGNAL)) { - unsigned long addr = 0; - long pc = 0; siginfo_t si; #if defined(PT_CR_IPSR) && defined(PT_CR_IIP) -# define PSR_RI 41 - long psr; + long pc = 0; + long psr = 0; upeek(tcp, PT_CR_IPSR, &psr); upeek(tcp, PT_CR_IIP, &pc); +# define PSR_RI 41 pc += (psr >> PSR_RI) & 0x3; +# define PC_FORMAT_STR " @ %lx" +# define PC_FORMAT_ARG pc +#else +# define PC_FORMAT_STR "%s" +# define PC_FORMAT_ARG "" #endif - si.si_addr = NULL; - if (ptrace(PTRACE_GETSIGINFO, pid, 0, &si) == 0) - addr = (unsigned long) si.si_addr; printleader(tcp); - tprintf("--- %s (%s) @ %lx (%lx) ---", - signame(WSTOPSIG(status)), - strsignal(WSTOPSIG(status)), pc, addr); + if (ptrace(PTRACE_GETSIGINFO, pid, 0, &si) == 0) { + tprintf("--- "); + printsiginfo(&si, verbose(tcp)); + tprintf(" (%s)" PC_FORMAT_STR " ---", + strsignal(WSTOPSIG(status)), + PC_FORMAT_ARG); + } else + tprintf("--- %s by %s" PC_FORMAT_STR " ---", + strsignal(WSTOPSIG(status)), + signame(WSTOPSIG(status)), + PC_FORMAT_ARG); printtrailer(); } if (((tcp->flags & TCB_ATTACHED) || -- cgit v1.2.1