From f4e32aeed18dadb077dc5458b03a812234390046 Mon Sep 17 00:00:00 2001 From: Elias Naur Date: Wed, 16 Oct 2019 10:20:12 +0200 Subject: [PATCH] cmd/link/internal/ld: remove flags incompatible with -fembed-bitcode The flags -headerpad, -Wl,-no_pie and -pagezero_size are incompatible with the -fembed-bitcode flag used by `gomobile build`. Than McIntosh suggested we might not need the offending flags; this change removes the flags on darwin/arm64 and -headerpad, -pagezero_size on darwin/arm. The -Wl,-no_pie flag is left for darwin/arm because linking fails without it: ld: warning: PIE disabled. Absolute addressing (perhaps -mdynamic-no-pic) not allowed in code signed PIE, but used in _runtime.rodata from /var/folders/qq/qxn86k813bn9fjxydm095rxw0000gp/T/workdir-host-darwin-amd64-zenly-ios/tmp/go-link-225285265/go.o. To fix this warning, don't compile with -mdynamic-no-pic or link with -Wl,-no_pie Discussion: https://groups.google.com/d/msg/golang-dev/U1jK3xmmGAk/j0_ty46EDAAJ I've verified the CL on the builders, built the "flappy" example from gomobile with `gomobile build`, and verified that flappy runs on an iPhone 5S. Updates #32963 Change-Id: I783abc93ccf3c1d2b7ca00144b7164ba223d3529 Reviewed-on: https://go-review.googlesource.com/c/go/+/201358 Reviewed-by: Cherry Zhang --- src/cmd/link/internal/ld/lib.go | 17 ++++++++--------- 1 file changed, 8 insertions(+), 9 deletions(-) diff --git a/src/cmd/link/internal/ld/lib.go b/src/cmd/link/internal/ld/lib.go index 308d506fc3..9d99aa6f28 100644 --- a/src/cmd/link/internal/ld/lib.go +++ b/src/cmd/link/internal/ld/lib.go @@ -1169,13 +1169,13 @@ func (ctxt *Link) hostlink() { switch ctxt.HeadType { case objabi.Hdarwin: - argv = append(argv, "-Wl,-headerpad,1144") + if !ctxt.Arch.InFamily(sys.ARM, sys.ARM64) { + // -headerpad is incompatible with -fembed-bitcode. + argv = append(argv, "-Wl,-headerpad,1144") + } if ctxt.DynlinkingGo() && !ctxt.Arch.InFamily(sys.ARM, sys.ARM64) { argv = append(argv, "-Wl,-flat_namespace") } - if ctxt.BuildMode == BuildModeExe && !ctxt.Arch.InFamily(sys.ARM64) { - argv = append(argv, "-Wl,-no_pie") - } case objabi.Hopenbsd: argv = append(argv, "-Wl,-nopie") case objabi.Hwindows: @@ -1209,11 +1209,10 @@ func (ctxt *Link) hostlink() { switch ctxt.BuildMode { case BuildModeExe: if ctxt.HeadType == objabi.Hdarwin { - if ctxt.Arch.Family == sys.ARM64 { - // __PAGEZERO segment size determined empirically. - // XCode 9.0.1 successfully uploads an iOS app with this value. - argv = append(argv, "-Wl,-pagezero_size,100000000") - } else { + if ctxt.Arch.Family != sys.ARM64 { + argv = append(argv, "-Wl,-no_pie") + } + if !ctxt.Arch.InFamily(sys.ARM, sys.ARM64) { argv = append(argv, "-Wl,-pagezero_size,4000000") } } -- 2.50.0