aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBenjamin Kramer <benny.kra@googlemail.com>2017-09-28 13:38:58 +0000
committerBenjamin Kramer <benny.kra@googlemail.com>2017-09-28 13:38:58 +0000
commitc4e652f3aa4d0bf6831fd00b91b48aa82b5a8d01 (patch)
tree9307a2c193a58d3a4826f9fea1ab8d50a9630d46
parent715a5efaadec7c354f3d004232ecc4d4062929ae (diff)
downloadllvm-c4e652f3aa4d0bf6831fd00b91b48aa82b5a8d01.zip
llvm-c4e652f3aa4d0bf6831fd00b91b48aa82b5a8d01.tar.gz
llvm-c4e652f3aa4d0bf6831fd00b91b48aa82b5a8d01.tar.bz2
[asan] Unpoison global metadata on dlclose.
dlclose itself might touch it, so better return it to the state it was before. I don't know how to create a test for this as it would require chaning dlclose itself. llvm-svn: 314415
-rw-r--r--compiler-rt/lib/asan/asan_globals.cc3
1 files changed, 3 insertions, 0 deletions
diff --git a/compiler-rt/lib/asan/asan_globals.cc b/compiler-rt/lib/asan/asan_globals.cc
index ed1e4c6..0db65d0 100644
--- a/compiler-rt/lib/asan/asan_globals.cc
+++ b/compiler-rt/lib/asan/asan_globals.cc
@@ -403,6 +403,9 @@ void __asan_unregister_globals(__asan_global *globals, uptr n) {
}
UnregisterGlobal(&globals[i]);
}
+
+ // Unpoison the metadata.
+ PoisonShadow(reinterpret_cast<uptr>(globals), n * sizeof(__asan_global), 0);
}
// This method runs immediately prior to dynamic initialization in each TU,