runtime: fix sigprof frame counting

If sigtramp and sigtrampgo are both on stack, n -= framesToDiscard
    is executed twice, which should actually run only once.
    
    Reviewed-on: https://go-review.googlesource.com/c/159238

From-SVN: r268366
This commit is contained in:
Ian Lance Taylor 2019-01-29 15:31:10 +00:00
parent fac31afe6a
commit 6065f1c588
2 changed files with 2 additions and 3 deletions

View File

@ -1,4 +1,4 @@
c2cac0ba0a92e74d5675c3c9f4e53d2567dbc903
5af8ee0693944c280b1f529450dbfd4ec1ee451d
The first line of this file holds the git revision number of the last
merge done from the gofrontend repository.

View File

@ -3542,14 +3542,13 @@ func sigprof(pc uintptr, gp *g, mp *m) {
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
break
}
}
n -= framesToDiscard
for i := 0; i < n; i++ {
stk[i] = stklocs[i+framesToDiscard].pc
}