From 780422ff1b01419be4a683dd6aa11494305f7354 Mon Sep 17 00:00:00 2001 From: ian 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 git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@268366 138bc75d-0d04-0410-961f-82ee72b054a4 --- 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 0eff5eba6a82..10e20cebfcd8 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 05dd53d886fa..b4fa88fe5d86 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.39.2