diff --git a/DevTools/UserspaceEmulator/Emulator.cpp b/DevTools/UserspaceEmulator/Emulator.cpp index 427eed248ca..604f6760716 100644 --- a/DevTools/UserspaceEmulator/Emulator.cpp +++ b/DevTools/UserspaceEmulator/Emulator.cpp @@ -199,14 +199,6 @@ int Emulator::exec() return m_exit_status; } -bool Emulator::is_in_malloc_or_free() const -{ - return (m_cpu.base_eip() >= m_malloc_symbol_start && m_cpu.base_eip() < m_malloc_symbol_end) - || (m_cpu.base_eip() >= m_free_symbol_start && m_cpu.base_eip() < m_free_symbol_end) - || (m_cpu.base_eip() >= m_realloc_symbol_start && m_cpu.base_eip() < m_realloc_symbol_end) - || (m_cpu.base_eip() >= m_malloc_size_symbol_start && m_cpu.base_eip() < m_malloc_size_symbol_end); -} - Vector Emulator::raw_backtrace() { Vector backtrace; diff --git a/DevTools/UserspaceEmulator/Emulator.h b/DevTools/UserspaceEmulator/Emulator.h index cf4dade527a..1ad94d81c38 100644 --- a/DevTools/UserspaceEmulator/Emulator.h +++ b/DevTools/UserspaceEmulator/Emulator.h @@ -185,4 +185,12 @@ private: FlatPtr m_signal_trampoline { 0 }; }; +ALWAYS_INLINE bool Emulator::is_in_malloc_or_free() const +{ + return (m_cpu.base_eip() >= m_malloc_symbol_start && m_cpu.base_eip() < m_malloc_symbol_end) + || (m_cpu.base_eip() >= m_free_symbol_start && m_cpu.base_eip() < m_free_symbol_end) + || (m_cpu.base_eip() >= m_realloc_symbol_start && m_cpu.base_eip() < m_realloc_symbol_end) + || (m_cpu.base_eip() >= m_malloc_size_symbol_start && m_cpu.base_eip() < m_malloc_size_symbol_end); +} + } diff --git a/DevTools/UserspaceEmulator/MallocTracer.cpp b/DevTools/UserspaceEmulator/MallocTracer.cpp index e0c6803ba53..1a9b1d4077e 100644 --- a/DevTools/UserspaceEmulator/MallocTracer.cpp +++ b/DevTools/UserspaceEmulator/MallocTracer.cpp @@ -162,22 +162,6 @@ void MallocTracer::target_did_realloc(Badge, FlatPtr address, size_t si existing_mallocation->malloc_backtrace = m_emulator.raw_backtrace(); } -Mallocation* MallocTracer::find_mallocation(const Region& region, FlatPtr address) -{ - if (!region.is_mmap()) - return nullptr; - if (!static_cast(region).is_malloc_block()) - return nullptr; - auto* malloc_data = static_cast(const_cast(region)).malloc_metadata(); - if (!malloc_data) - return nullptr; - auto& mallocation = malloc_data->mallocation_for_address(address); - if (!mallocation.used) - return nullptr; - ASSERT(mallocation.contains(address)); - return &mallocation; -} - Mallocation* MallocTracer::find_mallocation(FlatPtr address) { auto* region = m_emulator.mmu().find_region({ 0x23, address }); diff --git a/DevTools/UserspaceEmulator/MallocTracer.h b/DevTools/UserspaceEmulator/MallocTracer.h index f9bcd5d1733..9741542f761 100644 --- a/DevTools/UserspaceEmulator/MallocTracer.h +++ b/DevTools/UserspaceEmulator/MallocTracer.h @@ -26,6 +26,7 @@ #pragma once +#include "MmapRegion.h" #include "SoftMMU.h" #include #include @@ -92,4 +93,20 @@ private: bool m_auditing_enabled { true }; }; +ALWAYS_INLINE Mallocation* MallocTracer::find_mallocation(const Region& region, FlatPtr address) +{ + if (!region.is_mmap()) + return nullptr; + if (!static_cast(region).is_malloc_block()) + return nullptr; + auto* malloc_data = static_cast(const_cast(region)).malloc_metadata(); + if (!malloc_data) + return nullptr; + auto& mallocation = malloc_data->mallocation_for_address(address); + if (!mallocation.used) + return nullptr; + ASSERT(mallocation.contains(address)); + return &mallocation; +} + } diff --git a/DevTools/UserspaceEmulator/SoftMMU.cpp b/DevTools/UserspaceEmulator/SoftMMU.cpp index 313e06a6056..2bb85afa39b 100644 --- a/DevTools/UserspaceEmulator/SoftMMU.cpp +++ b/DevTools/UserspaceEmulator/SoftMMU.cpp @@ -39,15 +39,6 @@ SoftMMU::SoftMMU(Emulator& emulator) { } -Region* SoftMMU::find_region(X86::LogicalAddress address) -{ - if (address.selector() == 0x28) - return m_tls_region.ptr(); - - size_t page_index = (address.offset() & ~(PAGE_SIZE - 1)) / PAGE_SIZE; - return m_page_to_region_map[page_index]; -} - void SoftMMU::add_region(NonnullOwnPtr region) { ASSERT(!find_region({ 0x20, region->base() })); diff --git a/DevTools/UserspaceEmulator/SoftMMU.h b/DevTools/UserspaceEmulator/SoftMMU.h index f59ae955312..c6ac21e4152 100644 --- a/DevTools/UserspaceEmulator/SoftMMU.h +++ b/DevTools/UserspaceEmulator/SoftMMU.h @@ -53,7 +53,14 @@ public: void write32(X86::LogicalAddress, ValueWithShadow); void write64(X86::LogicalAddress, ValueWithShadow); - Region* find_region(X86::LogicalAddress); + ALWAYS_INLINE Region* find_region(X86::LogicalAddress address) + { + if (address.selector() == 0x28) + return m_tls_region.ptr(); + + size_t page_index = (address.offset() & ~(PAGE_SIZE - 1)) / PAGE_SIZE; + return m_page_to_region_map[page_index]; + } void add_region(NonnullOwnPtr); void remove_region(Region&);