[PATCH] D43676: [ubsan-minimal] Fix the ubsan_minimal debug build (COMPILER_RT_DEBUG=1) on macOS

Dan Liew via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Fri Feb 23 07:21:50 PST 2018


delcypher created this revision.
delcypher added reviewers: eugenis, vsk, kubamracek, filcab.
Herald added a subscriber: Sanitizers.

[ubsan-minimal] Fix the ubsan_minimal debug build (COMPILER_RT_DEBUG=1) on macOS.

`ubsan_minimal` makes use of the `_sanitizer::atomic_load` function.
This function uses the `DCHECK` macro which in debug builds will use
the `_sanitizer::CheckFailed` function.

This function is part of `sanitizer_common` but `ubsan_minimal` doesn't
use this so the implementation is missing which leads to link failures
on macOS when trying to link `libclang_rt.ubsan_minimal_osx_dynamic.dylib`.
This is in contrast to the BFD linker on Linux which doesn't seem to care
about the missing symbol.

A basic implementation of `_sanitizer::CheckFailed` has been added to
the `ubsan_minimal` debug build to avoid the link error. The
implementation could definitely be improved but I don't know which
functions can be used in this context so I decided to restrict myself to
functions only being used in `ubsan_minimal` already.


Repository:
  rCRT Compiler Runtime

https://reviews.llvm.org/D43676

Files:
  lib/ubsan_minimal/ubsan_minimal_handlers.cc


Index: lib/ubsan_minimal/ubsan_minimal_handlers.cc
===================================================================
--- lib/ubsan_minimal/ubsan_minimal_handlers.cc
+++ lib/ubsan_minimal/ubsan_minimal_handlers.cc
@@ -61,6 +61,20 @@
 static void abort_with_message(const char *) { abort(); }
 #endif
 
+#if SANITIZER_DEBUG
+namespace __sanitizer {
+// The DCHECK macro needs this symbol to be defined.
+void NORETURN CheckFailed(const char *file, int line, const char *cond, u64 v1,
+                          u64 v2) {
+  message("Sanitizer CHECK failed: ");
+  message(file);
+  message(":?? : "); // FIXME: Show line number.
+  message(cond);
+  abort();
+}
+} // namespace __sanitizer
+#endif
+
 #define INTERFACE extern "C" __attribute__((visibility("default")))
 
 // FIXME: add caller pc to the error message (possibly as "ubsan: error-type


-------------- next part --------------
A non-text attachment was scrubbed...
Name: D43676.135637.patch
Type: text/x-patch
Size: 849 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20180223/b610459f/attachment.bin>


More information about the llvm-commits mailing list