diff --git a/DevTools/UserspaceEmulator/MallocTracer.cpp b/DevTools/UserspaceEmulator/MallocTracer.cpp index 1fe405521d..441632826e 100644 --- a/DevTools/UserspaceEmulator/MallocTracer.cpp +++ b/DevTools/UserspaceEmulator/MallocTracer.cpp @@ -44,6 +44,10 @@ void MallocTracer::target_did_malloc(Badge, FlatPtr address, size_t siz ASSERT(region); ASSERT(region->is_mmap()); auto& mmap_region = static_cast(*region); + + // Mark the containing mmap region as a malloc block! + mmap_region.set_malloc(true); + auto* shadow_bits = mmap_region.shadow_data() + address - mmap_region.base(); memset(shadow_bits, 0, size); diff --git a/DevTools/UserspaceEmulator/MmapRegion.cpp b/DevTools/UserspaceEmulator/MmapRegion.cpp index 3abe4092e7..e507461c85 100644 --- a/DevTools/UserspaceEmulator/MmapRegion.cpp +++ b/DevTools/UserspaceEmulator/MmapRegion.cpp @@ -65,13 +65,6 @@ MmapRegion::~MmapRegion() free(m_data); } -bool MmapRegion::is_malloc_block() const -{ - // FIXME: This is obviously incomplete! - // We should somehow know which mmap regions are malloc blocks. - return !m_file_backed; -} - ValueWithShadow MmapRegion::read8(FlatPtr offset) { if (!is_readable()) { diff --git a/DevTools/UserspaceEmulator/MmapRegion.h b/DevTools/UserspaceEmulator/MmapRegion.h index a32c5271d9..8c088f7f8b 100644 --- a/DevTools/UserspaceEmulator/MmapRegion.h +++ b/DevTools/UserspaceEmulator/MmapRegion.h @@ -52,7 +52,8 @@ public: bool is_writable() const { return m_prot & PROT_WRITE; } bool is_executable() const { return m_prot & PROT_EXEC; } - bool is_malloc_block() const; + bool is_malloc_block() const { return m_malloc; } + void set_malloc(bool b) { m_malloc = b; } private: MmapRegion(u32 base, u32 size, int prot); @@ -62,6 +63,7 @@ private: u8* m_shadow_data { nullptr }; int m_prot { 0 }; bool m_file_backed { false }; + bool m_malloc { false }; }; }