Skip to content

Commit

Permalink
[asan, myriad] Reset shadow memory during exit
Browse files Browse the repository at this point in the history
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

llvm-svn: 333503
  • Loading branch information
googlewalt committed May 30, 2018
1 parent 3872c6c commit 0a70e9d
Showing 1 changed file with 17 additions and 14 deletions.
31 changes: 17 additions & 14 deletions compiler-rt/lib/asan/asan_rtems.cc
Original file line number Diff line number Diff line change
Expand Up @@ -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();
}
Expand All @@ -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
Expand Down Expand Up @@ -118,10 +121,8 @@ static AsanThread *CreateAsanThread(StackTrace *stack, u32 parent_tid,
}

// 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);
Expand Down Expand Up @@ -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
Expand Down

0 comments on commit 0a70e9d

Please sign in to comment.