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."

llvm-svn: 144596
This commit is contained in:
Nick Lewycky 2011-11-15 00:14:04 +00:00
parent ec9b50d961
commit b2489b7484
2 changed files with 13 additions and 6 deletions

View File

@ -61,12 +61,19 @@
#define LLVM_ATTRIBUTE_READONLY #define LLVM_ATTRIBUTE_READONLY
#endif #endif
#if (__GNUC__ >= 4)
#define LLVM_ATTRIBUTE_WEAK __attribute__((__weak__))
#else
#define LLVM_ATTRIBUTE_WEAK
#endif
#if (__GNUC__ >= 4) #if (__GNUC__ >= 4)
#define BUILTIN_EXPECT(EXPR, VALUE) __builtin_expect((EXPR), (VALUE)) #define BUILTIN_EXPECT(EXPR, VALUE) __builtin_expect((EXPR), (VALUE))
#else #else
#define BUILTIN_EXPECT(EXPR, VALUE) (EXPR) #define BUILTIN_EXPECT(EXPR, VALUE) (EXPR)
#endif #endif
// C++ doesn't support 'extern template' of template specializations. GCC does, // C++ doesn't support 'extern template' of template specializations. GCC does,
// but requires __extension__ before it. In the header, use this: // but requires __extension__ before it. In the header, use this:
// EXTERN_TEMPLATE_INSTANTIATION(class foo<bar>); // EXTERN_TEMPLATE_INSTANTIATION(class foo<bar>);

View 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 // These functions require no implementation, tsan just looks at the arguments
// they're called with. // they're called with.
extern "C" { extern "C" {
void AnnotateHappensBefore(const char *file, int line, LLVM_ATTRIBUTE_WEAK void AnnotateHappensBefore(const char *file, int line,
const volatile void *cv) {} const volatile void *cv) {}
void AnnotateHappensAfter(const char *file, int line, LLVM_ATTRIBUTE_WEAK void AnnotateHappensAfter(const char *file, int line,
const volatile void *cv) {} const volatile void *cv) {}
void AnnotateIgnoreWritesBegin(const char *file, int line) {} LLVM_ATTRIBUTE_WEAK void AnnotateIgnoreWritesBegin(const char *file, int line){}
void AnnotateIgnoreWritesEnd(const char *file, int line) {} LLVM_ATTRIBUTE_WEAK void AnnotateIgnoreWritesEnd(const char *file, int line) {}
} }