Skip to content

Commit 95ef690

Browse files
committed
Swap over all of GetMemory
1 parent 3ff5c27 commit 95ef690

File tree

4 files changed

+32
-29
lines changed

4 files changed

+32
-29
lines changed

lldb/source/Plugins/Process/minidump/MinidumpParser.cpp

Lines changed: 16 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -114,7 +114,13 @@ MinidumpParser::GetThreadContextWow64(const minidump::Thread &td) {
114114
// process rather than the 32-bit "guest" process we care about. In this
115115
// case, we can get the 32-bit CONTEXT from the TEB (Thread Environment
116116
// Block) of the 64-bit process.
117-
auto teb_mem = GetMemory(td.EnvironmentBlock, sizeof(TEB64));
117+
auto teb_mem_maybe = GetMemory(td.EnvironmentBlock, sizeof(TEB64));
118+
if (!teb_mem_maybe) {
119+
llvm::consumeError(teb_mem_maybe.takeError());
120+
return {};
121+
}
122+
123+
auto teb_mem = *teb_mem_maybe;
118124
if (teb_mem.empty())
119125
return {};
120126

@@ -126,8 +132,15 @@ MinidumpParser::GetThreadContextWow64(const minidump::Thread &td) {
126132
// Slot 1 of the thread-local storage in the 64-bit TEB points to a structure
127133
// that includes the 32-bit CONTEXT (after a ULONG). See:
128134
// https://msdn.microsoft.com/en-us/library/ms681670.aspx
129-
auto context =
135+
auto context_maybe =
130136
GetMemory(wow64teb->tls_slots[1] + 4, sizeof(MinidumpContext_x86_32));
137+
if (!context_maybe) {
138+
llvm::consumeError(context_maybe.takeError());
139+
return {};
140+
}
141+
142+
auto context = *context_maybe;
143+
131144
if (context.size() < sizeof(MinidumpContext_x86_32))
132145
return {};
133146

@@ -478,20 +491,8 @@ void MinidumpParser::PopulateMemoryRanges() {
478491
m_memory_ranges.Sort();
479492
}
480493

481-
llvm::ArrayRef<uint8_t> MinidumpParser::GetMemory(lldb::addr_t addr,
482-
size_t size) {
483-
llvm::Expected<llvm::ArrayRef<uint8_t>> expected_memory =
484-
GetExpectedMemory(addr, size);
485-
if (!expected_memory) {
486-
llvm::consumeError(expected_memory.takeError());
487-
return {};
488-
}
489-
490-
return *expected_memory;
491-
}
492-
493494
llvm::Expected<llvm::ArrayRef<uint8_t>>
494-
MinidumpParser::GetExpectedMemory(lldb::addr_t addr, size_t size) {
495+
MinidumpParser::GetMemory(lldb::addr_t addr, size_t size) {
495496
std::optional<minidump::Range> range = FindMemoryRange(addr);
496497
if (!range)
497498
return llvm::createStringError(

lldb/source/Plugins/Process/minidump/MinidumpParser.h

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -104,9 +104,8 @@ class MinidumpParser {
104104

105105
std::optional<Range> FindMemoryRange(lldb::addr_t addr);
106106

107-
llvm::ArrayRef<uint8_t> GetMemory(lldb::addr_t addr, size_t size);
108-
llvm::Expected<llvm::ArrayRef<uint8_t>> GetExpectedMemory(lldb::addr_t addr,
109-
size_t size);
107+
llvm::Expected<llvm::ArrayRef<uint8_t>> GetMemory(lldb::addr_t addr,
108+
size_t size);
110109

111110
/// Returns a list of memory regions and a flag indicating whether the list is
112111
/// complete (includes all regions mapped into the process memory).

lldb/source/Plugins/Process/minidump/ProcessMinidump.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -323,7 +323,7 @@ size_t ProcessMinidump::DoReadMemory(lldb::addr_t addr, void *buf, size_t size,
323323
Status &error) {
324324

325325
llvm::Expected<llvm::ArrayRef<uint8_t>> mem_maybe =
326-
m_minidump_parser->GetExpectedMemory(addr, size);
326+
m_minidump_parser->GetMemory(addr, size);
327327
if (!mem_maybe) {
328328
error = Status::FromError(mem_maybe.takeError());
329329
return 0;

lldb/unittests/Process/minidump/MinidumpParserTest.cpp

Lines changed: 13 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -308,16 +308,19 @@ TEST_F(MinidumpParserTest, GetMemory) {
308308
)"),
309309
llvm::Succeeded());
310310

311-
EXPECT_EQ((llvm::ArrayRef<uint8_t>{0x54}), parser->GetMemory(0x401d46, 1));
312-
EXPECT_EQ((llvm::ArrayRef<uint8_t>{0x54, 0x21}),
313-
parser->GetMemory(0x401d46, 4));
314-
315-
EXPECT_EQ((llvm::ArrayRef<uint8_t>{0xc8, 0x4d, 0x04, 0xbc, 0xe9}),
316-
parser->GetMemory(0x7ffceb34a000, 5));
317-
EXPECT_EQ((llvm::ArrayRef<uint8_t>{0xc8, 0x4d, 0x04}),
318-
parser->GetMemory(0x7ffceb34a000, 3));
319-
320-
EXPECT_EQ(llvm::ArrayRef<uint8_t>(), parser->GetMemory(0x500000, 512));
311+
EXPECT_THAT_EXPECTED(parser->GetMemory(0x401d46, 1),
312+
llvm::HasValue(llvm::ArrayRef<uint8_t>{0x54}));
313+
EXPECT_THAT_EXPECTED(parser->GetMemory(0x401d46, 4),
314+
llvm::HasValue(llvm::ArrayRef<uint8_t>{0x54, 0x21}));
315+
EXPECT_THAT_EXPECTED(
316+
parser->GetMemory(0x7ffceb34a000, 5),
317+
llvm::HasValue(llvm::ArrayRef<uint8_t>{0xc8, 0x4d, 0x04, 0xbc, 0xe9}));
318+
EXPECT_THAT_EXPECTED(
319+
parser->GetMemory(0x7ffceb34a000, 3),
320+
llvm::HasValue(llvm::ArrayRef<uint8_t>{0xc8, 0x4d, 0x04}));
321+
EXPECT_THAT_EXPECTED(
322+
parser->GetMemory(0x500000, 512),
323+
llvm::FailedWithMessage("No memory range found for address (0x500000)"));
321324
}
322325

323326
TEST_F(MinidumpParserTest, FindMemoryRangeWithFullMemoryMinidump) {

0 commit comments

Comments
 (0)