mirror of
https://github.com/golang/go
synced 2024-11-21 18:34:44 -07:00
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 https://golang.org/cl/6465054
This commit is contained in:
parent
2a642c34e5
commit
1b6557a0cf
@ -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 @@ Throw:
|
||||
|
||||
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);
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user