summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDmitry Vyukov <dvyukov@google.com>2013-03-18 11:51:51 +0000
committerDmitry Vyukov <dvyukov@google.com>2013-03-18 11:51:51 +0000
commit15bee188c4c141c3f82a86df3c3f4eba172c1706 (patch)
tree2d2319b185711b007ee154d25b30c6c885f15678
parent2989ffcaccba9268be3182cd0593080e9ab5c274 (diff)
downloadbcm5719-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.cc5
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;
}
OpenPOWER on IntegriCloud