Skip to content

Commit

Permalink
internal/runtime/atomic: fix missing linknames
Browse files Browse the repository at this point in the history
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>
  • Loading branch information
aclements authored and gopherbot committed May 17, 2024
1 parent dfe781e commit 6ec291f
Show file tree
Hide file tree
Showing 3 changed files with 17 additions and 0 deletions.
11 changes: 11 additions & 0 deletions src/internal/runtime/atomic/atomic_andor_generic.go
Original file line number Diff line number Diff line change
Expand Up @@ -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 {
Expand Down
2 changes: 2 additions & 0 deletions src/internal/runtime/atomic/atomic_mipsx.go
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,8 @@
//go:linkname Cas64
//go:linkname Load64
//go:linkname Store64
//go:linkname Or64
//go:linkname And64

package atomic

Expand Down
4 changes: 4 additions & 0 deletions src/runtime/runtime2.go
Original file line number Diff line number Diff line change
Expand Up @@ -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.
Expand Down

0 comments on commit 6ec291f

Please sign in to comment.