Index: C:/Repos/Svn/llvm/tools/lldb/source/Plugins/Process/minidump/MinidumpParser.h =================================================================== --- C:/Repos/Svn/llvm/tools/lldb/source/Plugins/Process/minidump/MinidumpParser.h +++ C:/Repos/Svn/llvm/tools/lldb/source/Plugins/Process/minidump/MinidumpParser.h @@ -87,6 +87,8 @@ MemoryRegionInfo GetMemoryRegionInfo(lldb::addr_t load_addr); + const std::vector &GetMemoryRegions(); + // Perform consistency checks and initialize internal data structures Status Initialize(); Index: C:/Repos/Svn/llvm/tools/lldb/source/Plugins/Process/minidump/MinidumpParser.cpp =================================================================== --- C:/Repos/Svn/llvm/tools/lldb/source/Plugins/Process/minidump/MinidumpParser.cpp +++ C:/Repos/Svn/llvm/tools/lldb/source/Plugins/Process/minidump/MinidumpParser.cpp @@ -537,6 +537,12 @@ MemoryRegionInfo MinidumpParser::GetMemoryRegionInfo(lldb::addr_t load_addr) { + if (!m_parsed_regions) + GetMemoryRegions(); + return FindMemoryRegion(load_addr); +} + +const std::vector &MinidumpParser::GetMemoryRegions() { if (!m_parsed_regions) { m_parsed_regions = true; // We haven't cached our memory regions yet we will create the region cache @@ -552,7 +558,7 @@ CreateRegionsCacheFromMemory64List(*this, m_regions); std::sort(m_regions.begin(), m_regions.end()); } - return FindMemoryRegion(load_addr); + return m_regions; } Status MinidumpParser::Initialize() { Index: C:/Repos/Svn/llvm/tools/lldb/source/Plugins/Process/minidump/MinidumpTypes.cpp =================================================================== --- C:/Repos/Svn/llvm/tools/lldb/source/Plugins/Process/minidump/MinidumpTypes.cpp +++ C:/Repos/Svn/llvm/tools/lldb/source/Plugins/Process/minidump/MinidumpTypes.cpp @@ -242,6 +242,8 @@ return {}; std::vector result; + result.reserve(header->num_of_entries); + for (uint64_t i = 0; i < header->num_of_entries; ++i) { result.push_back(reinterpret_cast( data.data() + i * header->size_of_entry)); Index: C:/Repos/Svn/llvm/tools/lldb/source/Plugins/Process/minidump/ProcessMinidump.h =================================================================== --- C:/Repos/Svn/llvm/tools/lldb/source/Plugins/Process/minidump/ProcessMinidump.h +++ C:/Repos/Svn/llvm/tools/lldb/source/Plugins/Process/minidump/ProcessMinidump.h @@ -78,6 +78,9 @@ Status GetMemoryRegionInfo(lldb::addr_t load_addr, MemoryRegionInfo &range_info) override; + Status GetMemoryRegions( + lldb_private::MemoryRegionInfos ®ion_list) override; + bool GetProcessInfo(ProcessInstanceInfo &info) override; Status WillResume() override { Index: C:/Repos/Svn/llvm/tools/lldb/source/Plugins/Process/minidump/ProcessMinidump.cpp =================================================================== --- C:/Repos/Svn/llvm/tools/lldb/source/Plugins/Process/minidump/ProcessMinidump.cpp +++ C:/Repos/Svn/llvm/tools/lldb/source/Plugins/Process/minidump/ProcessMinidump.cpp @@ -288,6 +288,12 @@ return Status(); } +Status ProcessMinidump::GetMemoryRegions( + lldb_private::MemoryRegionInfos ®ion_list) { + region_list = m_minidump_parser.GetMemoryRegions(); + return Status(); +} + void ProcessMinidump::Clear() { Process::m_thread_list.Clear(); } bool ProcessMinidump::UpdateThreadList(ThreadList &old_thread_list,