diff options
| author | Sergey Matveev <earthdok@google.com> | 2013-06-06 14:17:56 +0000 |
|---|---|---|
| committer | Sergey Matveev <earthdok@google.com> | 2013-06-06 14:17:56 +0000 |
| commit | ecc4f5ba8ea5059867ac47ea464a60d434c04c2c (patch) | |
| tree | 3137742bb76c385fa95c88790eadfdd02437a4d1 /compiler-rt/lib/asan/asan_allocator2.cc | |
| parent | e674320adec3df480d12a9451058cc8370a78bb7 (diff) | |
| download | bcm5719-llvm-ecc4f5ba8ea5059867ac47ea464a60d434c04c2c.tar.gz bcm5719-llvm-ecc4f5ba8ea5059867ac47ea464a60d434c04c2c.zip | |
[lsan] Implement __lsan_ignore_object().
Leak annotation similar to HeapChecker's IgnoreObject().
llvm-svn: 183412
Diffstat (limited to 'compiler-rt/lib/asan/asan_allocator2.cc')
| -rw-r--r-- | compiler-rt/lib/asan/asan_allocator2.cc | 14 |
1 files changed, 14 insertions, 0 deletions
diff --git a/compiler-rt/lib/asan/asan_allocator2.cc b/compiler-rt/lib/asan/asan_allocator2.cc index ea4181d17d2..c1f01249234 100644 --- a/compiler-rt/lib/asan/asan_allocator2.cc +++ b/compiler-rt/lib/asan/asan_allocator2.cc @@ -792,6 +792,20 @@ template void ForEachChunk<MarkIndirectlyLeakedCb>( template void ForEachChunk<CollectSuppressedCb>( CollectSuppressedCb const &callback); #endif // CAN_SANITIZE_LEAKS + +IgnoreObjectResult IgnoreObjectLocked(const void *p) { + uptr addr = reinterpret_cast<uptr>(p); + __asan::AsanChunk *m = __asan::GetAsanChunkByAddr(addr); + if (!m) return kIgnoreObjectInvalid; + if ((m->chunk_state == __asan::CHUNK_ALLOCATED) && m->AddrIsInside(addr)) { + if (m->lsan_tag == kSuppressed) + return kIgnoreObjectAlreadyIgnored; + m->lsan_tag = __lsan::kSuppressed; + return kIgnoreObjectSuccess; + } else { + return kIgnoreObjectInvalid; + } +} } // namespace __lsan extern "C" { |

