diff options
author | Dmitry Vyukov <dvyukov@google.com> | 2014-12-22 09:44:56 +0000 |
---|---|---|
committer | Dmitry Vyukov <dvyukov@google.com> | 2014-12-22 09:44:56 +0000 |
commit | 732b128129cf317468dc366c412be19f6a3ed01e (patch) | |
tree | f20e8de2ff26c0caaed564af7e53de4162be533e /compiler-rt/lib/tsan/rtl/tsan_interface_java.cc | |
parent | 07bc611fb378deda65a6d3bdeda9c9fe95cb6dfd (diff) | |
download | bcm5719-llvm-732b128129cf317468dc366c412be19f6a3ed01e.tar.gz bcm5719-llvm-732b128129cf317468dc366c412be19f6a3ed01e.zip |
tsan: add acquire/release functions to java interface
they are required to handle synchronization on volatile/final fields
llvm-svn: 224697
Diffstat (limited to 'compiler-rt/lib/tsan/rtl/tsan_interface_java.cc')
-rw-r--r-- | compiler-rt/lib/tsan/rtl/tsan_interface_java.cc | 30 |
1 files changed, 30 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 8615349f657..0aea63d1167 100644 --- a/compiler-rt/lib/tsan/rtl/tsan_interface_java.cc +++ b/compiler-rt/lib/tsan/rtl/tsan_interface_java.cc @@ -219,3 +219,33 @@ int __tsan_java_mutex_unlock_rec(jptr addr) { return MutexUnlock(thr, pc, addr, true); } + +void __tsan_java_acquire(jptr addr) { + SCOPED_JAVA_FUNC(__tsan_java_acquire); + DPrintf("#%d: java_acquire(%p)\n", thr->tid, addr); + CHECK_NE(jctx, 0); + CHECK_GE(addr, jctx->heap_begin); + CHECK_LT(addr, jctx->heap_begin + jctx->heap_size); + + Acquire(thr, caller_pc, addr); +} + +void __tsan_java_release(jptr addr) { + SCOPED_JAVA_FUNC(__tsan_java_release); + DPrintf("#%d: java_release(%p)\n", thr->tid, addr); + CHECK_NE(jctx, 0); + CHECK_GE(addr, jctx->heap_begin); + CHECK_LT(addr, jctx->heap_begin + jctx->heap_size); + + Release(thr, caller_pc, addr); +} + +void __tsan_java_release_store(jptr addr) { + SCOPED_JAVA_FUNC(__tsan_java_release); + DPrintf("#%d: java_release_store(%p)\n", thr->tid, addr); + CHECK_NE(jctx, 0); + CHECK_GE(addr, jctx->heap_begin); + CHECK_LT(addr, jctx->heap_begin + jctx->heap_size); + + ReleaseStore(thr, caller_pc, addr); +} |