From 0c7fcf6bd1fd8df2bfae3a482f1261886f6313c1 Mon Sep 17 00:00:00 2001 From: Than McIntosh Date: Fri, 1 Jul 2022 08:39:12 -0400 Subject: [PATCH] cmd/link: explicitly disable PIE for windows/amd64 -race mode Turn off PIE explicitly for windows/amd64 when -race is in effect, since at the moment the race detector runtime doesn't seem to handle PIE binaries correctly. Note that newer C compilers on windows produce PIE binaries by default, so the Go linker needs to explicitly turn off PIE when invoking the external linker in this case. Updates #53539. Change-Id: Ib990621f22cf61a5fa383584bab81d3dfd7552e8 Reviewed-on: https://go-review.googlesource.com/c/go/+/415676 Reviewed-by: Cherry Mui TryBot-Result: Gopher Robot Run-TryBot: Than McIntosh Reviewed-by: Alex Brainman --- src/cmd/link/internal/ld/lib.go | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/src/cmd/link/internal/ld/lib.go b/src/cmd/link/internal/ld/lib.go index 565ff9d634..18910ddb85 100644 --- a/src/cmd/link/internal/ld/lib.go +++ b/src/cmd/link/internal/ld/lib.go @@ -1426,10 +1426,23 @@ func (ctxt *Link) hostlink() { argv = append(argv, "-Wl,-pagezero_size,4000000") } } + if *flagRace && ctxt.HeadType == objabi.Hwindows { + // Current windows/amd64 race detector tsan support + // library can't handle PIE mode (see #53539 for more details). + // For now, explicitly disable PIE (since some compilers + // default to it) if -race is in effect. + argv = addASLRargs(argv, false) + } case BuildModePIE: switch ctxt.HeadType { case objabi.Hdarwin, objabi.Haix: case objabi.Hwindows: + if *flagAslr && *flagRace { + // Current windows/amd64 race detector tsan support + // library can't handle PIE mode (see #53539 for more details). + // Disable alsr if -race in effect. + *flagAslr = false + } argv = addASLRargs(argv, *flagAslr) default: // ELF. -- 2.50.0