summaryrefslogtreecommitdiffstats
path: root/compiler-rt/lib/asan/asan_allocator2.cc
diff options
context:
space:
mode:
authorSergey Matveev <earthdok@google.com>2013-06-06 14:17:56 +0000
committerSergey Matveev <earthdok@google.com>2013-06-06 14:17:56 +0000
commitecc4f5ba8ea5059867ac47ea464a60d434c04c2c (patch)
tree3137742bb76c385fa95c88790eadfdd02437a4d1 /compiler-rt/lib/asan/asan_allocator2.cc
parente674320adec3df480d12a9451058cc8370a78bb7 (diff)
downloadbcm5719-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.cc14
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" {
OpenPOWER on IntegriCloud