Commit aee6ed4a by Ian Lance Taylor

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
parent 151a199f
d6576c83016d856217758c06d945bfc363ffb817 d16e9181a760796802c067730bb030b92b63fb2c
The first line of this file holds the git revision number of the last The first line of this file holds the git revision number of the last
merge done from the gofrontend repository. merge done from the gofrontend repository.
...@@ -3600,10 +3600,17 @@ func sigprof(pc uintptr, gp *g, mp *m) { ...@@ -3600,10 +3600,17 @@ func sigprof(pc uintptr, gp *g, mp *m) {
// To ensure a sane profile, walk through the frames in // To ensure a sane profile, walk through the frames in
// "stklocs" until we find the "runtime.sigtramp" frame, then // "stklocs" until we find the "runtime.sigtramp" frame, then
// report only those frames below the frame one down from // report only those frames below the frame one down from
// that. If for some reason "runtime.sigtramp" is not present, // that. On systems that don't split stack, "sigtramp" can
// don't make any changes. // 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 framesToDiscard := 0
for i := 0; i < n; i++ { 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 { if stklocs[i].function == "runtime.sigtramp" && i+2 < n {
framesToDiscard = i + 2 framesToDiscard = i + 2
n -= framesToDiscard n -= framesToDiscard
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment