]> Cypherpunks repositories - gostls13.git/commitdiff
runtime: eliminate poisonStack checks
authorAustin Clements <austin@google.com>
Fri, 17 Jun 2016 15:07:56 +0000 (11:07 -0400)
committerAustin Clements <austin@google.com>
Fri, 17 Jun 2016 15:18:39 +0000 (15:18 +0000)
We haven't used poisonStack since we switched to 1-bit stack maps
(4d0f3a1), but the checks are still there. However, nothing prevents
us from genuinely allocating an object at this address on 32-bit and
causing the runtime to crash claiming that it's found a bad pointer.

Since we're not using poisonStack anyway, just pull it out.

Fixes #15831.

Change-Id: Ia6ef604675b8433f75045e369f5acd4644a5bb38
Reviewed-on: https://go-review.googlesource.com/24211
Run-TryBot: Austin Clements <austin@google.com>
Reviewed-by: Keith Randall <khr@golang.org>
src/runtime/mbarrier.go
src/runtime/stack.go

index 637d9b886a194f36b1a6a804ae832d9eb953fe62..bf75934ed6e160527bd2a0afd9836ecf68ed7549 100644 (file)
@@ -145,7 +145,7 @@ func writebarrierptr(dst *uintptr, src uintptr) {
        if !writeBarrier.needed {
                return
        }
-       if src != 0 && (src < sys.PhysPageSize || src == poisonStack) {
+       if src != 0 && src < sys.PhysPageSize {
                systemstack(func() {
                        print("runtime: writebarrierptr *", dst, " = ", hex(src), "\n")
                        throw("bad pointer in write barrier")
@@ -164,7 +164,7 @@ func writebarrierptr_nostore(dst *uintptr, src uintptr) {
        if !writeBarrier.needed {
                return
        }
-       if src != 0 && (src < sys.PhysPageSize || src == poisonStack) {
+       if src != 0 && src < sys.PhysPageSize {
                systemstack(func() { throw("bad pointer in write barrier") })
        }
        writebarrierptr_nostore1(dst, src)
index ee2797e14433007c8edfdcc8d50d0b390833aadc..b14b4005d80fa1e93a91af65e00aa41992b2a8b0 100644 (file)
@@ -127,7 +127,6 @@ const (
 
 const (
        uintptrMask = 1<<(8*sys.PtrSize) - 1
-       poisonStack = uintptrMask & 0x6868686868686868
 
        // Goroutine preemption request.
        // Stored into g->stackguard0 to cause split stack check failure.
@@ -594,7 +593,7 @@ func adjustpointers(scanp unsafe.Pointer, cbv *bitvector, adjinfo *adjustinfo, f
                        pp := (*uintptr)(add(scanp, i*sys.PtrSize))
                retry:
                        p := *pp
-                       if f != nil && 0 < p && p < _PageSize && debug.invalidptr != 0 || p == poisonStack {
+                       if f != nil && 0 < p && p < _PageSize && debug.invalidptr != 0 {
                                // Looks like a junk value in a pointer slot.
                                // Live analysis wrong?
                                getg().m.traceback = 2