diff options
author | Ian Lance Taylor <ian@gcc.gnu.org> | 2019-01-29 15:31:10 +0000 |
---|---|---|
committer | Ian Lance Taylor <ian@gcc.gnu.org> | 2019-01-29 15:31:10 +0000 |
commit | 6065f1c5889159c9fa1b6c74726d04fc9abea9fe (patch) | |
tree | fc8bafc955762ebe803bb67f0b2813659c95f935 /libgo/go/runtime/proc.go | |
parent | fac31afe6a8ee178de0662353dbd6f2cc5ab3556 (diff) | |
download | gcc-6065f1c5889159c9fa1b6c74726d04fc9abea9fe.zip gcc-6065f1c5889159c9fa1b6c74726d04fc9abea9fe.tar.gz gcc-6065f1c5889159c9fa1b6c74726d04fc9abea9fe.tar.bz2 |
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
Diffstat (limited to 'libgo/go/runtime/proc.go')
-rw-r--r-- | libgo/go/runtime/proc.go | 3 |
1 files changed, 1 insertions, 2 deletions
diff --git a/libgo/go/runtime/proc.go b/libgo/go/runtime/proc.go index 05dd53d..b4fa88f 100644 --- a/libgo/go/runtime/proc.go +++ b/libgo/go/runtime/proc.go @@ -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 } |