Permalink
Browse files

runtime: fix netbsd/386 stack pointer handling

When manipulating the stack pointer use the UESP register instead
of the ESP register, since the UESP register is the one that gets
restored from the machine context. Fixes broken tests on netbsd/386.

R=golang-dev, minux.ma, r, bsiegert
CC=golang-dev
http://codereview.appspot.com/6465054
  • Loading branch information...
1 parent a934d94 commit 7918211125bf1216bd5133bc7c634b00e3537d4e @4a6f656c 4a6f656c committed Aug 17, 2012
Showing with 5 additions and 5 deletions.
  1. +5 −5 src/pkg/runtime/signal_netbsd_386.c
@@ -29,7 +29,7 @@ runtime·dumpregs(McontextT *mc)
runtime·printf("edi %x\n", mc->__gregs[REG_EDI]);
runtime·printf("esi %x\n", mc->__gregs[REG_ESI]);
runtime·printf("ebp %x\n", mc->__gregs[REG_EBP]);
- runtime·printf("esp %x\n", mc->__gregs[REG_ESP]);
+ runtime·printf("esp %x\n", mc->__gregs[REG_UESP]);
runtime·printf("eip %x\n", mc->__gregs[REG_EIP]);
runtime·printf("eflags %x\n", mc->__gregs[REG_EFL]);
runtime·printf("cs %x\n", mc->__gregs[REG_CS]);
@@ -47,7 +47,7 @@ runtime·sighandler(int32 sig, Siginfo *info, void *context, G *gp)
if(sig == SIGPROF) {
runtime·sigprof((uint8*)mc->__gregs[REG_EIP],
- (uint8*)mc->__gregs[REG_ESP], nil, gp);
+ (uint8*)mc->__gregs[REG_UESP], nil, gp);
return;
}
@@ -71,9 +71,9 @@ runtime·sighandler(int32 sig, Siginfo *info, void *context, G *gp)
// (Otherwise the trace will end at runtime·sigpanic
// and we won't get to see who faulted.)
if(mc->__gregs[REG_EIP] != 0) {
- sp = (uintptr*)mc->__gregs[REG_ESP];
+ sp = (uintptr*)mc->__gregs[REG_UESP];
*--sp = mc->__gregs[REG_EIP];
- mc->__gregs[REG_ESP] = (uintptr)sp;
+ mc->__gregs[REG_UESP] = (uintptr)sp;
}
mc->__gregs[REG_EIP] = (uintptr)runtime·sigpanic;
return;
@@ -100,7 +100,7 @@ runtime·sighandler(int32 sig, Siginfo *info, void *context, G *gp)
if(runtime·gotraceback()){
runtime·traceback((void*)mc->__gregs[REG_EIP],
- (void*)mc->__gregs[REG_ESP], 0, gp);
+ (void*)mc->__gregs[REG_UESP], 0, gp);
runtime·tracebackothers(gp);
runtime·dumpregs(mc);
}

0 comments on commit 7918211

Please sign in to comment.