[asan] add __asan_default_suppressions() hook
authorKostya Serebryany <kcc@google.com>
Wed, 25 Feb 2015 01:15:37 +0000 (01:15 +0000)
committerKostya Serebryany <kcc@google.com>
Wed, 25 Feb 2015 01:15:37 +0000 (01:15 +0000)
llvm-svn: 230419

compiler-rt/lib/asan/asan_suppressions.cc
compiler-rt/test/asan/TestCases/Linux/asan_default_suppressions.cc [new file with mode: 0644]

index ea40554..3f76e20 100644 (file)
@@ -31,11 +31,23 @@ static const char *kSuppressionTypes[] = {
     kInterceptorName, kInterceptorViaFunction, kInterceptorViaLibrary,
     kODRViolation};
 
+extern "C" {
+#if SANITIZER_SUPPORTS_WEAK_HOOKS
+SANITIZER_INTERFACE_ATTRIBUTE SANITIZER_WEAK_ATTRIBUTE
+const char *__asan_default_suppressions();
+#else
+// No week hooks, provide empty implementation.
+const char *__asan_default_suppressions() { return ""; }
+#endif  // SANITIZER_SUPPORTS_WEAK_HOOKS
+}  // extern "C"
+
 void InitializeSuppressions() {
   CHECK_EQ(nullptr, suppression_ctx);
   suppression_ctx = new (suppression_placeholder)  // NOLINT
       SuppressionContext(kSuppressionTypes, ARRAY_SIZE(kSuppressionTypes));
   suppression_ctx->ParseFromFile(flags()->suppressions);
+  if (&__asan_default_suppressions)
+    suppression_ctx->Parse(__asan_default_suppressions());
 }
 
 bool IsInterceptorSuppressed(const char *interceptor_name) {
diff --git a/compiler-rt/test/asan/TestCases/Linux/asan_default_suppressions.cc b/compiler-rt/test/asan/TestCases/Linux/asan_default_suppressions.cc
new file mode 100644 (file)
index 0000000..5ff59c1
--- /dev/null
@@ -0,0 +1,7 @@
+// Test that we use the suppressions from __asan_default_suppressions.
+// RUN: %clangxx_asan %s -o %t && not %run %t 2>&1 | FileCheck %s
+extern "C" {
+  const char *__asan_default_suppressions() { return "FooBar"; }
+}
+// CHECK: AddressSanitizer: failed to parse suppressions
+int main() {}