Split ubsan runtime into three pieces (clang part):
authorRichard Smith <richard-llvm@metafoo.co.uk>
Wed, 20 Mar 2013 23:49:07 +0000 (23:49 +0000)
committerRichard Smith <richard-llvm@metafoo.co.uk>
Wed, 20 Mar 2013 23:49:07 +0000 (23:49 +0000)
commitcff3cde28bc322cc34e6200f990a2eb3e0ea729a
tree6a5a10afb2fb6c47ac080b3e777d4f2a9868893a
parent71738cafe6723a65a53180d8290885ba1fe87dce
Split ubsan runtime into three pieces (clang part):
 * libclang_rt-san-* is sanitizer_common, and is linked in only if no other
   sanitizer runtime is present.
 * libclang_rt-ubsan-* is the piece of the runtime which doesn't depend on
   a C++ ABI library, and is always linked in.
 * libclang_rt-ubsan_cxx-* is the piece of the runtime which depends on a
   C++ ABI library, and is only linked in when linking a C++ binary.

This change also switches us to using -whole-archive for the ubsan runtime
(which is made possible by the above split), and switches us to only linking
the sanitizer runtime into the main binary and not into DSOs (which is made
possible by using -whole-archive).

The motivation for this is to only link a single copy of sanitizer_common
into any binary. This is becoming important now because we want to share
more state between multiple sanitizers in the same process (for instance,
we want a single shared output mutex).

The Darwin ubsan runtime is unchanged; because we use a DSO there, we don't
need this complexity.

llvm-svn: 177605
clang/lib/Driver/Tools.cpp
clang/runtime/compiler-rt/Makefile
clang/test/Driver/sanitizer-ld.c