aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAustin Clements <austin@google.com>2024-05-17 15:32:13 -0400
committerGopher Robot <gobot@golang.org>2024-05-17 20:08:37 +0000
commit6ec291f4952090dfcaa4406b85efb3a8e6a42feb (patch)
tree8a4c5b9e30743ab20887e0655d22ddc8958fdae5
parentdfe781e1ebbb1b14f3c76c1ee730c09e27369062 (diff)
downloadgo-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.go11
-rw-r--r--src/internal/runtime/atomic/atomic_mipsx.go2
-rw-r--r--src/runtime/runtime2.go4
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.