@@ -480,9 +480,22 @@ void MinidumpParser::PopulateMemoryRanges() {
480480
481481llvm::ArrayRef<uint8_t > MinidumpParser::GetMemory (lldb::addr_t addr,
482482 size_t size) {
483+ llvm::Expected<llvm::ArrayRef<uint8_t >> expected_memory = GetExpectedMemory (addr, size);
484+ if (!expected_memory) {
485+ llvm::consumeError (expected_memory.takeError ());
486+ return {};
487+ }
488+
489+ return *expected_memory;
490+ }
491+
492+ llvm::Expected<llvm::ArrayRef<uint8_t >> MinidumpParser::GetExpectedMemory (lldb::addr_t addr,
493+ size_t size) {
483494 std::optional<minidump::Range> range = FindMemoryRange (addr);
484495 if (!range)
485- return {};
496+ return llvm::createStringError (llvm::inconvertibleErrorCode (),
497+ " No memory range found for address {0x%" PRIx64 " }" ,
498+ addr);
486499
487500 // There's at least some overlap between the beginning of the desired range
488501 // (addr) and the current range. Figure out where the overlap begins and
@@ -491,7 +504,8 @@ llvm::ArrayRef<uint8_t> MinidumpParser::GetMemory(lldb::addr_t addr,
491504 const size_t offset = addr - range->start ;
492505
493506 if (addr < range->start || offset >= range->range_ref .size ())
494- return {};
507+ return llvm::createStringError (llvm::inconvertibleErrorCode (),
508+ " Address {0x%" PRIx64 " } is not in range [{0x%" PRIx64 " - 0x%" PRIx64 " }]" , addr, range->start , range->start + range->range_ref .size ());
495509
496510 const size_t overlap = std::min (size, range->range_ref .size () - offset);
497511 return range->range_ref .slice (offset, overlap);
0 commit comments