aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNick Lewycky <nicholas@mxc.ca>2011-11-15 00:14:04 +0000
committerNick Lewycky <nicholas@mxc.ca>2011-11-15 00:14:04 +0000
commitec381a4183f70122305f810c6b11b8f0e3bf83c0 (patch)
tree662b078e2368794cc38cff1b66b7170986d6d320
parentdd47e0b5d4850fede4b2581c41f1e0a5eff5f05a (diff)
Fix linking for some users who already have tsan enabled code and are trying to
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
-rw-r--r--include/llvm/Support/Compiler.h7
-rw-r--r--lib/Support/Valgrind.cpp12
2 files changed, 13 insertions, 6 deletions
diff --git a/include/llvm/Support/Compiler.h b/include/llvm/Support/Compiler.h
index cd2e4eb997..14b55c147f 100644
--- a/include/llvm/Support/Compiler.h
+++ b/include/llvm/Support/Compiler.h
@@ -62,11 +62,18 @@
#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>);
diff --git a/lib/Support/Valgrind.cpp b/lib/Support/Valgrind.cpp
index 078d705183..46d93a26ef 100644
--- a/lib/Support/Valgrind.cpp
+++ b/lib/Support/Valgrind.cpp
@@ -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) {}
}