From: Austin Clements Date: Fri, 17 May 2024 19:32:13 +0000 (-0400) Subject: internal/runtime/atomic: fix missing linknames X-Git-Tag: go1.23rc1~286 X-Git-Url: http://www.git.cypherpunks.su/?a=commitdiff_plain;h=6ec291f4952090dfcaa4406b85efb3a8e6a42feb;p=gostls13.git 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 Reviewed-by: Cherry Mui Reviewed-by: David Chase LUCI-TryBot-Result: Go LUCI Auto-Submit: Austin Clements --- 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.