forked from OSchip/llvm-project
Support: Clean up TSan annotations.
Remove support for Valgrind-based TSan, which hasn't been maintained for a few years. We now use the TSan annotations only if LLVM is compiled with -fsanitize=thread. We no longer need the weak function definitions as we are guaranteed that our program is linked directly with the TSan runtime. Differential Revision: http://reviews.llvm.org/D12121 llvm-svn: 245374
This commit is contained in:
parent
2ad6ac5461
commit
4cfa086df2
|
@ -26,7 +26,7 @@
|
|||
#include "llvm/PassInfo.h"
|
||||
#include "llvm/PassRegistry.h"
|
||||
#include "llvm/Support/Atomic.h"
|
||||
#include "llvm/Support/Valgrind.h"
|
||||
#include "llvm/Support/Compiler.h"
|
||||
#include <vector>
|
||||
|
||||
namespace llvm {
|
||||
|
|
|
@ -337,6 +337,45 @@
|
|||
# define LLVM_ADDRESS_SANITIZER_BUILD 0
|
||||
#endif
|
||||
|
||||
/// \macro LLVM_THREAD_SANITIZER_BUILD
|
||||
/// \brief Whether LLVM itself is built with ThreadSanitizer instrumentation.
|
||||
#if __has_feature(thread_sanitizer) || defined(__SANITIZE_THREAD__)
|
||||
# define LLVM_THREAD_SANITIZER_BUILD 1
|
||||
#else
|
||||
# define LLVM_THREAD_SANITIZER_BUILD 0
|
||||
#endif
|
||||
|
||||
#if LLVM_THREAD_SANITIZER_BUILD
|
||||
// Thread Sanitizer is a tool that finds races in code.
|
||||
// See http://code.google.com/p/data-race-test/wiki/DynamicAnnotations .
|
||||
// tsan detects these exact functions by name.
|
||||
extern "C" {
|
||||
void AnnotateHappensAfter(const char *file, int line, const volatile void *cv);
|
||||
void AnnotateHappensBefore(const char *file, int line, const volatile void *cv);
|
||||
void AnnotateIgnoreWritesBegin(const char *file, int line);
|
||||
void AnnotateIgnoreWritesEnd(const char *file, int line);
|
||||
}
|
||||
|
||||
// This marker is used to define a happens-before arc. The race detector will
|
||||
// infer an arc from the begin to the end when they share the same pointer
|
||||
// argument.
|
||||
# define TsanHappensBefore(cv) AnnotateHappensBefore(__FILE__, __LINE__, cv)
|
||||
|
||||
// This marker defines the destination of a happens-before arc.
|
||||
# define TsanHappensAfter(cv) AnnotateHappensAfter(__FILE__, __LINE__, cv)
|
||||
|
||||
// Ignore any races on writes between here and the next TsanIgnoreWritesEnd.
|
||||
# define TsanIgnoreWritesBegin() AnnotateIgnoreWritesBegin(__FILE__, __LINE__)
|
||||
|
||||
// Resume checking for racy writes.
|
||||
# define TsanIgnoreWritesEnd() AnnotateIgnoreWritesEnd(__FILE__, __LINE__)
|
||||
#else
|
||||
# define TsanHappensBefore(cv)
|
||||
# define TsanHappensAfter(cv)
|
||||
# define TsanIgnoreWritesBegin()
|
||||
# define TsanIgnoreWritesEnd()
|
||||
#endif
|
||||
|
||||
/// \brief Mark debug helper function definitions like dump() that should not be
|
||||
/// stripped from debug builds.
|
||||
// FIXME: Move this to a private config.h as it's not usable in public headers.
|
||||
|
|
|
@ -15,8 +15,8 @@
|
|||
#define LLVM_SUPPORT_MANAGEDSTATIC_H
|
||||
|
||||
#include "llvm/Support/Atomic.h"
|
||||
#include "llvm/Support/Compiler.h"
|
||||
#include "llvm/Support/Threading.h"
|
||||
#include "llvm/Support/Valgrind.h"
|
||||
|
||||
namespace llvm {
|
||||
|
||||
|
|
|
@ -20,17 +20,6 @@
|
|||
#include "llvm/Support/Compiler.h"
|
||||
#include <stddef.h>
|
||||
|
||||
#if LLVM_ENABLE_THREADS != 0 && !defined(NDEBUG)
|
||||
// tsan (Thread Sanitizer) is a valgrind-based tool that detects these exact
|
||||
// functions by name.
|
||||
extern "C" {
|
||||
void AnnotateHappensAfter(const char *file, int line, const volatile void *cv);
|
||||
void AnnotateHappensBefore(const char *file, int line, const volatile void *cv);
|
||||
void AnnotateIgnoreWritesBegin(const char *file, int line);
|
||||
void AnnotateIgnoreWritesEnd(const char *file, int line);
|
||||
}
|
||||
#endif
|
||||
|
||||
namespace llvm {
|
||||
namespace sys {
|
||||
// True if Valgrind is controlling this process.
|
||||
|
@ -39,34 +28,6 @@ namespace sys {
|
|||
// Discard valgrind's translation of code in the range [Addr .. Addr + Len).
|
||||
// Otherwise valgrind may continue to execute the old version of the code.
|
||||
void ValgrindDiscardTranslations(const void *Addr, size_t Len);
|
||||
|
||||
#if LLVM_ENABLE_THREADS != 0 && !defined(NDEBUG)
|
||||
// Thread Sanitizer is a valgrind tool that finds races in code.
|
||||
// See http://code.google.com/p/data-race-test/wiki/DynamicAnnotations .
|
||||
|
||||
// This marker is used to define a happens-before arc. The race detector will
|
||||
// infer an arc from the begin to the end when they share the same pointer
|
||||
// argument.
|
||||
#define TsanHappensBefore(cv) \
|
||||
AnnotateHappensBefore(__FILE__, __LINE__, cv)
|
||||
|
||||
// This marker defines the destination of a happens-before arc.
|
||||
#define TsanHappensAfter(cv) \
|
||||
AnnotateHappensAfter(__FILE__, __LINE__, cv)
|
||||
|
||||
// Ignore any races on writes between here and the next TsanIgnoreWritesEnd.
|
||||
#define TsanIgnoreWritesBegin() \
|
||||
AnnotateIgnoreWritesBegin(__FILE__, __LINE__)
|
||||
|
||||
// Resume checking for racy writes.
|
||||
#define TsanIgnoreWritesEnd() \
|
||||
AnnotateIgnoreWritesEnd(__FILE__, __LINE__)
|
||||
#else
|
||||
#define TsanHappensBefore(cv)
|
||||
#define TsanHappensAfter(cv)
|
||||
#define TsanIgnoreWritesBegin()
|
||||
#define TsanIgnoreWritesEnd()
|
||||
#endif
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -14,6 +14,7 @@
|
|||
#include "llvm/Support/ManagedStatic.h"
|
||||
#include "llvm/Config/config.h"
|
||||
#include "llvm/Support/Atomic.h"
|
||||
#include "llvm/Support/Compiler.h"
|
||||
#include "llvm/Support/Mutex.h"
|
||||
#include "llvm/Support/MutexGuard.h"
|
||||
#include <cassert>
|
||||
|
|
|
@ -24,6 +24,7 @@
|
|||
#include "llvm/ADT/Statistic.h"
|
||||
#include "llvm/ADT/StringExtras.h"
|
||||
#include "llvm/Support/CommandLine.h"
|
||||
#include "llvm/Support/Compiler.h"
|
||||
#include "llvm/Support/Debug.h"
|
||||
#include "llvm/Support/Format.h"
|
||||
#include "llvm/Support/ManagedStatic.h"
|
||||
|
|
|
@ -52,23 +52,3 @@ void llvm::sys::ValgrindDiscardTranslations(const void *Addr, size_t Len) {
|
|||
}
|
||||
|
||||
#endif // !HAVE_VALGRIND_VALGRIND_H
|
||||
|
||||
// These functions require no implementation, tsan just looks at the arguments
|
||||
// they're called with. However, they are required to be weak as some other
|
||||
// application or library may already be providing these definitions for the
|
||||
// same reason we are.
|
||||
extern "C" {
|
||||
LLVM_ATTRIBUTE_WEAK void AnnotateHappensAfter(const char *file, int line,
|
||||
const volatile void *cv);
|
||||
void AnnotateHappensAfter(const char *file, int line, const volatile void *cv) {
|
||||
}
|
||||
LLVM_ATTRIBUTE_WEAK void AnnotateHappensBefore(const char *file, int line,
|
||||
const volatile void *cv);
|
||||
void AnnotateHappensBefore(const char *file, int line,
|
||||
const volatile void *cv) {}
|
||||
LLVM_ATTRIBUTE_WEAK void AnnotateIgnoreWritesBegin(const char *file, int line);
|
||||
void AnnotateIgnoreWritesBegin(const char *file, int line) {}
|
||||
LLVM_ATTRIBUTE_WEAK void AnnotateIgnoreWritesEnd(const char *file, int line);
|
||||
void AnnotateIgnoreWritesEnd(const char *file, int line) {}
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue