runtime: in sigprof, skip to sigtrampgo if we don't find sigtramp

Fixes https://gcc.gnu.org/PR88202

Change-Id: Ie90b9fe92f565ee677bef2b811e88010ec1920ee
Reviewed-on: https://go-review.googlesource.com/c/158218
Reviewed-by: Cherry Zhang <cherryyz@google.com>
diff --git a/libgo/go/runtime/proc.go b/libgo/go/runtime/proc.go
index 655d0a9..80b04ab 100644
--- a/libgo/go/runtime/proc.go
+++ b/libgo/go/runtime/proc.go
@@ -3600,10 +3600,17 @@
 		// 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