aboutsummaryrefslogtreecommitdiff
path: root/src/cmd/link
diff options
context:
space:
mode:
authorJoel Sing <joel@sing.id.au>2023-04-14 05:47:36 +1000
committerJoel Sing <joel@sing.id.au>2023-04-14 19:17:15 +0000
commitdd53a439206e9b4bf194eb00fb28577a03d86df5 (patch)
tree3ad3825c3629e72f2d90068c5eab7d18750199f3 /src/cmd/link
parent35ec948de766e7e8854b95edda3a0bb4723a63ec (diff)
downloadgo-dd53a439206e9b4bf194eb00fb28577a03d86df5.tar.xz
cmd/link/internal/ld: disable execute-only for external linking on openbsd/arm64
The Go arm64 assembler places constants into the text section of a binary. OpenBSD 7.3 enabled xonly by default on OpenBSD/arm64. This means that any externally linked Go binary now segfaults. Disable execute-only when invoking the external linker on openbsd/arm64, in order to work around this issue. Updates #59615 Change-Id: I1a291293da3c6e4409b21873d066ea15e9bfe280 Reviewed-on: https://go-review.googlesource.com/c/go/+/484555 TryBot-Result: Gopher Robot <gobot@golang.org> Reviewed-by: Ian Lance Taylor <iant@google.com> Reviewed-by: Aaron Bieber <deftly@gmail.com> Run-TryBot: Joel Sing <joel@sing.id.au> Reviewed-by: Than McIntosh <thanm@google.com>
Diffstat (limited to 'src/cmd/link')
-rw-r--r--src/cmd/link/internal/ld/lib.go6
1 files changed, 6 insertions, 0 deletions
diff --git a/src/cmd/link/internal/ld/lib.go b/src/cmd/link/internal/ld/lib.go
index b2a7daba23..c88a955a0c 100644
--- a/src/cmd/link/internal/ld/lib.go
+++ b/src/cmd/link/internal/ld/lib.go
@@ -1407,6 +1407,12 @@ func (ctxt *Link) hostlink() {
case objabi.Hopenbsd:
argv = append(argv, "-Wl,-nopie")
argv = append(argv, "-pthread")
+ if ctxt.Arch.InFamily(sys.ARM64) {
+ // Disable execute-only on openbsd/arm64 - the Go arm64 assembler
+ // currently stores constants in the text section rather than in rodata.
+ // See issue #59615.
+ argv = append(argv, "-Wl,--no-execute-only")
+ }
case objabi.Hwindows:
if windowsgui {
argv = append(argv, "-mwindows")