[compiler-rt] r333503 - [asan, myriad] Reset shadow memory during exit

Walter Lee via llvm-commits llvm-commits at lists.llvm.org
Tue May 29 21:57:04 PDT 2018


Author: waltl
Date: Tue May 29 21:57:04 2018
New Revision: 333503

URL: http://llvm.org/viewvc/llvm-project?rev=333503&view=rev
Log:
[asan, myriad] Reset shadow memory during exit

Reset shadow memory during exit.  Also update a cut-and-paste comment,
and do some minor refactoring of InitializeShadowMemory.

Differential Revision: https://reviews.llvm.org/D47501

Modified:
    compiler-rt/trunk/lib/asan/asan_rtems.cc

Modified: compiler-rt/trunk/lib/asan/asan_rtems.cc
URL: http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/asan/asan_rtems.cc?rev=333503&r1=333502&r2=333503&view=diff
==============================================================================
--- compiler-rt/trunk/lib/asan/asan_rtems.cc (original)
+++ compiler-rt/trunk/lib/asan/asan_rtems.cc Tue May 29 21:57:04 2018
@@ -29,21 +29,24 @@
 
 namespace __asan {
 
-void InitializeShadowMemory() {
-  kHighMemEnd = 0;
-  kMidMemBeg =  0;
-  kMidMemEnd =  0;
-
+static void ResetShadowMemory() {
   uptr shadow_start = SHADOW_OFFSET;
   uptr shadow_end = MEM_TO_SHADOW(kMyriadMemoryEnd32);
-  uptr shadow_size = shadow_end - shadow_start;
   uptr gap_start = MEM_TO_SHADOW(shadow_start);
   uptr gap_end = MEM_TO_SHADOW(shadow_end);
 
-  REAL(memset)((void *)shadow_start, 0, shadow_size);
+  REAL(memset)((void *)shadow_start, 0, shadow_end - shadow_start);
   REAL(memset)((void *)gap_start, kAsanShadowGap, gap_end - gap_start);
 }
 
+void InitializeShadowMemory() {
+  kHighMemEnd = 0;
+  kMidMemBeg =  0;
+  kMidMemEnd =  0;
+
+  ResetShadowMemory();
+}
+
 void AsanApplyToGlobals(globals_op_fptr op, const void *needle) {
   UNIMPLEMENTED();
 }
@@ -66,7 +69,7 @@ void EarlyInit() {
   // Provide early initialization of shadow memory so that
   // instrumented code running before full initialzation will not
   // report spurious errors.
-  InitializeShadowMemory();
+  ResetShadowMemory();
 }
 
 // Main thread information.  Initialized in CreateMainThread() and
@@ -118,10 +121,8 @@ static AsanThread *CreateAsanThread(Stac
 }
 
 // This gets the same arguments passed to Init by CreateAsanThread, above.
-// We're in the creator thread before the new thread is actually started,
-// but its stack address range is already known.  We don't bother tracking
-// the static TLS address range because the system itself already uses an
-// ASan-aware allocator for that.
+// We're in the creator thread before the new thread is actually started, but
+// its stack and tls address range are already known.
 void AsanThread::SetThreadStackAndTls(const AsanThread::InitOptions *options) {
   DCHECK_NE(GetCurrentThread(), this);
   DCHECK_NE(GetCurrentThread(), nullptr);
@@ -219,8 +220,10 @@ static void HandleExit() {
   // Disable ASan by setting it to uninitialized.  Also reset the
   // shadow memory to avoid reporting errors after the run-time has
   // been desroyed.
-  asan_inited = false;
-  //  InitializeShadowMemory();
+  if (asan_inited) {
+    asan_inited = false;
+    ResetShadowMemory();
+  }
 }
 
 }  // namespace __asan




More information about the llvm-commits mailing list