runtime: various arm fixes
* correct symbol table size
* do not reorder functions in output
* traceback
* signal handling
* use same code for go + defer
* handle leaf functions in symbol table
R=kaib, dpx
CC=golang-dev
https://golang.org/cl/884041
diff --git a/src/pkg/runtime/proc.c b/src/pkg/runtime/proc.c
index 3dd9977..8473cd2 100644
--- a/src/pkg/runtime/proc.c
+++ b/src/pkg/runtime/proc.c
@@ -157,7 +157,7 @@
if(g == me || g->status == Gdead)
continue;
printf("\ngoroutine %d [%d]:\n", g->goid, g->status);
- traceback(g->sched.pc, g->sched.sp, g);
+ traceback(g->sched.pc, g->sched.sp, 0, g);
}
}
@@ -468,7 +468,7 @@
// each call to deferproc.
// (the pc we're returning to does pop pop
// before it tests the return value.)
- gp->sched.sp = d->sp - 2*sizeof(uintptr);
+ gp->sched.sp = getcallersp(d->sp - 2*sizeof(uintptr));
gp->sched.pc = d->pc;
free(d);
gogo(&gp->sched, 1);
@@ -714,7 +714,8 @@
frame = m->moreframe;
args = m->moreargs;
g1 = m->curg;
-
+
+
if(frame == 1 && args > 0 && m->morebuf.sp - sizeof(Stktop) - args - 32 > g1->stackguard) {
// special case: called from reflect.call (frame == 1)
// to call code with an arbitrary argument size,
@@ -883,7 +884,7 @@
d = g->defer;
if(d == nil)
return;
- sp = (byte*)&arg0;
+ sp = getcallersp(&arg0);
if(d->sp != sp)
return;
mcpy(d->sp, d->args, d->siz);