//===-- hwasan_allocator.h ----------------------------------------*- C++ -*-===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // // This file is a part of HWAddressSanitizer. // //===----------------------------------------------------------------------===// #ifndef HWASAN_ALLOCATOR_H #define HWASAN_ALLOCATOR_H #include "sanitizer_common/sanitizer_common.h" namespace __hwasan { struct HwasanThreadLocalMallocStorage { uptr quarantine_cache[16]; // Allocator cache contains atomic_uint64_t which must be 8-byte aligned. ALIGNED(8) uptr allocator_cache[96 * (512 * 8 + 16)]; // Opaque. void CommitBack(); private: // These objects are allocated via mmap() and are zero-initialized. HwasanThreadLocalMallocStorage() {} }; struct Metadata; class HwasanChunkView { public: HwasanChunkView() : block_(0), metadata_(nullptr) {} HwasanChunkView(uptr block, Metadata *metadata) : block_(block), metadata_(metadata) {} bool IsValid() const; // Checks if it points to a valid allocated chunk bool IsAllocated() const; // Checks if the memory is currently allocated uptr Beg() const; // First byte of user memory uptr End() const; // Last byte of user memory uptr UsedSize() const; // Size requested by the user u32 GetAllocStackId() const; u32 GetFreeStackId() const; private: uptr block_; Metadata *const metadata_; }; HwasanChunkView FindHeapChunkByAddress(uptr address); } // namespace __hwasan #endif // HWASAN_ALLOCATOR_H