]> Cypherpunks.ru repositories - gostls13.git/commitdiff
cmd/link: explicitly disable PIE for windows/amd64 -race mode
authorThan McIntosh <thanm@google.com>
Fri, 1 Jul 2022 12:39:12 +0000 (08:39 -0400)
committerThan McIntosh <thanm@google.com>
Thu, 7 Jul 2022 14:33:55 +0000 (14:33 +0000)
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 <cherryyz@google.com>
TryBot-Result: Gopher Robot <gobot@golang.org>
Run-TryBot: Than McIntosh <thanm@google.com>
Reviewed-by: Alex Brainman <alex.brainman@gmail.com>
src/cmd/link/internal/ld/lib.go

index 565ff9d6349b83dd9371f56c656720f1d7f17a65..18910ddb850856e52d6bddd3113617739dc8d5cc 100644 (file)
@@ -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.