diff options
author | Dmitry Vyukov <dvyukov@google.com> | 2013-03-21 15:37:39 +0000 |
---|---|---|
committer | Dmitry Vyukov <dvyukov@google.com> | 2013-03-21 15:37:39 +0000 |
commit | 0dc47b652dfbe0d61d153eded02bae9487a7b539 (patch) | |
tree | 3bf128829ebe837e34586df47fd62420f57b7ae6 /lib/tsan/rtl/tsan_interface_inl.h | |
parent | f63dde3594da0dba4c8039f0cb3a4196a76f1aff (diff) | |
download | compiler-rt-0dc47b652dfbe0d61d153eded02bae9487a7b539.tar.gz compiler-rt-0dc47b652dfbe0d61d153eded02bae9487a7b539.tar.bz2 compiler-rt-0dc47b652dfbe0d61d153eded02bae9487a7b539.tar.xz |
tsan: better reporting for races on vptr
explicitly say "ctor/dtor vs virtual call"
git-svn-id: https://llvm.org/svn/llvm-project/compiler-rt/trunk@177640 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/tsan/rtl/tsan_interface_inl.h')
-rw-r--r-- | lib/tsan/rtl/tsan_interface_inl.h | 16 |
1 files changed, 14 insertions, 2 deletions
diff --git a/lib/tsan/rtl/tsan_interface_inl.h b/lib/tsan/rtl/tsan_interface_inl.h index 29e2b21e..0187e49d 100644 --- a/lib/tsan/rtl/tsan_interface_inl.h +++ b/lib/tsan/rtl/tsan_interface_inl.h @@ -52,8 +52,20 @@ void __tsan_write8(void *addr) { void __tsan_vptr_update(void **vptr_p, void *new_val) { CHECK_EQ(sizeof(vptr_p), 8); - if (*vptr_p != new_val) - MemoryWrite(cur_thread(), CALLERPC, (uptr)vptr_p, kSizeLog8); + if (*vptr_p != new_val) { + ThreadState *thr = cur_thread(); + thr->is_vptr_access = true; + MemoryWrite(thr, CALLERPC, (uptr)vptr_p, kSizeLog8); + thr->is_vptr_access = false; + } +} + +void __tsan_vptr_read(void **vptr_p) { + CHECK_EQ(sizeof(vptr_p), 8); + ThreadState *thr = cur_thread(); + thr->is_vptr_access = true; + MemoryRead(thr, CALLERPC, (uptr)vptr_p, kSizeLog8); + thr->is_vptr_access = false; } void __tsan_func_entry(void *pc) { |