mirror of
https://github.com/golang/go
synced 2024-11-23 14:40:02 -07:00
cmd/link: do not pass -no-pie to host linker when -linkshared is passed
As the comment above the code I'm changing says, when building with -buildmode=exe, the default compiler flags produce code incompatible with PIE. But when -linkshared is passed, the default compiler flags are not used so this does not apply. And now I've found a system (linux/arm64 with glibc 2.27) where this combination of flags causes a problem, albeit for reasons I don't really understand, so stop passing -no-pie when -linkshared is passed. Change-Id: I412ec7941dc0cb89e6d1b171fc29288aadcb9f20 Reviewed-on: https://go-review.googlesource.com/104815 Run-TryBot: Michael Hudson-Doyle <michael.hudson@canonical.com> TryBot-Result: Gobot Gobot <gobot@golang.org> Reviewed-by: Ian Lance Taylor <iant@golang.org>
This commit is contained in:
parent
94ef1dafbd
commit
2d26a65f8f
@ -1266,7 +1266,7 @@ func (ctxt *Link) hostlink() {
|
|||||||
// does not work, the resulting programs will not run. See
|
// does not work, the resulting programs will not run. See
|
||||||
// issue #17847. To avoid this problem pass -no-pie to the
|
// issue #17847. To avoid this problem pass -no-pie to the
|
||||||
// toolchain if it is supported.
|
// toolchain if it is supported.
|
||||||
if ctxt.BuildMode == BuildModeExe {
|
if ctxt.BuildMode == BuildModeExe && !ctxt.linkShared {
|
||||||
src := filepath.Join(*flagTmpdir, "trivial.c")
|
src := filepath.Join(*flagTmpdir, "trivial.c")
|
||||||
if err := ioutil.WriteFile(src, []byte("int main() { return 0; }"), 0666); err != nil {
|
if err := ioutil.WriteFile(src, []byte("int main() { return 0; }"), 0666); err != nil {
|
||||||
Errorf(nil, "WriteFile trivial.c failed: %v", err)
|
Errorf(nil, "WriteFile trivial.c failed: %v", err)
|
||||||
|
Loading…
Reference in New Issue
Block a user