Commit 6065f1c5 by Ian Lance Taylor

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
parent fac31afe
c2cac0ba0a92e74d5675c3c9f4e53d2567dbc903 5af8ee0693944c280b1f529450dbfd4ec1ee451d
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.
...@@ -3542,14 +3542,13 @@ func sigprof(pc uintptr, gp *g, mp *m) { ...@@ -3542,14 +3542,13 @@ func sigprof(pc uintptr, gp *g, mp *m) {
for i := 0; i < n; i++ { for i := 0; i < n; i++ {
if stklocs[i].function == "runtime.sigtrampgo" && i+2 < n { if stklocs[i].function == "runtime.sigtrampgo" && i+2 < n {
framesToDiscard = i + 2 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
break break
} }
} }
n -= framesToDiscard
for i := 0; i < n; i++ { for i := 0; i < n; i++ {
stk[i] = stklocs[i+framesToDiscard].pc stk[i] = stklocs[i+framesToDiscard].pc
} }
......
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