summaryrefslogtreecommitdiffstats
path: root/compiler-rt/lib/tsan/rtl/tsan_interface_java.cc
diff options
context:
space:
mode:
authorDmitry Vyukov <dvyukov@google.com>2014-12-22 09:44:56 +0000
committerDmitry Vyukov <dvyukov@google.com>2014-12-22 09:44:56 +0000
commit732b128129cf317468dc366c412be19f6a3ed01e (patch)
treef20e8de2ff26c0caaed564af7e53de4162be533e /compiler-rt/lib/tsan/rtl/tsan_interface_java.cc
parent07bc611fb378deda65a6d3bdeda9c9fe95cb6dfd (diff)
downloadbcm5719-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.cc30
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);
+}
OpenPOWER on IntegriCloud