diff options
author | Dmitry Vyukov <dvyukov@google.com> | 2013-03-18 11:51:51 +0000 |
---|---|---|
committer | Dmitry Vyukov <dvyukov@google.com> | 2013-03-18 11:51:51 +0000 |
commit | 15bee188c4c141c3f82a86df3c3f4eba172c1706 (patch) | |
tree | 2d2319b185711b007ee154d25b30c6c885f15678 | |
parent | 2989ffcaccba9268be3182cd0593080e9ab5c274 (diff) | |
download | bcm5719-llvm-15bee188c4c141c3f82a86df3c3f4eba172c1706.tar.gz bcm5719-llvm-15bee188c4c141c3f82a86df3c3f4eba172c1706.zip |
tsan: madvise(DONTNEED) shadow memory on munmap()
llvm-svn: 177278
-rw-r--r-- | compiler-rt/lib/tsan/rtl/tsan_interceptors.cc | 5 |
1 files changed, 5 insertions, 0 deletions
diff --git a/compiler-rt/lib/tsan/rtl/tsan_interceptors.cc b/compiler-rt/lib/tsan/rtl/tsan_interceptors.cc index 352c7bb12b9..0bc4c7380e0 100644 --- a/compiler-rt/lib/tsan/rtl/tsan_interceptors.cc +++ b/compiler-rt/lib/tsan/rtl/tsan_interceptors.cc @@ -619,6 +619,11 @@ TSAN_INTERCEPTOR(void*, mmap64, void *addr, long_t sz, int prot, TSAN_INTERCEPTOR(int, munmap, void *addr, long_t sz) { SCOPED_TSAN_INTERCEPTOR(munmap, addr, sz); + // We are about to unmap a chunk of user memory. + // Mark the corresponding shadow memory as not needed. + uptr shadow_beg = MemToShadow((uptr)addr); + uptr shadow_end = MemToShadow((uptr)addr + sz); + FlushUnneededShadowMemory(shadow_beg, shadow_end - shadow_beg); int res = REAL(munmap)(addr, sz); return res; } |