mirror of
https://github.com/golang/go
synced 2024-11-25 06:47:56 -07:00
runtime: avoid crash in Caller
Fixes #176. R=r https://golang.org/cl/154146
This commit is contained in:
parent
a338231526
commit
091191336a
@ -42,7 +42,7 @@ traceback(byte *pc0, byte *sp, G *g)
|
||||
if(f == nil) {
|
||||
// dangerous, but poke around to see if it is a closure
|
||||
// ADDL $xxx, SP; RET
|
||||
if(p != 0 && p[0] == 0x81 && p[1] == 0xc4 && p[6] == 0xc3) {
|
||||
if((uint64)pc > 0x1000 && p[0] == 0x81 && p[1] == 0xc4 && p[6] == 0xc3) {
|
||||
sp += *(uint32*)(p+2) + 8;
|
||||
pc = *(uintptr*)(sp - 8);
|
||||
if(pc <= 0x1000)
|
||||
|
@ -127,7 +127,7 @@ runtime·Caller(int32 n, uint64 retpc, String retfile, int32 retline, bool retbo
|
||||
// see if it is a closure.
|
||||
p = (byte*)pc;
|
||||
// ADDQ $xxx, SP; RET
|
||||
if(p[0] == 0x48 && p[1] == 0x81 && p[2] == 0xc4 && p[7] == 0xc3) {
|
||||
if(pc > 0x1000 && p[0] == 0x48 && p[1] == 0x81 && p[2] == 0xc4 && p[7] == 0xc3) {
|
||||
sp += *(uint32*)(p+3) + 8;
|
||||
goto loop;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user