aboutsummaryrefslogtreecommitdiff
path: root/src/runtime/proc.go
diff options
context:
space:
mode:
authorHeschi Kreinick <heschi@google.com>2018-04-18 13:03:35 -0400
committerHeschi Kreinick <heschi@google.com>2018-04-18 17:35:42 +0000
commitacebfba75570d3039720d603774dd72d51275c31 (patch)
tree5504a1074ca8f47f2c87f7420d1f9bcdc9c10fb6 /src/runtime/proc.go
parent24d5c871aa8c2107965e35e838514af8488e4bad (diff)
downloadgo-acebfba75570d3039720d603774dd72d51275c31.tar.xz
runtime: use saved state in SIGPROF handler for vDSO calls
VDSO calls do manual stack alignment, which doesn't get tracked in the pcsp table. Without accurate pcsp information, backtracing them is dangerous, and causes a crash in the SIGPROF handler. Fortunately, https://golang.org/cl/97315 saves a clean state in m.vdsoPC/SP. Change to use those if they're present, without attempting a normal backtrace. Fixes #24925 Change-Id: I4b8501ae73a9d18209e22f839773c4fe6102a509 Reviewed-on: https://go-review.googlesource.com/107778 Run-TryBot: Heschi Kreinick <heschi@google.com> Run-TryBot: Ian Lance Taylor <iant@golang.org> Reviewed-by: Ian Lance Taylor <iant@golang.org> Reviewed-by: Austin Clements <austin@google.com> TryBot-Result: Gobot Gobot <gobot@golang.org>
Diffstat (limited to 'src/runtime/proc.go')
-rw-r--r--src/runtime/proc.go2
1 files changed, 1 insertions, 1 deletions
diff --git a/src/runtime/proc.go b/src/runtime/proc.go
index d99c8be1ab..b67d67a6f7 100644
--- a/src/runtime/proc.go
+++ b/src/runtime/proc.go
@@ -3716,7 +3716,7 @@ func sigprof(pc, sp, lr uintptr, gp *g, mp *m) {
// transition. We simply require that g and SP match and that the PC is not
// in gogo.
traceback := true
- if gp == nil || sp < gp.stack.lo || gp.stack.hi < sp || setsSP(pc) {
+ if gp == nil || sp < gp.stack.lo || gp.stack.hi < sp || setsSP(pc) || (mp != nil && mp.vdsoSP != 0) {
traceback = false
}
var stk [maxCPUProfStack]uintptr