[compiler-rt] r200734 - [sanitizer] make __tls_get_addr interceptor (more) AS-safe. No good test so far, will keep trying.

Kostya Serebryany kcc at google.com
Mon Feb 3 21:22:00 PST 2014


Author: kcc
Date: Mon Feb  3 23:22:00 2014
New Revision: 200734

URL: http://llvm.org/viewvc/llvm-project?rev=200734&view=rev
Log:
[sanitizer] make __tls_get_addr interceptor (more) AS-safe. No good test so far, will keep trying.

Modified:
    compiler-rt/trunk/lib/sanitizer_common/sanitizer_tls_get_addr.cc

Modified: compiler-rt/trunk/lib/sanitizer_common/sanitizer_tls_get_addr.cc
URL: http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/sanitizer_common/sanitizer_tls_get_addr.cc?rev=200734&r1=200733&r2=200734&view=diff
==============================================================================
--- compiler-rt/trunk/lib/sanitizer_common/sanitizer_tls_get_addr.cc (original)
+++ compiler-rt/trunk/lib/sanitizer_common/sanitizer_tls_get_addr.cc Mon Feb  3 23:22:00 2014
@@ -60,9 +60,10 @@ static inline void DTLS_Resize(uptr new_
 
 void DTLS_Destroy() {
   if (!dtls.dtv_size) return;
-  UnmapOrDie(dtls.dtv, dtls.dtv_size * sizeof(DTLS::DTV));
+  uptr s = dtls.dtv_size;
+  dtls.dtv_size = kDestroyedThread;  // Do this before unmap for AS-safety.
+  UnmapOrDie(dtls.dtv, s * sizeof(DTLS::DTV));
   atomic_fetch_sub(&number_of_live_dtls, 1, memory_order_relaxed);
-  dtls.dtv_size = kDestroyedThread;
 }
 
 void DTLS_on_tls_get_addr(void *arg_void, void *res) {





More information about the llvm-commits mailing list