Patchwork libgo patch committed: Remove confusion about split-stack backtrace

login
register
mail settings
Submitter Ian Taylor
Date Jan. 31, 2013, 7:46 p.m.
Message ID <mcrboc5uoe0.fsf@google.com>
Download mbox | patch
Permalink /patch/217247/
State New
Headers show

Comments

Ian Taylor - Jan. 31, 2013, 7:46 p.m.
In an earlier patch I tried to remove confusion about split-stack
functions in backtraces, but it still doesn't work in conjunction with
skipping functions.  Both runtime.Callers and backtrace_full can skip
stack frames.  backtrace_full will count split-stack frames in the skip
count, but runtime.Callers should not.  In order to keep this
consistent, this patch moves all the skip count handling to
runtime.Callers.  Bootstrapped and ran Go testsuite in
x86_64-unknown-linux-gnu.  Committed to mainline.

Ian

Patch

diff -r c205459490e5 libgo/runtime/go-callers.c
--- a/libgo/runtime/go-callers.c	Thu Jan 31 09:24:55 2013 -0800
+++ b/libgo/runtime/go-callers.c	Thu Jan 31 11:42:48 2013 -0800
@@ -16,6 +16,7 @@ 
 struct callers_data
 {
   Location *locbuf;
+  int skip;
   int index;
   int max;
 };
@@ -41,6 +42,12 @@ 
 	return 0;
     }
 
+  if (arg->skip > 0)
+    {
+      --arg->skip;
+      return 0;
+    }
+
   loc = &arg->locbuf[arg->index];
   loc->pc = pc;
 
@@ -75,10 +82,11 @@ 
   struct callers_data data;
 
   data.locbuf = locbuf;
+  data.skip = skip + 1;
   data.index = 0;
   data.max = m;
-  backtrace_full (__go_get_backtrace_state (), skip + 1, callback,
-		  error_callback, &data);
+  backtrace_full (__go_get_backtrace_state (), 0, callback, error_callback,
+		  &data);
   return data.index;
 }