From: David Crawshaw Date: Sat, 16 Apr 2016 15:08:41 +0000 (-0400) Subject: cmd/link: use -znocopyreloc when dynamic linking X-Git-Tag: go1.7beta1~627 X-Git-Url: http://www.git.cypherpunks.su/?a=commitdiff_plain;h=3c8d6af8e02bbf230c2bef9f181d8ea393068299;p=gostls13.git cmd/link: use -znocopyreloc when dynamic linking On ARM, use the gold linker to avoid copy relocations. https://sourceware.org/bugzilla/show_bug.cgi?id=19962 Change-Id: Icf82a38d39495d4518812713b957a03a6652c728 Reviewed-on: https://go-review.googlesource.com/22141 Run-TryBot: David Crawshaw TryBot-Result: Gobot Gobot Reviewed-by: Ian Lance Taylor --- diff --git a/src/cmd/link/internal/ld/lib.go b/src/cmd/link/internal/ld/lib.go index a18098e7e7..56a3736310 100644 --- a/src/cmd/link/internal/ld/lib.go +++ b/src/cmd/link/internal/ld/lib.go @@ -1117,6 +1117,18 @@ func hostlink() { // because lazy PLT resolution can use large amounts of stack at // times we cannot allow it to do so. argv = append(argv, "-Wl,-znow") + + // Do not let the host linker generate COPY relocations. These + // can move symbols out of sections that rely on stable offsets + // from the beginning of the section (like STYPE). + argv = append(argv, "-Wl,-znocopyreloc") + + if SysArch.Family == sys.ARM { + // The GNU linker will generate COPY relocations on ARM + // even with -znocopyreloc set. Switch to gold. + // https://sourceware.org/bugzilla/show_bug.cgi?id=19962 + argv = append(argv, "-fuse-ld=gold") + } } if Iself && len(buildinfo) > 0 {