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.
For #59418.
Fixes #74726.
Change-Id: Icb4536ddf0f2f5e7850734564d40f5a208ab8d01
Cq-Include-Trybots: luci.golang.try:go1.23-linux-386,go1.23-linux-386-clang15,go1.23-linux-amd64-clang15,go1.23-linux-amd64-boringcrypto,go1.23-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>
(cherry picked from commit
b813e6fd73e0925ca57f5b3ff6b0d991bb2e5aea)
Reviewed-on: https://go-review.googlesource.com/c/go/+/690035
Reviewed-by: Michael Knyszek <mknyszek@google.com>
Reviewed-by: Dmitri Shuralyov <dmitshur@google.com>
"internal/platform"
"internal/testenv"
"os"
+ "os/exec"
"strings"
"testing"
)
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)
})
import (
"internal/testenv"
+ "os/exec"
"strings"
"testing"
)
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)
}