diff options
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" { |

