diff options
| author | Austin Clements <austin@google.com> | 2019-05-31 16:38:56 -0400 |
|---|---|---|
| committer | Austin Clements <austin@google.com> | 2019-06-06 19:44:12 +0000 |
| commit | f5e5bc1a4281b22c9ca2c75431647638de515ba0 (patch) | |
| tree | 72e401c8b96177f5eef8d30a676e0779e15b9eab /src/runtime/internal | |
| parent | dde7c770ef44d45b8a9f98bf0f46556f18df2f6e (diff) | |
| download | go-f5e5bc1a4281b22c9ca2c75431647638de515ba0.tar.xz | |
runtime: mark all Go symbols called from assembly in other packages
This marks all Go symbols called from assembly in other packages with
"go:linkname" directives to ensure they get ABI wrappers.
Now that we have this go:linkname convention, this also removes the
abi0Syms definition in the runtime, which was used to give morestackc
an ABI0 wrapper. Instead, we now just mark morestackc with a
go:linkname directive.
This was tested with buildall.bash in the default configuration, with
-race, and with -gcflags=all=-d=ssa/intrinsics/off. Since I couldn't
test cgo on non-Linux configurations, I manually grepped for runtime
symbols in runtime/cgo.
Updates #31230.
Change-Id: I6c8aa56be2ca6802dfa2bf159e49c411b9071bf1
Reviewed-on: https://go-review.googlesource.com/c/go/+/179862
Run-TryBot: Austin Clements <austin@google.com>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Michael Knyszek <mknyszek@google.com>
Diffstat (limited to 'src/runtime/internal')
| -rw-r--r-- | src/runtime/internal/atomic/atomic_386.go | 4 | ||||
| -rw-r--r-- | src/runtime/internal/atomic/atomic_amd64x.go | 5 | ||||
| -rw-r--r-- | src/runtime/internal/atomic/atomic_mipsx.go | 7 | ||||
| -rw-r--r-- | src/runtime/internal/atomic/atomic_s390x.go | 7 | ||||
| -rw-r--r-- | src/runtime/internal/atomic/atomic_wasm.go | 18 |
5 files changed, 41 insertions, 0 deletions
diff --git a/src/runtime/internal/atomic/atomic_386.go b/src/runtime/internal/atomic/atomic_386.go index 143cd45e61..d7f82cc752 100644 --- a/src/runtime/internal/atomic/atomic_386.go +++ b/src/runtime/internal/atomic/atomic_386.go @@ -8,6 +8,10 @@ package atomic import "unsafe" +// Export some functions via linkname to assembly in sync/atomic. +//go:linkname Load +//go:linkname Loadp + //go:nosplit //go:noinline func Load(ptr *uint32) uint32 { diff --git a/src/runtime/internal/atomic/atomic_amd64x.go b/src/runtime/internal/atomic/atomic_amd64x.go index b7e01a3ad5..31c1636b2e 100644 --- a/src/runtime/internal/atomic/atomic_amd64x.go +++ b/src/runtime/internal/atomic/atomic_amd64x.go @@ -8,6 +8,11 @@ package atomic import "unsafe" +// Export some functions via linkname to assembly in sync/atomic. +//go:linkname Load +//go:linkname Loadp +//go:linkname Load64 + //go:nosplit //go:noinline func Load(ptr *uint32) uint32 { diff --git a/src/runtime/internal/atomic/atomic_mipsx.go b/src/runtime/internal/atomic/atomic_mipsx.go index 210fc27d9b..6e39262c15 100644 --- a/src/runtime/internal/atomic/atomic_mipsx.go +++ b/src/runtime/internal/atomic/atomic_mipsx.go @@ -4,6 +4,13 @@ // +build mips mipsle +// Export some functions via linkname to assembly in sync/atomic. +//go:linkname Xadd64 +//go:linkname Xchg64 +//go:linkname Cas64 +//go:linkname Load64 +//go:linkname Store64 + package atomic import ( diff --git a/src/runtime/internal/atomic/atomic_s390x.go b/src/runtime/internal/atomic/atomic_s390x.go index 5a1f411ca1..f6758082a9 100644 --- a/src/runtime/internal/atomic/atomic_s390x.go +++ b/src/runtime/internal/atomic/atomic_s390x.go @@ -6,6 +6,13 @@ package atomic import "unsafe" +// Export some functions via linkname to assembly in sync/atomic. +//go:linkname Load +//go:linkname Loadp +//go:linkname Load64 +//go:linkname Store +//go:linkname Store64 + //go:nosplit //go:noinline func Load(ptr *uint32) uint32 { diff --git a/src/runtime/internal/atomic/atomic_wasm.go b/src/runtime/internal/atomic/atomic_wasm.go index 9ce4892cb6..0731763ac1 100644 --- a/src/runtime/internal/atomic/atomic_wasm.go +++ b/src/runtime/internal/atomic/atomic_wasm.go @@ -5,6 +5,24 @@ // TODO(neelance): implement with actual atomic operations as soon as threads are available // See https://github.com/WebAssembly/design/issues/1073 +// Export some functions via linkname to assembly in sync/atomic. +//go:linkname Load +//go:linkname Loadp +//go:linkname Load64 +//go:linkname Loaduintptr +//go:linkname Xadd +//go:linkname Xadd64 +//go:linkname Xadduintptr +//go:linkname Xchg +//go:linkname Xchg64 +//go:linkname Xchguintptr +//go:linkname Cas +//go:linkname Cas64 +//go:linkname Casuintptr +//go:linkname Store +//go:linkname Store64 +//go:linkname Storeuintptr + package atomic import "unsafe" |
