Commit 450f20a8 by Ian Lance Taylor

runtime: improvements for signal registers

    
    Fix dumpregs on i386, implement dumpregs for PPC Linux/AIX, get PC on AIX.
    
    Reviewed-on: https://go-review.googlesource.com/56170

From-SVN: r251127
parent 7911a54d
480fdfa9dd416bd17115a94fa6021c4dd805fc39 f02183eb66f5718769f3f6541dcc6744ae1771c0
The first line of this file holds the git revision number of the last The first line of this file holds the git revision number of the last
merge done from the gofrontend repository. merge done from the gofrontend repository.
...@@ -224,6 +224,9 @@ getSiginfo(siginfo_t *info, void *context __attribute__((unused))) ...@@ -224,6 +224,9 @@ getSiginfo(siginfo_t *info, void *context __attribute__((unused)))
#ifdef __linux__ #ifdef __linux__
ret.sigpc = ((ucontext_t*)(context))->uc_mcontext.regs->nip; ret.sigpc = ((ucontext_t*)(context))->uc_mcontext.regs->nip;
#endif #endif
#ifdef _AIX
ret.sigpc = ((ucontext_t*)(context))->uc_mcontext.jmp_context.iar;
#endif
#endif #endif
if (ret.sigpc == 0) { if (ret.sigpc == 0) {
...@@ -282,19 +285,19 @@ dumpregs(siginfo_t *info __attribute__((unused)), void *context __attribute__((u ...@@ -282,19 +285,19 @@ dumpregs(siginfo_t *info __attribute__((unused)), void *context __attribute__((u
{ {
mcontext_t *m = &((ucontext_t*)(context))->uc_mcontext; mcontext_t *m = &((ucontext_t*)(context))->uc_mcontext;
runtime_printf("eax %X\n", m->gregs[REG_EAX]); runtime_printf("eax %x\n", m->gregs[REG_EAX]);
runtime_printf("ebx %X\n", m->gregs[REG_EBX]); runtime_printf("ebx %x\n", m->gregs[REG_EBX]);
runtime_printf("ecx %X\n", m->gregs[REG_ECX]); runtime_printf("ecx %x\n", m->gregs[REG_ECX]);
runtime_printf("edx %X\n", m->gregs[REG_EDX]); runtime_printf("edx %x\n", m->gregs[REG_EDX]);
runtime_printf("edi %X\n", m->gregs[REG_EDI]); runtime_printf("edi %x\n", m->gregs[REG_EDI]);
runtime_printf("esi %X\n", m->gregs[REG_ESI]); runtime_printf("esi %x\n", m->gregs[REG_ESI]);
runtime_printf("ebp %X\n", m->gregs[REG_EBP]); runtime_printf("ebp %x\n", m->gregs[REG_EBP]);
runtime_printf("esp %X\n", m->gregs[REG_ESP]); runtime_printf("esp %x\n", m->gregs[REG_ESP]);
runtime_printf("eip %X\n", m->gregs[REG_EIP]); runtime_printf("eip %x\n", m->gregs[REG_EIP]);
runtime_printf("eflags %X\n", m->gregs[REG_EFL]); runtime_printf("eflags %x\n", m->gregs[REG_EFL]);
runtime_printf("cs %X\n", m->gregs[REG_CS]); runtime_printf("cs %x\n", m->gregs[REG_CS]);
runtime_printf("fs %X\n", m->gregs[REG_FS]); runtime_printf("fs %x\n", m->gregs[REG_FS]);
runtime_printf("gs %X\n", m->gregs[REG_GS]); runtime_printf("gs %x\n", m->gregs[REG_GS]);
} }
#endif #endif
#endif #endif
...@@ -339,4 +342,37 @@ dumpregs(siginfo_t *info __attribute__((unused)), void *context __attribute__((u ...@@ -339,4 +342,37 @@ dumpregs(siginfo_t *info __attribute__((unused)), void *context __attribute__((u
} }
#endif #endif
#endif #endif
#ifdef __PPC__
#ifdef __linux__
{
mcontext_t *m = &((ucontext_t*)(context))->uc_mcontext;
int i;
for (i = 0; i < 32; i++)
runtime_printf("r%d %X\n", i, m->regs->gpr[i]);
runtime_printf("pc %X\n", m->regs->nip);
runtime_printf("msr %X\n", m->regs->msr);
runtime_printf("cr %X\n", m->regs->ccr);
runtime_printf("lr %X\n", m->regs->link);
runtime_printf("ctr %X\n", m->regs->ctr);
runtime_printf("xer %X\n", m->regs->xer);
}
#endif
#ifdef _AIX
{
mcontext_t *m = &((ucontext_t*)(context))->uc_mcontext;
int i;
for (i = 0; i < 32; i++)
runtime_printf("r%d %p\n", i, m->jmp_context.gpr[i]);
runtime_printf("pc %p\n", m->jmp_context.iar);
runtime_printf("msr %p\n", m->jmp_context.msr);
runtime_printf("cr %x\n", m->jmp_context.cr);
runtime_printf("lr %p\n", m->jmp_context.lr);
runtime_printf("ctr %p\n", m->jmp_context.ctr);
runtime_printf("xer %x\n", m->jmp_context.xer);
}
#endif
#endif
} }
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment