mirror of
https://github.com/golang/go
synced 2024-11-19 14:54:43 -07:00
runtime: fix build on non-x86 machines
Fixes #11656 (again). Change-Id: I170ff10bfbdb0f34e57c11de42b6ee5291837813 Reviewed-on: https://go-review.googlesource.com/12142 Reviewed-by: Russ Cox <rsc@golang.org>
This commit is contained in:
parent
73ca459a56
commit
3290e9c145
@ -67,11 +67,21 @@ func sighandler(sig uint32, info *siginfo, ctxt unsafe.Pointer, gp *g) {
|
||||
c.set_sp(sp)
|
||||
*(*uint32)(unsafe.Pointer(uintptr(sp))) = c.lr()
|
||||
|
||||
pc := uintptr(gp.sigpc)
|
||||
|
||||
// If we don't recognize the PC as code
|
||||
// but we do recognize the link register as code,
|
||||
// then assume this was a call to non-code and treat like
|
||||
// pc == 0, to make unwinding show the context.
|
||||
if pc != 0 && findfunc(pc) == nil && findfunc(uintptr(c.lr())) != nil {
|
||||
pc = 0
|
||||
}
|
||||
|
||||
// Don't bother saving PC if it's zero, which is
|
||||
// probably a call to a nil func: the old link register
|
||||
// is more useful in the stack trace.
|
||||
if gp.sigpc != 0 {
|
||||
c.set_lr(uint32(gp.sigpc))
|
||||
if pc != 0 {
|
||||
c.set_lr(uint32(pc))
|
||||
}
|
||||
|
||||
// In case we are panicking from external C code
|
||||
|
@ -80,11 +80,21 @@ func sighandler(sig uint32, info *siginfo, ctxt unsafe.Pointer, gp *g) {
|
||||
c.set_sp(sp)
|
||||
*(*uint64)(unsafe.Pointer(uintptr(sp))) = c.lr()
|
||||
|
||||
pc := uintptr(gp.sigpc)
|
||||
|
||||
// If we don't recognize the PC as code
|
||||
// but we do recognize the link register as code,
|
||||
// then assume this was a call to non-code and treat like
|
||||
// pc == 0, to make unwinding show the context.
|
||||
if pc != 0 && findfunc(pc) == nil && findfunc(uintptr(c.lr())) != nil {
|
||||
pc = 0
|
||||
}
|
||||
|
||||
// Don't bother saving PC if it's zero, which is
|
||||
// probably a call to a nil func: the old link register
|
||||
// is more useful in the stack trace.
|
||||
if gp.sigpc != 0 {
|
||||
c.set_lr(uint64(gp.sigpc))
|
||||
if pc != 0 {
|
||||
c.set_lr(uint64(pc))
|
||||
}
|
||||
|
||||
// In case we are panicking from external C code
|
||||
|
@ -84,11 +84,21 @@ func sighandler(sig uint32, info *siginfo, ctxt unsafe.Pointer, gp *g) {
|
||||
c.set_sp(sp)
|
||||
*(*uint64)(unsafe.Pointer(uintptr(sp))) = c.link()
|
||||
|
||||
pc := uintptr(gp.sigpc)
|
||||
|
||||
// If we don't recognize the PC as code
|
||||
// but we do recognize the link register as code,
|
||||
// then assume this was a call to non-code and treat like
|
||||
// pc == 0, to make unwinding show the context.
|
||||
if pc != 0 && findfunc(pc) == nil && findfunc(uintptr(c.link())) != nil {
|
||||
pc = 0
|
||||
}
|
||||
|
||||
// Don't bother saving PC if it's zero, which is
|
||||
// probably a call to a nil func: the old link register
|
||||
// is more useful in the stack trace.
|
||||
if gp.sigpc != 0 {
|
||||
c.set_link(uint64(gp.sigpc))
|
||||
if pc != 0 {
|
||||
c.set_link(uint64(pc))
|
||||
}
|
||||
|
||||
// In case we are panicking from external C code
|
||||
|
Loading…
Reference in New Issue
Block a user