mirror of
https://github.com/golang/go.git
synced 2025-05-30 11:51:34 +00:00
misc/cgo/testcarchive: use -no-pie where needed
Starting in gcc 6, -pie is passed to the linker by default on some platforms, including ppc64le. If the objects being linked are not built for -pie then in some cases the executable could be in error. To avoid that problem, -no-pie should be used with gcc to override the default -pie option and generate a correct executable that can be run without error. Fixes #22126 Change-Id: I4a052bba8b9b3bd6706f5d27ca9a7cebcb504c95 Reviewed-on: https://go-review.googlesource.com/70072 Run-TryBot: Lynn Boger <laboger@linux.vnet.ibm.com> TryBot-Result: Gobot Gobot <gobot@golang.org> Reviewed-by: Ian Lance Taylor <iant@golang.org>
This commit is contained in:
parent
ecfa7375e4
commit
c15c44ec48
@ -6,6 +6,7 @@ package carchive_test
|
||||
|
||||
import (
|
||||
"bufio"
|
||||
"bytes"
|
||||
"debug/elf"
|
||||
"fmt"
|
||||
"io/ioutil"
|
||||
@ -609,9 +610,26 @@ func TestCompileWithoutShared(t *testing.T) {
|
||||
}
|
||||
|
||||
exe := "./testnoshared" + exeSuffix
|
||||
ccArgs := append(cc, "-o", exe, "main5.c", "libgo2.a")
|
||||
|
||||
// In some cases, -no-pie is needed here, but not accepted everywhere. First try
|
||||
// if -no-pie is accepted. See #22126.
|
||||
ccArgs := append(cc, "-o", exe, "-no-pie", "main5.c", "libgo2.a")
|
||||
t.Log(ccArgs)
|
||||
out, err = exec.Command(ccArgs[0], ccArgs[1:]...).CombinedOutput()
|
||||
|
||||
// If -no-pie unrecognized, try -nopie if this is possibly clang
|
||||
if err != nil && bytes.Contains(out, []byte("unknown")) && !strings.Contains(cc[0], "gcc") {
|
||||
ccArgs = append(cc, "-o", exe, "-nopie", "main5.c", "libgo2.a")
|
||||
t.Log(ccArgs)
|
||||
out, err = exec.Command(ccArgs[0], ccArgs[1:]...).CombinedOutput()
|
||||
}
|
||||
|
||||
// Don't use either -no-pie or -nopie
|
||||
if err != nil && bytes.Contains(out, []byte("unrecognized")) {
|
||||
ccArgs := append(cc, "-o", exe, "main5.c", "libgo2.a")
|
||||
t.Log(ccArgs)
|
||||
out, err = exec.Command(ccArgs[0], ccArgs[1:]...).CombinedOutput()
|
||||
}
|
||||
t.Logf("%s", out)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
|
Loading…
x
Reference in New Issue
Block a user