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.
This commit is contained in:
parent
c15dfc7961
commit
6b7a261ff8
27
strace.c
27
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) ---",
|
||||
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)),
|
||||
strsignal(WSTOPSIG(status)), pc, addr);
|
||||
PC_FORMAT_ARG);
|
||||
printtrailer();
|
||||
}
|
||||
if (((tcp->flags & TCB_ATTACHED) ||
|
||||
|
Loading…
Reference in New Issue
Block a user