diff options
author | Dmitry Vyukov <dvyukov@google.com> | 2013-09-21 23:06:00 +0000 |
---|---|---|
committer | Dmitry Vyukov <dvyukov@google.com> | 2013-09-21 23:06:00 +0000 |
commit | 150406bbf33751bc8946db8c1ff6255d86d7a674 (patch) | |
tree | a81b64979ebd09966f88b1e78381457e7075a8a8 /compiler-rt/lib/tsan/rtl/tsan_interface_java.cc | |
parent | 017015c9ede1c6064669555dcfc35f4037864c1b (diff) | |
download | bcm5719-llvm-150406bbf33751bc8946db8c1ff6255d86d7a674.tar.gz bcm5719-llvm-150406bbf33751bc8946db8c1ff6255d86d7a674.zip |
tsan: ignore all interceptors coming directly from JVM
llvm-svn: 191152
Diffstat (limited to 'compiler-rt/lib/tsan/rtl/tsan_interface_java.cc')
-rw-r--r-- | compiler-rt/lib/tsan/rtl/tsan_interface_java.cc | 14 |
1 files changed, 14 insertions, 0 deletions
diff --git a/compiler-rt/lib/tsan/rtl/tsan_interface_java.cc b/compiler-rt/lib/tsan/rtl/tsan_interface_java.cc index 358fd15ddef..2ac3249acf5 100644 --- a/compiler-rt/lib/tsan/rtl/tsan_interface_java.cc +++ b/compiler-rt/lib/tsan/rtl/tsan_interface_java.cc @@ -18,6 +18,7 @@ #include "sanitizer_common/sanitizer_common.h" #include "sanitizer_common/sanitizer_placement_new.h" #include "sanitizer_common/sanitizer_stacktrace.h" +#include "sanitizer_common/sanitizer_procmaps.h" using namespace __tsan; // NOLINT @@ -95,6 +96,8 @@ class ScopedJavaFunc { static u64 jctx_buf[sizeof(JavaContext) / sizeof(u64) + 1]; static JavaContext *jctx; +extern atomic_uintptr_t libjvm_begin; +extern atomic_uintptr_t libjvm_end; static BlockDesc *getblock(uptr addr) { uptr i = (addr - jctx->heap_begin) / kHeapAlignment; @@ -163,6 +166,17 @@ SyncVar* GetAndRemoveJavaSync(ThreadState *thr, uptr pc, uptr addr) { ScopedJavaFunc scoped(thr, caller_pc); \ /**/ +void __tsan_java_preinit(const char *libjvm_path) { + SCOPED_JAVA_FUNC(__tsan_java_preinit); + if (libjvm_path) { + uptr begin, end; + if (GetCodeRangeForFile(libjvm_path, &begin, &end)) { + atomic_store(&libjvm_begin, begin, memory_order_relaxed); + atomic_store(&libjvm_end, end, memory_order_relaxed); + } + } +} + void __tsan_java_init(jptr heap_begin, jptr heap_size) { SCOPED_JAVA_FUNC(__tsan_java_init); DPrintf("#%d: java_init(%p, %p)\n", thr->tid, heap_begin, heap_size); |