[PATCH] [Tsan] Do not sanitize memcpy() during thread initialization on FreeBSD
Phabricator
reviews at reviews.llvm.org
Mon Mar 16 07:44:57 PDT 2015
REPOSITORY
rL LLVM
http://reviews.llvm.org/D8324
Files:
compiler-rt/trunk/lib/tsan/rtl/tsan_interceptors.cc
compiler-rt/trunk/lib/tsan/rtl/tsan_rtl.cc
compiler-rt/trunk/lib/tsan/rtl/tsan_rtl.h
compiler-rt/trunk/lib/tsan/rtl/tsan_rtl_thread.cc
Index: compiler-rt/trunk/lib/tsan/rtl/tsan_rtl.cc
===================================================================
--- compiler-rt/trunk/lib/tsan/rtl/tsan_rtl.cc
+++ compiler-rt/trunk/lib/tsan/rtl/tsan_rtl.cc
@@ -461,7 +461,7 @@
#endif
u32 CurrentStackId(ThreadState *thr, uptr pc) {
- if (thr->shadow_stack_pos == 0) // May happen during bootstrap.
+ if (!thr->is_inited) // May happen during bootstrap.
return 0;
if (pc != 0) {
#ifndef SANITIZER_GO
Index: compiler-rt/trunk/lib/tsan/rtl/tsan_rtl.h
===================================================================
--- compiler-rt/trunk/lib/tsan/rtl/tsan_rtl.h
+++ compiler-rt/trunk/lib/tsan/rtl/tsan_rtl.h
@@ -371,6 +371,7 @@
const int unique_id;
bool in_symbolizer;
bool in_ignored_lib;
+ bool is_inited;
bool is_dead;
bool is_freeing;
bool is_vptr_access;
Index: compiler-rt/trunk/lib/tsan/rtl/tsan_interceptors.cc
===================================================================
--- compiler-rt/trunk/lib/tsan/rtl/tsan_interceptors.cc
+++ compiler-rt/trunk/lib/tsan/rtl/tsan_interceptors.cc
@@ -413,7 +413,7 @@
}
static void SetJmp(ThreadState *thr, uptr sp, uptr mangled_sp) {
- if (thr->shadow_stack_pos == 0) // called from libc guts during bootstrap
+ if (!thr->is_inited) // called from libc guts during bootstrap
return;
// Cleanup old bufs.
JmpBufGarbageCollect(thr, sp);
@@ -669,9 +669,12 @@
}
TSAN_INTERCEPTOR(void*, memcpy, void *dst, const void *src, uptr size) {
- SCOPED_TSAN_INTERCEPTOR(memcpy, dst, src, size);
- MemoryAccessRange(thr, pc, (uptr)dst, size, true);
- MemoryAccessRange(thr, pc, (uptr)src, size, false);
+ // On FreeBSD we get here from libthr internals on thread initialization.
+ if (cur_thread()->is_inited) {
+ SCOPED_TSAN_INTERCEPTOR(memcpy, dst, src, size);
+ MemoryAccessRange(thr, pc, (uptr)dst, size, true);
+ MemoryAccessRange(thr, pc, (uptr)src, size, false);
+ }
return internal_memcpy(dst, src, size);
}
Index: compiler-rt/trunk/lib/tsan/rtl/tsan_rtl_thread.cc
===================================================================
--- compiler-rt/trunk/lib/tsan/rtl/tsan_rtl_thread.cc
+++ compiler-rt/trunk/lib/tsan/rtl/tsan_rtl_thread.cc
@@ -120,6 +120,7 @@
AcquireImpl(thr, 0, &sync);
StatInc(thr, StatSyncAcquire);
sync.Reset(&thr->clock_cache);
+ thr->is_inited = true;
DPrintf("#%d: ThreadStart epoch=%zu stk_addr=%zx stk_size=%zx "
"tls_addr=%zx tls_size=%zx\n",
tid, (uptr)epoch0, args->stk_addr, args->stk_size,
EMAIL PREFERENCES
http://reviews.llvm.org/settings/panel/emailpreferences/
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D8324.22022.patch
Type: text/x-patch
Size: 2538 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20150316/2f8f2a44/attachment.bin>
More information about the llvm-commits
mailing list