aboutsummaryrefslogtreecommitdiff
path: root/libgo
diff options
context:
space:
mode:
authorIan Lance Taylor <ian@gcc.gnu.org>2019-01-29 15:31:10 +0000
committerIan Lance Taylor <ian@gcc.gnu.org>2019-01-29 15:31:10 +0000
commit6065f1c5889159c9fa1b6c74726d04fc9abea9fe (patch)
treefc8bafc955762ebe803bb67f0b2813659c95f935 /libgo
parentfac31afe6a8ee178de0662353dbd6f2cc5ab3556 (diff)
downloadgcc-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')
-rw-r--r--libgo/go/runtime/proc.go3
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
}