mirror of
https://github.com/golang/go.git
synced 2025-12-08 06:10:04 +00:00
cmd/cgo/internal/testsanitizers: disable ASLR for TSAN tests
Ever since we had to upgrade from our COS image, we've been experiencing TSAN test failures. My best guess is that the ASLR randomization entropy increased, causing TSAN to fail. TSAN already re-execs itself in Clang 18+ with ASLR disabled, so just execute the tests with ASLR disabled on Linux. Fixes #59418. Change-Id: Icb4536ddf0f2f5e7850734564d40f5a208ab8d01 Cq-Include-Trybots: luci.golang.try:gotip-linux-386,gotip-linux-386-clang15,gotip-linux-amd64-clang15,gotip-linux-amd64-boringcrypto,gotip-linux-amd64-aliastypeparams,gotip-linux-amd64-asan-clang15,gotip-linux-amd64-msan-clang15,gotip-linux-amd64-goamd64v3 Reviewed-on: https://go-review.googlesource.com/c/go/+/623956 Reviewed-by: Ian Lance Taylor <iant@golang.org> Reviewed-by: Keith Randall <khr@google.com> LUCI-TryBot-Result: Go LUCI <golang-scoped@luci-project-accounts.iam.gserviceaccount.com>
This commit is contained in:
parent
7240c6cb97
commit
b813e6fd73
2 changed files with 22 additions and 2 deletions
|
|
@ -11,6 +11,7 @@ import (
|
|||
"internal/platform"
|
||||
"internal/testenv"
|
||||
"os"
|
||||
"os/exec"
|
||||
"strings"
|
||||
"testing"
|
||||
)
|
||||
|
|
@ -90,7 +91,16 @@ func TestShared(t *testing.T) {
|
|||
cmd.Args = append(cmd.Args, "-o", dstBin, cSrc, lib)
|
||||
mustRun(t, cmd)
|
||||
|
||||
cmd = hangProneCmd(dstBin)
|
||||
cmdArgs := []string{dstBin}
|
||||
if tc.sanitizer == "thread" && GOOS == "linux" {
|
||||
// Disable ASLR for TSAN. See #59418.
|
||||
arch, err := exec.Command("uname", "-m").Output()
|
||||
if err != nil {
|
||||
t.Fatalf("failed to run `uname -m`: %v", err)
|
||||
}
|
||||
cmdArgs = []string{"setarch", strings.TrimSpace(string(arch)), "-R", dstBin}
|
||||
}
|
||||
cmd = hangProneCmd(cmdArgs[0], cmdArgs[1:]...)
|
||||
replaceEnv(cmd, "LD_LIBRARY_PATH", ".")
|
||||
mustRun(t, cmd)
|
||||
})
|
||||
|
|
|
|||
|
|
@ -8,6 +8,7 @@ package sanitizers_test
|
|||
|
||||
import (
|
||||
"internal/testenv"
|
||||
"os/exec"
|
||||
"strings"
|
||||
"testing"
|
||||
)
|
||||
|
|
@ -68,7 +69,16 @@ func TestTSAN(t *testing.T) {
|
|||
outPath := dir.Join(name)
|
||||
mustRun(t, config.goCmd("build", "-o", outPath, srcPath(tc.src)))
|
||||
|
||||
cmd := hangProneCmd(outPath)
|
||||
cmdArgs := []string{outPath}
|
||||
if goos == "linux" {
|
||||
// Disable ASLR. See #59418.
|
||||
arch, err := exec.Command("uname", "-m").Output()
|
||||
if err != nil {
|
||||
t.Fatalf("failed to run `uname -m`: %v", err)
|
||||
}
|
||||
cmdArgs = []string{"setarch", strings.TrimSpace(string(arch)), "-R", outPath}
|
||||
}
|
||||
cmd := hangProneCmd(cmdArgs[0], cmdArgs[1:]...)
|
||||
if tc.needsRuntime {
|
||||
config.skipIfRuntimeIncompatible(t)
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue