aboutsummaryrefslogtreecommitdiff
path: root/src/cmd/link/internal/ld/lib.go
diff options
context:
space:
mode:
authorFilippo Valsorda <filippo@golang.org>2020-04-08 17:39:57 -0400
committerFilippo Valsorda <filippo@golang.org>2020-04-08 17:48:41 -0400
commite067ce5225300a87ae6fe3c48e73102f6fa9368d (patch)
tree3b9335e0023a30f50c3261545019a2f9bb1bab97 /src/cmd/link/internal/ld/lib.go
parent79284c28734bf854f44106835b5578ead75eb547 (diff)
parent9baafabac9a84813a336f068862207d2bb06d255 (diff)
downloadgo-e067ce5225300a87ae6fe3c48e73102f6fa9368d.tar.gz
go-e067ce5225300a87ae6fe3c48e73102f6fa9368d.zip
[dev.boringcrypto] all: merge master into dev.boringcrypto
Change-Id: I2dcec316fd08d91db4183fb9d3b9afde65cc248f
Diffstat (limited to 'src/cmd/link/internal/ld/lib.go')
-rw-r--r--src/cmd/link/internal/ld/lib.go22
1 files changed, 16 insertions, 6 deletions
diff --git a/src/cmd/link/internal/ld/lib.go b/src/cmd/link/internal/ld/lib.go
index 2ce2cf0152..7f1b4b02ef 100644
--- a/src/cmd/link/internal/ld/lib.go
+++ b/src/cmd/link/internal/ld/lib.go
@@ -101,6 +101,7 @@ type Arch struct {
Minalign int
Dwarfregsp int
Dwarfreglr int
+ Androiddynld string
Linuxdynld string
Freebsddynld string
Netbsddynld string
@@ -409,9 +410,6 @@ func (ctxt *Link) loadlib() {
}
// load internal packages, if not already
- if ctxt.Arch.Family == sys.ARM {
- loadinternal(ctxt, "math")
- }
if *flagRace {
loadinternal(ctxt, "runtime/race")
}
@@ -1261,8 +1259,20 @@ func (ctxt *Link) hostlink() {
}
}
case BuildModePIE:
- // ELF.
- if ctxt.HeadType != objabi.Hdarwin && ctxt.HeadType != objabi.Haix {
+ switch ctxt.HeadType {
+ case objabi.Hdarwin, objabi.Haix:
+ case objabi.Hwindows:
+ // Enable ASLR.
+ argv = append(argv, "-Wl,--dynamicbase")
+ // enable high-entropy ASLR on 64-bit.
+ if ctxt.Arch.PtrSize >= 8 {
+ argv = append(argv, "-Wl,--high-entropy-va")
+ }
+ // Work around binutils limitation that strips relocation table for dynamicbase.
+ // See https://sourceware.org/bugzilla/show_bug.cgi?id=19011
+ argv = append(argv, "-Wl,--export-all-symbols")
+ default:
+ // ELF.
if ctxt.UseRelro() {
argv = append(argv, "-Wl,-z,relro")
}
@@ -1314,7 +1324,7 @@ func (ctxt *Link) hostlink() {
// from the beginning of the section (like sym.STYPE).
argv = append(argv, "-Wl,-znocopyreloc")
- if ctxt.Arch.InFamily(sys.ARM, sys.ARM64) && (objabi.GOOS == "linux" || objabi.GOOS == "android") {
+ if ctxt.Arch.InFamily(sys.ARM, sys.ARM64) && objabi.GOOS == "linux" {
// On ARM, the GNU linker will generate COPY relocations
// even with -znocopyreloc set.
// https://sourceware.org/bugzilla/show_bug.cgi?id=19962