summaryrefslogtreecommitdiff
path: root/src/pkg/runtime/traceback_arm.c
diff options
context:
space:
mode:
authorShenghou Ma <minux.ma@gmail.com>2013-02-08 13:24:38 +0800
committerShenghou Ma <minux.ma@gmail.com>2013-02-08 13:24:38 +0800
commit68a1684d32808a4b101768831948ed16c2623a61 (patch)
tree63e8283f4b500cfeb6c1099ff4030be8f238465a /src/pkg/runtime/traceback_arm.c
parentf66a157fd63cdd25a71d162f39351d36ba9d84fe (diff)
downloadgo-68a1684d32808a4b101768831948ed16c2623a61.tar.gz
runtime: fix build for Linux/ARM
R=dave, rsc CC=golang-dev https://codereview.appspot.com/7299055
Diffstat (limited to 'src/pkg/runtime/traceback_arm.c')
-rw-r--r--src/pkg/runtime/traceback_arm.c9
1 files changed, 7 insertions, 2 deletions
diff --git a/src/pkg/runtime/traceback_arm.c b/src/pkg/runtime/traceback_arm.c
index 39dc6fd22..e44e0f82f 100644
--- a/src/pkg/runtime/traceback_arm.c
+++ b/src/pkg/runtime/traceback_arm.c
@@ -183,10 +183,15 @@ runtime·gentraceback(byte *pc0, byte *sp, byte *lr0, G *gp, int32 skip, uintptr
if(f->entry == (uintptr)runtime·deferproc || f->entry == (uintptr)runtime·newproc)
sp += 12;
- // sighandler saves the lr on stack before fake a call to sigpanic
+ // sighandler saves the lr on stack before faking a call to sigpanic
if(waspanic) {
- pc = *(uintptr *)sp;
+ x = *(uintptr *)sp;
sp += 4;
+ f = runtime·findfunc(pc);
+ if (f == nil) {
+ pc = x;
+ } else if (f->frame == 0)
+ lr = x;
}
}