diff options
| author | Keith Randall <khr@golang.org> | 2022-10-20 14:20:41 -0700 |
|---|---|---|
| committer | Keith Randall <khr@golang.org> | 2023-02-16 00:16:24 +0000 |
| commit | 55044288ad22f0c46ac55375ed9ef3de1babb77c (patch) | |
| tree | bbb4c7a8682272d27e21b877d14bed24363e84b6 /src/runtime/atomic_pointer.go | |
| parent | 44d22e75dd9a0cbffbb04c9ce6d6bf9030634cc1 (diff) | |
| download | go-55044288ad22f0c46ac55375ed9ef3de1babb77c.tar.xz | |
runtime: reimplement GODEBUG=cgocheck=2 as a GOEXPERIMENT
Move this knob from a binary-startup thing to a build-time thing.
This will enable followon optmizations to the write barrier.
Change-Id: Ic3323348621c76a7dc390c09ff55016b19c43018
Reviewed-on: https://go-review.googlesource.com/c/go/+/447778
Reviewed-by: Michael Knyszek <mknyszek@google.com>
Run-TryBot: Keith Randall <khr@golang.org>
TryBot-Result: Gopher Robot <gobot@golang.org>
Reviewed-by: Cherry Mui <cherryyz@google.com>
Diffstat (limited to 'src/runtime/atomic_pointer.go')
| -rw-r--r-- | src/runtime/atomic_pointer.go | 18 |
1 files changed, 17 insertions, 1 deletions
diff --git a/src/runtime/atomic_pointer.go b/src/runtime/atomic_pointer.go index 25e0e651b4..26dfbfc2cc 100644 --- a/src/runtime/atomic_pointer.go +++ b/src/runtime/atomic_pointer.go @@ -5,6 +5,7 @@ package runtime import ( + "internal/goexperiment" "runtime/internal/atomic" "unsafe" ) @@ -21,7 +22,7 @@ import ( func atomicwb(ptr *unsafe.Pointer, new unsafe.Pointer) { slot := (*uintptr)(unsafe.Pointer(ptr)) if !getg().m.p.ptr().wbBuf.putFast(*slot, uintptr(new)) { - wbBufFlush(slot, uintptr(new)) + wbBufFlush() } } @@ -32,6 +33,9 @@ func atomicstorep(ptr unsafe.Pointer, new unsafe.Pointer) { if writeBarrier.enabled { atomicwb((*unsafe.Pointer)(ptr), new) } + if goexperiment.CgoCheck2 { + cgoCheckPtrWrite((*unsafe.Pointer)(ptr), new) + } atomic.StorepNoWB(noescape(ptr), new) } @@ -53,6 +57,9 @@ func atomic_casPointer(ptr *unsafe.Pointer, old, new unsafe.Pointer) bool { if writeBarrier.enabled { atomicwb(ptr, new) } + if goexperiment.CgoCheck2 { + cgoCheckPtrWrite(ptr, new) + } return atomic.Casp1(ptr, old, new) } @@ -69,6 +76,9 @@ func sync_atomic_StorePointer(ptr *unsafe.Pointer, new unsafe.Pointer) { if writeBarrier.enabled { atomicwb(ptr, new) } + if goexperiment.CgoCheck2 { + cgoCheckPtrWrite(ptr, new) + } sync_atomic_StoreUintptr((*uintptr)(unsafe.Pointer(ptr)), uintptr(new)) } @@ -81,6 +91,9 @@ func sync_atomic_SwapPointer(ptr *unsafe.Pointer, new unsafe.Pointer) unsafe.Poi if writeBarrier.enabled { atomicwb(ptr, new) } + if goexperiment.CgoCheck2 { + cgoCheckPtrWrite(ptr, new) + } old := unsafe.Pointer(sync_atomic_SwapUintptr((*uintptr)(noescape(unsafe.Pointer(ptr))), uintptr(new))) return old } @@ -94,5 +107,8 @@ func sync_atomic_CompareAndSwapPointer(ptr *unsafe.Pointer, old, new unsafe.Poin if writeBarrier.enabled { atomicwb(ptr, new) } + if goexperiment.CgoCheck2 { + cgoCheckPtrWrite(ptr, new) + } return sync_atomic_CompareAndSwapUintptr((*uintptr)(noescape(unsafe.Pointer(ptr))), uintptr(old), uintptr(new)) } |
