diff options
author | Austin Clements <austin@google.com> | 2024-05-17 15:32:13 -0400 |
---|---|---|
committer | Gopher Robot <gobot@golang.org> | 2024-05-17 20:08:37 +0000 |
commit | 6ec291f4952090dfcaa4406b85efb3a8e6a42feb (patch) | |
tree | 8a4c5b9e30743ab20887e0655d22ddc8958fdae5 | |
parent | dfe781e1ebbb1b14f3c76c1ee730c09e27369062 (diff) | |
download | go-6ec291f4952090dfcaa4406b85efb3a8e6a42feb.tar.gz go-6ec291f4952090dfcaa4406b85efb3a8e6a42feb.zip |
internal/runtime/atomic: fix missing linknames
CL 544455, which added atomic And/Or APIs, raced with CL 585556, which
enabled stricter linkname checking. This caused linkname-related
failures on ARM and MIPS. Fix this by adding the necessary linknames.
We fix one other linkname that got overlooked in CL 585556.
Updates #61395.
Change-Id: I454f0767ce28188e550a61bc39b7e398239bc10e
Reviewed-on: https://go-review.googlesource.com/c/go/+/586516
Reviewed-by: Mauri de Souza Meneguzzo <mauri870@gmail.com>
Reviewed-by: Cherry Mui <cherryyz@google.com>
Reviewed-by: David Chase <drchase@google.com>
LUCI-TryBot-Result: Go LUCI <golang-scoped@luci-project-accounts.iam.gserviceaccount.com>
Auto-Submit: Austin Clements <austin@google.com>
-rw-r--r-- | src/internal/runtime/atomic/atomic_andor_generic.go | 11 | ||||
-rw-r--r-- | src/internal/runtime/atomic/atomic_mipsx.go | 2 | ||||
-rw-r--r-- | src/runtime/runtime2.go | 4 |
3 files changed, 17 insertions, 0 deletions
diff --git a/src/internal/runtime/atomic/atomic_andor_generic.go b/src/internal/runtime/atomic/atomic_andor_generic.go index 6c12037d94..433ee0bd6c 100644 --- a/src/internal/runtime/atomic/atomic_andor_generic.go +++ b/src/internal/runtime/atomic/atomic_andor_generic.go @@ -4,8 +4,19 @@ //go:build arm || wasm +// Export some functions via linkname to assembly in sync/atomic. +// +//go:linkname And32 +//go:linkname Or32 +//go:linkname And64 +//go:linkname Or64 +//go:linkname Anduintptr +//go:linkname Oruintptr + package atomic +import _ "unsafe" // For linkname + //go:nosplit func And32(ptr *uint32, val uint32) uint32 { for { diff --git a/src/internal/runtime/atomic/atomic_mipsx.go b/src/internal/runtime/atomic/atomic_mipsx.go index 26c8047599..aba4143ea6 100644 --- a/src/internal/runtime/atomic/atomic_mipsx.go +++ b/src/internal/runtime/atomic/atomic_mipsx.go @@ -11,6 +11,8 @@ //go:linkname Cas64 //go:linkname Load64 //go:linkname Store64 +//go:linkname Or64 +//go:linkname And64 package atomic diff --git a/src/runtime/runtime2.go b/src/runtime/runtime2.go index 228340c394..ff11414e3e 100644 --- a/src/runtime/runtime2.go +++ b/src/runtime/runtime2.go @@ -1232,6 +1232,10 @@ var ( timerpMask pMask ) +// goarmsoftfp is used by runtime/cgo assembly. +// +//go:linkname goarmsoftfp + var ( // Pool of GC parked background workers. Entries are type // *gcBgMarkWorkerNode. |