]> Cypherpunks repositories - gostls13.git/commitdiff
runtime: stop traceback at foreign function
authorRuss Cox <rsc@golang.org>
Wed, 6 Jan 2016 17:45:23 +0000 (12:45 -0500)
committerBrad Fitzpatrick <bradfitz@golang.org>
Fri, 6 May 2016 00:54:25 +0000 (00:54 +0000)
This can only happen when profiling and there is foreign code
at the top of the g0 stack but we're not in cgo.
That in turn only happens with the race detector.

Fixes #13568.

Change-Id: I23775132c9c1a3a3aaae191b318539f368adf25e
Reviewed-on: https://go-review.googlesource.com/18322
Reviewed-by: Ian Lance Taylor <iant@golang.org>
Run-TryBot: Brad Fitzpatrick <bradfitz@golang.org>
TryBot-Result: Gobot Gobot <gobot@golang.org>

src/runtime/traceback.go

index 7771426ef95e9736d2e35d26d039032e5fc07858..0e96a28945351bde0cf6d23bd89f159f0fc1b98b 100644 (file)
@@ -241,6 +241,11 @@ func gentraceback(pc0, sp0, lr0 uintptr, gp *g, skip int, pcbuf *uintptr, max in
                //      stk is the stack containing sp.
                //      The caller's program counter is lr, unless lr is zero, in which case it is *(uintptr*)sp.
                f = frame.fn
+               if f.pcsp == 0 {
+                       // No frame information, must be external function, like race support.
+                       // See golang.org/issue/13568.
+                       break
+               }
 
                // Found an actual function.
                // Derive frame pointer and link register.