diff options
author | Cherry Mui <cherryyz@google.com> | 2021-11-19 16:36:03 -0500 |
---|---|---|
committer | Cherry Mui <cherryyz@google.com> | 2021-11-20 00:32:49 +0000 |
commit | 57aba325c8c34f3354abc24fca7bc9627949a1c8 (patch) | |
tree | df454d30406b794d7f52207cef0b412da5119ce6 /src/cmd/link | |
parent | b31dda8a2ad833ea5ec3c807119372b27cc0e782 (diff) | |
download | go-57aba325c8c34f3354abc24fca7bc9627949a1c8.tar.gz go-57aba325c8c34f3354abc24fca7bc9627949a1c8.zip |
cmd/link: exit early when -d is used on libc platforms
On platforms where we use libc for syscalls, we dynamically link
with libc and therefore dynamic linking cannot be disabled. Exit
early when -d is specified.
Update #42459.
Change-Id: I05abfe111df723b5ee512ceafef734e3804dd0a8
Reviewed-on: https://go-review.googlesource.com/c/go/+/365658
Trust: Cherry Mui <cherryyz@google.com>
Run-TryBot: Cherry Mui <cherryyz@google.com>
TryBot-Result: Go Bot <gobot@golang.org>
Reviewed-by: Than McIntosh <thanm@google.com>
Diffstat (limited to 'src/cmd/link')
-rw-r--r-- | src/cmd/link/internal/ld/main.go | 4 | ||||
-rw-r--r-- | src/cmd/link/internal/ld/target.go | 10 | ||||
-rw-r--r-- | src/cmd/link/internal/ld/xcoff.go | 4 |
3 files changed, 14 insertions, 4 deletions
diff --git a/src/cmd/link/internal/ld/main.go b/src/cmd/link/internal/ld/main.go index a1d86965e4..26f9db8ec4 100644 --- a/src/cmd/link/internal/ld/main.go +++ b/src/cmd/link/internal/ld/main.go @@ -172,6 +172,10 @@ func Main(arch *sys.Arch, theArch Arch) { usage() } + if *FlagD && ctxt.UsesLibc() { + Exitf("dynamic linking required on %s; -d flag cannot be used", buildcfg.GOOS) + } + checkStrictDups = *FlagStrictDups if !buildcfg.Experiment.RegabiWrappers { diff --git a/src/cmd/link/internal/ld/target.go b/src/cmd/link/internal/ld/target.go index f68de8fff1..58d45d1504 100644 --- a/src/cmd/link/internal/ld/target.go +++ b/src/cmd/link/internal/ld/target.go @@ -185,3 +185,13 @@ func (t *Target) mustSetHeadType() { func (t *Target) IsBigEndian() bool { return t.Arch.ByteOrder == binary.BigEndian } + +func (t *Target) UsesLibc() bool { + t.mustSetHeadType() + switch t.HeadType { + case objabi.Haix, objabi.Hdarwin, objabi.Hopenbsd, objabi.Hsolaris, objabi.Hwindows: + // platforms where we use libc for syscalls. + return true + } + return false +} diff --git a/src/cmd/link/internal/ld/xcoff.go b/src/cmd/link/internal/ld/xcoff.go index aba6138c83..aaddf19d16 100644 --- a/src/cmd/link/internal/ld/xcoff.go +++ b/src/cmd/link/internal/ld/xcoff.go @@ -1290,10 +1290,6 @@ func Xcoffadddynrel(target *Target, ldr *loader.Loader, syms *ArchSyms, s loader } func (ctxt *Link) doxcoff() { - if *FlagD { - // All XCOFF files have dynamic symbols because of the syscalls. - Exitf("-d is not available on AIX") - } ldr := ctxt.loader // TOC |