From 6065f1c5889159c9fa1b6c74726d04fc9abea9fe Mon Sep 17 00:00:00 2001 From: Ian Lance Taylor Date: Tue, 29 Jan 2019 15:31:10 +0000 Subject: [PATCH] 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 --- gcc/go/gofrontend/MERGE | 2 +- libgo/go/runtime/proc.go | 3 +-- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/gcc/go/gofrontend/MERGE b/gcc/go/gofrontend/MERGE index 0eff5eba6a8..10e20cebfcd 100644 --- a/gcc/go/gofrontend/MERGE +++ b/gcc/go/gofrontend/MERGE @@ -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. diff --git a/libgo/go/runtime/proc.go b/libgo/go/runtime/proc.go index 05dd53d886f..b4fa88fe5d8 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 } -- 2.30.2