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);