diff options
author | Ian Lance Taylor <iant@golang.org> | 2017-07-24 10:13:25 -0700 |
---|---|---|
committer | Ian Lance Taylor <iant@golang.org> | 2017-07-24 17:50:57 +0000 |
commit | 6bb88fc280518150e31bf12744596467796a4528 (patch) | |
tree | 5050c9af6343771a8cf206b456320ee2841f8f90 | |
parent | 7c946c6d61a9ef0203fba73be6c462215f0e5795 (diff) | |
download | go-6bb88fc280518150e31bf12744596467796a4528.tar.gz go-6bb88fc280518150e31bf12744596467796a4528.zip |
cmd/link: use full link, not compile, to test for -no-?pie
This avoids an error from clang when using -nopie during compilation,
and permits us to check that the entire build succeeds.
Updates #21042
Change-Id: I2e6c7d5c97a85c223ed3288622bbb58ce33b8774
Reviewed-on: https://go-review.googlesource.com/50874
Run-TryBot: Ian Lance Taylor <iant@golang.org>
Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
-rw-r--r-- | src/cmd/link/internal/ld/lib.go | 8 |
1 files changed, 4 insertions, 4 deletions
diff --git a/src/cmd/link/internal/ld/lib.go b/src/cmd/link/internal/ld/lib.go index 381022081b..023410512c 100644 --- a/src/cmd/link/internal/ld/lib.go +++ b/src/cmd/link/internal/ld/lib.go @@ -1252,19 +1252,19 @@ func (l *Link) hostlink() { // toolchain if it is supported. if Buildmode == BuildmodeExe { src := filepath.Join(*flagTmpdir, "trivial.c") - if err := ioutil.WriteFile(src, []byte{}, 0666); err != nil { + if err := ioutil.WriteFile(src, []byte("int main() { return 0; }"), 0666); err != nil { Errorf(nil, "WriteFile trivial.c failed: %v", err) } // GCC uses -no-pie, clang uses -nopie. for _, nopie := range []string{"-no-pie", "-nopie"} { - cmd := exec.Command(argv[0], "-c", nopie, "trivial.c") + cmd := exec.Command(argv[0], nopie, "trivial.c") cmd.Dir = *flagTmpdir cmd.Env = append([]string{"LC_ALL=C"}, os.Environ()...) - out, _ := cmd.CombinedOutput() + out, err := cmd.CombinedOutput() // GCC says "unrecognized command line option ‘-no-pie’" // clang says "unknown argument: '-no-pie'" - supported := !bytes.Contains(out, []byte("unrecognized")) && !bytes.Contains(out, []byte("unknown")) + supported := err == nil && !bytes.Contains(out, []byte("unrecognized")) && !bytes.Contains(out, []byte("unknown")) if supported { argv = append(argv, nopie) break |