diff mbox series

libgo patch committed: In sigprof, skip to sigtrampgo if we don't find sigtramp

Message ID CAOyqgcVSy5txvSd5LNE=sfaM1+JKt6jCxS9ePBp-kT-5=bNRhQ@mail.gmail.com
State New
Headers show
Series libgo patch committed: In sigprof, skip to sigtrampgo if we don't find sigtramp | expand

Commit Message

Ian Lance Taylor Jan. 18, 2019, 3:29 a.m. UTC
This patch to libgo change the runtime function sigprof to skip to
sigtrampgo if we don't find sigtramp.  This fixes GCC PR 88202.
Bootstrapped and ran Go testsuite on x86_64-pc-linux-gnu.
Bootstrapped and ran runtime/pprof test on aarch64-linux-gnu.
Committed to mainline.

Ian
diff mbox series

Patch

Index: gcc/go/gofrontend/MERGE
===================================================================
--- gcc/go/gofrontend/MERGE	(revision 268001)
+++ gcc/go/gofrontend/MERGE	(working copy)
@@ -1,4 +1,4 @@ 
-d6576c83016d856217758c06d945bfc363ffb817
+d16e9181a760796802c067730bb030b92b63fb2c
 
 The first line of this file holds the git revision number of the last
 merge done from the gofrontend repository.
Index: libgo/go/runtime/proc.go
===================================================================
--- libgo/go/runtime/proc.go	(revision 268001)
+++ libgo/go/runtime/proc.go	(working copy)
@@ -3600,10 +3600,17 @@  func sigprof(pc uintptr, gp *g, mp *m) {
 		// To ensure a sane profile, walk through the frames in
 		// "stklocs" until we find the "runtime.sigtramp" frame, then
 		// report only those frames below the frame one down from
-		// that. If for some reason "runtime.sigtramp" is not present,
-		// don't make any changes.
+		// that. On systems that don't split stack, "sigtramp" can
+		// do a sibling call to "sigtrampgo", so use "sigtrampgo"
+		// if we don't find "sigtramp". If for some reason
+		// neither "runtime.sigtramp" nor "runtime.sigtrampgo" is
+		// present, don't make any changes.
 		framesToDiscard := 0
 		for i := 0; i < n; i++ {
+			if stklocs[i].function == "runtime.sigtrampgo" && i+2 < n {
+				framesToDiscard = i + 2
+				n -= framesToDiscard
+			}
 			if stklocs[i].function == "runtime.sigtramp" && i+2 < n {
 				framesToDiscard = i + 2
 				n -= framesToDiscard