diff options
| author | Viktor Kutuzov <vkutuzov@accesssoftek.com> | 2015-03-27 14:12:28 +0000 |
|---|---|---|
| committer | Viktor Kutuzov <vkutuzov@accesssoftek.com> | 2015-03-27 14:12:28 +0000 |
| commit | eff2d98eccd782b1a76e4a326d02c6fd4dcb2fed (patch) | |
| tree | 7b9d280107ce72c964c93fdf666322e853c87771 /compiler-rt/lib | |
| parent | fe25759022ff190eb4519689d6f0e3b04eb38b2c (diff) | |
| download | bcm5719-llvm-eff2d98eccd782b1a76e4a326d02c6fd4dcb2fed.tar.gz bcm5719-llvm-eff2d98eccd782b1a76e4a326d02c6fd4dcb2fed.zip | |
[Tsan] Do not sanitize memset() and other functions during initialization
Differential Revision: http://reviews.llvm.org/D8544
llvm-svn: 233378
Diffstat (limited to 'compiler-rt/lib')
| -rw-r--r-- | compiler-rt/lib/tsan/rtl/tsan_interceptors.cc | 12 |
1 files changed, 9 insertions, 3 deletions
diff --git a/compiler-rt/lib/tsan/rtl/tsan_interceptors.cc b/compiler-rt/lib/tsan/rtl/tsan_interceptors.cc index c45bcdc1ced..e265aab6545 100644 --- a/compiler-rt/lib/tsan/rtl/tsan_interceptors.cc +++ b/compiler-rt/lib/tsan/rtl/tsan_interceptors.cc @@ -156,6 +156,9 @@ const int SA_SIGINFO = 4; const int SIG_SETMASK = 2; #endif +#define COMMON_INTERCEPTOR_NOTHING_IS_INITIALIZED \ + (!cur_thread()->is_inited) + namespace std { struct nothrow_t {}; } // namespace std @@ -663,14 +666,17 @@ TSAN_INTERCEPTOR(uptr, strlen, const char *s) { } TSAN_INTERCEPTOR(void*, memset, void *dst, int v, uptr size) { - SCOPED_TSAN_INTERCEPTOR(memset, dst, v, size); - MemoryAccessRange(thr, pc, (uptr)dst, size, true); + // On FreeBSD we get here from libthr internals on thread initialization. + if (!COMMON_INTERCEPTOR_NOTHING_IS_INITIALIZED) { + SCOPED_TSAN_INTERCEPTOR(memset, dst, v, size); + MemoryAccessRange(thr, pc, (uptr)dst, size, true); + } return internal_memset(dst, v, size); } TSAN_INTERCEPTOR(void*, memcpy, void *dst, const void *src, uptr size) { // On FreeBSD we get here from libthr internals on thread initialization. - if (cur_thread()->is_inited) { + if (!COMMON_INTERCEPTOR_NOTHING_IS_INITIALIZED) { SCOPED_TSAN_INTERCEPTOR(memcpy, dst, src, size); MemoryAccessRange(thr, pc, (uptr)dst, size, true); MemoryAccessRange(thr, pc, (uptr)src, size, false); |

