[llvm-commits] [compiler-rt] r169231 - in /compiler-rt/trunk/lib/tsan/rtl: tsan_interceptors.cc tsan_interceptors.h
Dmitry Vyukov
dvyukov at google.com
Mon Dec 3 23:28:25 PST 2012
Author: dvyukov
Date: Tue Dec 4 01:28:25 2012
New Revision: 169231
URL: http://llvm.org/viewvc/llvm-project?rev=169231&view=rev
Log:
tsan: better error message if we fail to intercept some function
currently the message is SIGSEGV
Modified:
compiler-rt/trunk/lib/tsan/rtl/tsan_interceptors.cc
compiler-rt/trunk/lib/tsan/rtl/tsan_interceptors.h
Modified: compiler-rt/trunk/lib/tsan/rtl/tsan_interceptors.cc
URL: http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/tsan/rtl/tsan_interceptors.cc?rev=169231&r1=169230&r2=169231&view=diff
==============================================================================
--- compiler-rt/trunk/lib/tsan/rtl/tsan_interceptors.cc (original)
+++ compiler-rt/trunk/lib/tsan/rtl/tsan_interceptors.cc Tue Dec 4 01:28:25 2012
@@ -261,7 +261,6 @@
TSAN_INTERCEPTOR(int, atexit, void (*f)()) {
SCOPED_TSAN_INTERCEPTOR(atexit, f);
return atexit_ctx->atexit(thr, pc, f);
- return 0;
}
TSAN_INTERCEPTOR(void, longjmp, void *env, int val) {
@@ -1432,6 +1431,11 @@
thr->in_signal_handler = false;
}
+static void unreachable() {
+ Printf("FATAL: ThreadSanitizer: unreachable called\n");
+ Die();
+}
+
void InitializeInterceptors() {
CHECK_GT(cur_thread()->in_rtl, 0);
@@ -1566,6 +1570,9 @@
TSAN_INTERCEPT(mlockall);
TSAN_INTERCEPT(munlockall);
+ // Need to setup it, because interceptors check that the function is resolved.
+ // But atexit is emitted directly into the module, so can't be resolved.
+ REAL(atexit) = (int(*)(void(*)()))unreachable;
atexit_ctx = new(internal_alloc(MBlockAtExit, sizeof(AtExitContext)))
AtExitContext();
Modified: compiler-rt/trunk/lib/tsan/rtl/tsan_interceptors.h
URL: http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/tsan/rtl/tsan_interceptors.h?rev=169231&r1=169230&r2=169231&view=diff
==============================================================================
--- compiler-rt/trunk/lib/tsan/rtl/tsan_interceptors.h (original)
+++ compiler-rt/trunk/lib/tsan/rtl/tsan_interceptors.h Tue Dec 4 01:28:25 2012
@@ -42,6 +42,10 @@
#define SCOPED_TSAN_INTERCEPTOR(func, ...) \
SCOPED_INTERCEPTOR_RAW(func, __VA_ARGS__); \
+ if (REAL(func) == 0) { \
+ Printf("FATAL: ThreadSanitizer: failed to intercept %s\n", #func); \
+ Die(); \
+ } \
if (thr->in_rtl > 1) \
return REAL(func)(__VA_ARGS__); \
/**/
More information about the llvm-commits
mailing list