printcall(tcp)
struct tcb *tcp;
{
+#define PRINTBADPC tprintf(sizeof(long) == 4 ? "[????????] " : \
+ sizeof(long) == 8 ? "[????????????????] " : \
+ NULL /* crash */)
#ifdef LINUX
#ifdef I386
long eip;
if (upeek(tcp->pid, 4*EIP, &eip) < 0) {
- tprintf("[????????] ");
+ PRINTBADPC;
return;
}
tprintf("[%08lx] ", eip);
#elif defined(S390) || defined(S390X)
long psw;
if(upeek(tcp->pid,PT_PSWADDR,&psw) < 0) {
- tprintf("[????????] ");
+ PRINTBADPC;
return;
}
#ifdef S390
long rip;
if (upeek(tcp->pid, 8*RIP, &rip) < 0) {
- tprintf("[????????] ");
+ PRINTBADPC;
return;
}
tprintf("[%16lx] ", rip);
long ip;
if (upeek(tcp->pid, PT_B0, &ip) < 0) {
- tprintf("[????????] ");
+ PRINTBADPC;
return;
}
tprintf("[%08lx] ", ip);
long pc;
if (upeek(tcp->pid, REG_PC, &pc) < 0) {
- tprintf ("[????????] ");
+ tprintf ("[????????????????] ");
return;
}
tprintf("[%08lx] ", pc);
#elif defined(SPARC) || defined(SPARC64)
struct regs regs;
if (ptrace(PTRACE_GETREGS,tcp->pid,(char *)®s,0) < 0) {
- tprintf("[????????] ");
+ PRINTBADPC;
return;
}
tprintf("[%08lx] ", regs.r_pc);
long pc;
if (upeek(tcp->pid, REG_PC, &pc) < 0) {
- tprintf ("[????????] ");
+ tprintf ("[????????????????] ");
return;
}
tprintf("[%08lx] ", pc);
long pc;
if (upeek(tcp->pid, 4*15, &pc) < 0) {
- tprintf("[????????] ");
+ PRINTBADPC;
return;
}
tprintf("[%08lx] ", pc);
if (ptrace(PTRACE_GETREGS, tcp->pid, (char *) ®s, 0) < 0) {
perror("printcall: ptrace(PTRACE_GETREGS, ...)");
- tprintf("[????????] ");
+ PRINTBADPC;
return;
}
tprintf("[%08x] ", regs.r_o7);
#ifdef SVR4
/* XXX */
- tprintf("[????????] ");
+ PRINTBADPC;
#endif
#ifdef FREEBSD