aboutsummaryrefslogtreecommitdiff
path: root/src/pkg/runtime/panic.c
diff options
context:
space:
mode:
authorRuss Cox <rsc@golang.org>2013-07-17 12:47:18 -0400
committerRuss Cox <rsc@golang.org>2013-07-17 12:47:18 -0400
commita83748596c009db47bcd35a69531e485e2c7f924 (patch)
tree2cd2f1b4cb878e05dde91af1b12d2929937f9203 /src/pkg/runtime/panic.c
parent7b7dac5e235145b08644e2fe4864b3d1fb8e2d5a (diff)
downloadgo-a83748596c009db47bcd35a69531e485e2c7f924.tar.xz
runtime: use new frame argument size information
With this CL, I believe the runtime always knows the frame size during the gc walk. There is no fallback to "assume entire stack frame of caller" anymore. R=golang-dev, khr, cshapiro, dvyukov CC=golang-dev https://golang.org/cl/11374044
Diffstat (limited to 'src/pkg/runtime/panic.c')
-rw-r--r--src/pkg/runtime/panic.c7
1 files changed, 6 insertions, 1 deletions
diff --git a/src/pkg/runtime/panic.c b/src/pkg/runtime/panic.c
index 8d7d261faf..120f7706e7 100644
--- a/src/pkg/runtime/panic.c
+++ b/src/pkg/runtime/panic.c
@@ -156,9 +156,14 @@ runtimeĀ·deferproc(int32 siz, FuncVal *fn, ...)
// is called again and again until there are no more deferred functions.
// Cannot split the stack because we reuse the caller's frame to
// call the deferred function.
+//
+// The ... in the prototype keeps the compiler from declaring
+// an argument frame size. deferreturn is a very special function,
+// and if the runtime ever asks for its frame size, that means
+// the traceback routines are probably broken.
#pragma textflag 7
void
-runtimeĀ·deferreturn(uintptr arg0)
+runtimeĀ·deferreturn(uintptr arg0, ...)
{
Defer *d;
byte *argp;