diff mbox

libgo patch committed: Signal/register improvements

Message ID CAOyqgcXK3RvH7sJFUnhUchhQcpfhOchqHp8AuAuw1dEZop5bdw@mail.gmail.com
State New
Headers show

Commit Message

Ian Lance Taylor Aug. 16, 2017, 7:04 p.m. UTC
This patch by Tony Reix fixes dumpregs on i386 to use the right type,
implements dumpregs for PPC Linux/AIX, and retrieves the PC value on
AIX.  Bootstrapped and ran Go testsuite on x86_64-pc-linux-gnu.
Committed to mainline.

Ian
diff mbox

Patch

Index: gcc/go/gofrontend/MERGE
===================================================================
--- gcc/go/gofrontend/MERGE	(revision 251006)
+++ gcc/go/gofrontend/MERGE	(working copy)
@@ -1,4 +1,4 @@ 
-480fdfa9dd416bd17115a94fa6021c4dd805fc39
+f02183eb66f5718769f3f6541dcc6744ae1771c0
 
 The first line of this file holds the git revision number of the last
 merge done from the gofrontend repository.
Index: libgo/runtime/go-signal.c
===================================================================
--- libgo/runtime/go-signal.c	(revision 250873)
+++ libgo/runtime/go-signal.c	(working copy)
@@ -224,6 +224,9 @@  getSiginfo(siginfo_t *info, void *contex
   #ifdef __linux__
 	ret.sigpc = ((ucontext_t*)(context))->uc_mcontext.regs->nip;
   #endif
+  #ifdef _AIX
+	ret.sigpc = ((ucontext_t*)(context))->uc_mcontext.jmp_context.iar;
+  #endif
 #endif
 
 	if (ret.sigpc == 0) {
@@ -282,19 +285,19 @@  dumpregs(siginfo_t *info __attribute__((
 	{
 		mcontext_t *m = &((ucontext_t*)(context))->uc_mcontext;
 
-		runtime_printf("eax    %X\n", m->gregs[REG_EAX]);
-		runtime_printf("ebx    %X\n", m->gregs[REG_EBX]);
-		runtime_printf("ecx    %X\n", m->gregs[REG_ECX]);
-		runtime_printf("edx    %X\n", m->gregs[REG_EDX]);
-		runtime_printf("edi    %X\n", m->gregs[REG_EDI]);
-		runtime_printf("esi    %X\n", m->gregs[REG_ESI]);
-		runtime_printf("ebp    %X\n", m->gregs[REG_EBP]);
-		runtime_printf("esp    %X\n", m->gregs[REG_ESP]);
-		runtime_printf("eip    %X\n", m->gregs[REG_EIP]);
-		runtime_printf("eflags %X\n", m->gregs[REG_EFL]);
-		runtime_printf("cs     %X\n", m->gregs[REG_CS]);
-		runtime_printf("fs     %X\n", m->gregs[REG_FS]);
-		runtime_printf("gs     %X\n", m->gregs[REG_GS]);
+		runtime_printf("eax    %x\n", m->gregs[REG_EAX]);
+		runtime_printf("ebx    %x\n", m->gregs[REG_EBX]);
+		runtime_printf("ecx    %x\n", m->gregs[REG_ECX]);
+		runtime_printf("edx    %x\n", m->gregs[REG_EDX]);
+		runtime_printf("edi    %x\n", m->gregs[REG_EDI]);
+		runtime_printf("esi    %x\n", m->gregs[REG_ESI]);
+		runtime_printf("ebp    %x\n", m->gregs[REG_EBP]);
+		runtime_printf("esp    %x\n", m->gregs[REG_ESP]);
+		runtime_printf("eip    %x\n", m->gregs[REG_EIP]);
+		runtime_printf("eflags %x\n", m->gregs[REG_EFL]);
+		runtime_printf("cs     %x\n", m->gregs[REG_CS]);
+		runtime_printf("fs     %x\n", m->gregs[REG_FS]);
+		runtime_printf("gs     %x\n", m->gregs[REG_GS]);
 	  }
  #endif
 #endif
@@ -339,4 +342,37 @@  dumpregs(siginfo_t *info __attribute__((
 	  }
   #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
 }