mirror of
https://github.com/golang/go
synced 2024-11-16 17:14:40 -07:00
cmd/link: link against libsynchronization.a for -race on windows
As of LLVM rev 41cb504b7c4b18ac15830107431a0c1eec73a6b2, the race detector runtime now refers to things in the windows synchronization library, hence when doing windows internal linking, at that library to the list of host archives that we visit. The tsan code that makes the reference is here:41cb504b7c/compiler-rt/lib/sanitizer_common/sanitizer_win.cpp (L48)
41cb504b7c/compiler-rt/lib/sanitizer_common/sanitizer_win.cpp (L834)
Note that libsynchronization.a is not guaranteed to be available on all windows systems, so in the external linking case, check for its existence before adding "-lsynchronization" to the external linker args. Updates #53539. Change-Id: I433c95c869915693d59e9c1082d5b8a11da1fc8c Reviewed-on: https://go-review.googlesource.com/c/go/+/413817 Reviewed-by: Cherry Mui <cherryyz@google.com> Run-TryBot: Than McIntosh <thanm@google.com>
This commit is contained in:
parent
f093cf90bf
commit
c3bea70d9b
@ -652,6 +652,11 @@ func loadWindowsHostArchives(ctxt *Link) {
|
||||
hostObject(ctxt, "crt2", p)
|
||||
}
|
||||
}
|
||||
if *flagRace {
|
||||
if p := ctxt.findLibPath("libsynchronization.a"); p != "none" {
|
||||
hostArchive(ctxt, p)
|
||||
}
|
||||
}
|
||||
if p := ctxt.findLibPath("libmingwex.a"); p != "none" {
|
||||
hostArchive(ctxt, p)
|
||||
}
|
||||
@ -1705,6 +1710,11 @@ func (ctxt *Link) hostlink() {
|
||||
p := writeGDBLinkerScript()
|
||||
argv = append(argv, "-Wl,-T,"+p)
|
||||
}
|
||||
if *flagRace {
|
||||
if p := ctxt.findLibPath("libsynchronization.a"); p != "libsynchronization.a" {
|
||||
argv = append(argv, "-lsynchronization")
|
||||
}
|
||||
}
|
||||
// libmingw32 and libmingwex have some inter-dependencies,
|
||||
// so must use linker groups.
|
||||
argv = append(argv, "-Wl,--start-group", "-lmingwex", "-lmingw32", "-Wl,--end-group")
|
||||
|
Loading…
Reference in New Issue
Block a user