Fix linking for some users who already have tsan enabled code and are trying to
authorNick Lewycky <nicholas@mxc.ca>
Tue, 15 Nov 2011 00:14:04 +0000 (00:14 +0000)
committerNick Lewycky <nicholas@mxc.ca>
Tue, 15 Nov 2011 00:14:04 +0000 (00:14 +0000)
link it against llvm code, by making our definitions weak. "Some users."

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@144596 91177308-0d34-0410-b5e6-96231b3b80d8

include/llvm/Support/Compiler.h
lib/Support/Valgrind.cpp

index cd2e4eb997e983078ef88a1771367b4f223fbd14..14b55c147fe8ef49c7146933f8058c4be7771175 100644 (file)
 #define LLVM_ATTRIBUTE_READONLY
 #endif
 
+#if (__GNUC__ >= 4)
+#define LLVM_ATTRIBUTE_WEAK __attribute__((__weak__))
+#else
+#define LLVM_ATTRIBUTE_WEAK
+#endif
+
 #if (__GNUC__ >= 4)
 #define BUILTIN_EXPECT(EXPR, VALUE) __builtin_expect((EXPR), (VALUE))
 #else
 #define BUILTIN_EXPECT(EXPR, VALUE) (EXPR)
 #endif
 
+
 // C++ doesn't support 'extern template' of template specializations.  GCC does,
 // but requires __extension__ before it.  In the header, use this:
 //   EXTERN_TEMPLATE_INSTANTIATION(class foo<bar>);
index 078d705183d05b89fe440fc1adf634104f678dec..46d93a26ef6638a85dced02457ec0679233994b5 100644 (file)
@@ -56,10 +56,10 @@ void llvm::sys::ValgrindDiscardTranslations(const void *Addr, size_t Len) {
 // These functions require no implementation, tsan just looks at the arguments
 // they're called with.
 extern "C" {
-void AnnotateHappensBefore(const char *file, int line,
-                           const volatile void *cv) {}
-void AnnotateHappensAfter(const char *file, int line,
-                          const volatile void *cv) {}
-void AnnotateIgnoreWritesBegin(const char *file, int line) {}
-void AnnotateIgnoreWritesEnd(const char *file, int line) {}
+LLVM_ATTRIBUTE_WEAK void AnnotateHappensBefore(const char *file, int line,
+                                               const volatile void *cv) {}
+LLVM_ATTRIBUTE_WEAK void AnnotateHappensAfter(const char *file, int line,
+                                              const volatile void *cv) {}
+LLVM_ATTRIBUTE_WEAK void AnnotateIgnoreWritesBegin(const char *file, int line){}
+LLVM_ATTRIBUTE_WEAK void AnnotateIgnoreWritesEnd(const char *file, int line) {}
 }