]> Cypherpunks repositories - gostls13.git/commitdiff
runtime: fix newextram PC passed to race detector
authorDmitry Vyukov <dvyukov@google.com>
Sat, 24 Sep 2016 14:59:23 +0000 (16:59 +0200)
committerDmitry Vyukov <dvyukov@google.com>
Sun, 25 Sep 2016 12:15:40 +0000 (12:15 +0000)
PC passed to racegostart is expected to be a return PC
of the go statement. Race runtime will subtract 1 from the PC
before symbolization. Passing start PC of a function is wrong.
Add sys.PCQuantum to the function start PC.

Update #17190

Change-Id: Ia504c49e79af84ed4ea360c2aea472b370ea8bf5
Reviewed-on: https://go-review.googlesource.com/29712
Run-TryBot: Dmitry Vyukov <dvyukov@google.com>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Ian Lance Taylor <iant@golang.org>
src/runtime/proc.go

index 4dd2bd200541cdb64d9a7e4c9e03b1211681683b..2c50fb5afe3c41adeb6da34f8e0633ae0d6696e1 100644 (file)
@@ -1438,7 +1438,7 @@ func oneNewExtraM() {
        gp.lockedm = mp
        gp.goid = int64(atomic.Xadd64(&sched.goidgen, 1))
        if raceenabled {
-               gp.racectx = racegostart(funcPC(newextram))
+               gp.racectx = racegostart(funcPC(newextram) + sys.PCQuantum)
        }
        // put on allg for garbage collector
        allgadd(gp)