[PATCH] D23638: [compiler-rt] Don't build ubsan cxxabi sources when unused

Francis Ricci via llvm-commits llvm-commits at lists.llvm.org
Thu Aug 18 09:40:29 PDT 2016


fjricci added a comment.

That was my original plan, so I was looking into why `APPLE` and `NOT APPLE` had to be different. I found this commit message from 2013 (clang r177605)

     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.


https://reviews.llvm.org/D23638





More information about the llvm-commits mailing list