Windows runtimes and compiler-rt and ASAN libraries

classic Classic list List threaded Threaded
1 message Options
Reply | Threaded
Open this post in threaded view
|

Windows runtimes and compiler-rt and ASAN libraries

Matthieu Brucher via cfe-dev
Hey all,

I recently tried to use ASAN on Windows again. I noticed some issues regarding
Windows runtimes and would like to get some insight on that:

a) The compiler-rt ASAN libs as provided for Windows from [1] are linked
against the static Windows runtime (/MT). Would it be possible to also include
versions for the compiler-rt libs linked against the dynamic runtime (/MD)?
This would greatly simplify getting ASAN up and running for projects that use
e.g. Qt which is usually consumed as a dynamic library.

[1]: http://releases.llvm.org/download.html 

b) I notice that it's impossible to compile compiler-rt against the debug
variants (/MTd or /MDd), cf. [2]. Is this a conceptual limitation that cannot
ever be implemented? I.e. are features in the debug runtime negatively
influencing the functionality of ASAN, making this impossible to work? Or is
it "simply" a matter of work that needs to be done, i.e. adding the
corresponding interceptors for the debug runtime?

[2]: https://github.com/llvm-mirror/compiler-rt/blob/master/lib/asan/
asan_win.cc#L214

c) Using ASAN via `clang.exe` or `clang-cl.exe` on single-file demo
applications is straight forward, as the linker will be fed with the correct
arguments when enabling `-fsanitize=address`. But when trying to use ASAN on
Windows for real-world applications that use e.g. CMake or QMake, I am running
into the following issue: These build systems separate the object file
creation and linking phase. Then, when using the Visual Studio linker
(`link.exe`) for linking, that tool of course does not (yet?) know anything
about the sanitizers and compiler-rt. So while I can simply add the `-
fsanitize=address` argument to the invocation of `clang-cl.exe`, one needs to
find and specify the correct arguments to pass to `link.exe` too. This latter
step is not straight forward at all. How do people cope with this? Is there
something I'm missing, like a `clang-link.exe` that understands `-
fsanitize=address`?

Right now, I have to hardcode these arguments manually:

  /LIBPATH:C:/tools/clang/lib/clang/6.0.0/lib/windows/
  -lclang_rt.asan_dynamic-x86_64
  -lclang_rt.asan_dynamic_runtime_thunk-x86_64

The path could probably be obtained automatically by joining `llvm-config --
lib`, `llvm-config --version` and some hard coded strings. But could we maybe
get an `llvm-config --asan-ldflags` or similar?

Thanks

--
Milian Wolff
[hidden email]
http://milianw.de
_______________________________________________
cfe-dev mailing list
[hidden email]
http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-dev

signature.asc (849 bytes) Download Attachment