diff options
author | Ian Lance Taylor <ian@gcc.gnu.org> | 2019-01-18 03:29:38 +0000 |
---|---|---|
committer | Ian Lance Taylor <ian@gcc.gnu.org> | 2019-01-18 03:29:38 +0000 |
commit | aee6ed4a2cbed1ac8be35332ee2391206e2101a2 (patch) | |
tree | e50bdbe4203778fb88f8247d303ef2c3bcb04c3d | |
parent | 151a199f292c8978bf3d5d2123e65af224ed45c2 (diff) | |
download | gcc-aee6ed4a2cbed1ac8be35332ee2391206e2101a2.zip gcc-aee6ed4a2cbed1ac8be35332ee2391206e2101a2.tar.gz gcc-aee6ed4a2cbed1ac8be35332ee2391206e2101a2.tar.bz2 |
re PR go/88202 (FAIL: runtime/pprof)
PR go/88202
runtime: in sigprof, skip to sigtrampgo if we don't find sigtramp
Fixes https://gcc.gnu.org/PR88202
Reviewed-on: https://go-review.googlesource.com/c/158218
From-SVN: r268057
-rw-r--r-- | gcc/go/gofrontend/MERGE | 2 | ||||
-rw-r--r-- | libgo/go/runtime/proc.go | 11 |
2 files changed, 10 insertions, 3 deletions
diff --git a/gcc/go/gofrontend/MERGE b/gcc/go/gofrontend/MERGE index 94604b2..99ec5cc 100644 --- a/gcc/go/gofrontend/MERGE +++ b/gcc/go/gofrontend/MERGE @@ -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. 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 @@ 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 |