From: Than McIntosh Date: Tue, 15 Jun 2021 12:01:54 +0000 (-0400) Subject: cmd/link: set correct flags in .dynamic for PIE buildmode X-Git-Tag: go1.17rc1~96 X-Git-Url: http://www.git.cypherpunks.su/?a=commitdiff_plain;h=723f199edd;p=gostls13.git cmd/link: set correct flags in .dynamic for PIE buildmode For internal linking, when generating a PIE binary, set the proper .dynamic section flags to mark the binary as position-independent. Fixes #46747. Change-Id: I2b899148c6d06f92c9d12257a9761278b4236dfc Reviewed-on: https://go-review.googlesource.com/c/go/+/328089 Run-TryBot: Than McIntosh TryBot-Result: Go Bot Reviewed-by: Ian Lance Taylor Reviewed-by: Cherry Mui Trust: Than McIntosh --- diff --git a/src/cmd/link/internal/ld/elf.go b/src/cmd/link/internal/ld/elf.go index 6f81e74da2..81011638bc 100644 --- a/src/cmd/link/internal/ld/elf.go +++ b/src/cmd/link/internal/ld/elf.go @@ -950,6 +950,11 @@ func elfdynhash(ctxt *Link) { } s = ldr.CreateSymForUpdate(".dynamic", 0) + if ctxt.BuildMode == BuildModePIE { + // https://github.com/bminor/glibc/blob/895ef79e04a953cac1493863bcae29ad85657ee1/elf/elf.h#L986 + const DTFLAGS_1_PIE = 0x08000000 + Elfwritedynent(ctxt.Arch, s, elf.DT_FLAGS_1, uint64(DTFLAGS_1_PIE)) + } elfverneed = nfile if elfverneed != 0 { elfWriteDynEntSym(ctxt, s, elf.DT_VERNEED, gnuVersionR.Sym())