Skip to content

Commit 52aae17

Browse files
fixup! Add test for reading fewer bytes than requested
1 parent 1bcac34 commit 52aae17

File tree

1 file changed

+39
-13
lines changed

1 file changed

+39
-13
lines changed

lldb/unittests/Target/MemoryTest.cpp

Lines changed: 39 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -231,8 +231,16 @@ TEST_F(MemoryTest, TesetMemoryCacheRead) {
231231
/// the least significant byte of X.
232232
class DummyReaderProcess : public Process {
233233
public:
234+
// If true, `DoReadMemory` will not return all requested bytes.
235+
// It's not possible to control exactly how many bytes will be read, because
236+
// Process::ReadMemoryFromInferior tries to fulfill the entire request by
237+
// reading smaller chunks until it gets nothing back.
238+
bool read_less_than_requested = false;
239+
234240
size_t DoReadMemory(lldb::addr_t vm_addr, void *buf, size_t size,
235241
Status &error) override {
242+
if (read_less_than_requested && size > 0)
243+
size--;
236244
uint8_t *buffer = static_cast<uint8_t *>(buf);
237245
for (size_t addr = vm_addr; addr < vm_addr + size; addr++)
238246
buffer[addr - vm_addr] = static_cast<uint8_t>(addr); // LSB of addr.
@@ -264,21 +272,39 @@ TEST_F(MemoryTest, TestReadMemoryRanges) {
264272
std::make_shared<DummyReaderProcess>(target_sp, listener_sp);
265273
ASSERT_TRUE(process_sp);
266274

267-
llvm::SmallVector<uint8_t, 0> buffer(1024, 0);
268275

269-
// Read 8 ranges of 128 bytes with arbitrary base addresses.
270-
llvm::SmallVector<Range<addr_t, size_t>> ranges = {
271-
{0x12345, 128}, {0x11112222, 128}, {0x77777777, 128},
272-
{0xffaabbccdd, 128}, {0x0, 128}, {0x4242424242, 128},
273-
{0x17171717, 128}, {0x99999, 128}};
276+
{
277+
llvm::SmallVector<uint8_t, 0> buffer(1024, 0);
278+
// Read 8 ranges of 128 bytes with arbitrary base addresses.
279+
llvm::SmallVector<Range<addr_t, size_t>> ranges = {
280+
{0x12345, 128}, {0x11112222, 128}, {0x77777777, 128},
281+
{0xffaabbccdd, 128}, {0x0, 128}, {0x4242424242, 128},
282+
{0x17171717, 128}, {0x99999, 128}};
274283

275-
llvm::SmallVector<llvm::MutableArrayRef<uint8_t>> read_results =
276-
process_sp->ReadMemoryRanges(ranges, buffer);
284+
llvm::SmallVector<llvm::MutableArrayRef<uint8_t>> read_results =
285+
process_sp->ReadMemoryRanges(ranges, buffer);
277286

278-
for (auto [range, memory] : llvm::zip(ranges, read_results)) {
279-
ASSERT_EQ(memory.size(), 128u);
280-
addr_t range_base = range.GetRangeBase();
281-
for (auto [idx, byte] : llvm::enumerate(memory))
282-
ASSERT_EQ(byte, static_cast<uint8_t>(range_base + idx));
287+
for (auto [range, memory] : llvm::zip(ranges, read_results)) {
288+
ASSERT_EQ(memory.size(), 128u);
289+
addr_t range_base = range.GetRangeBase();
290+
for (auto [idx, byte] : llvm::enumerate(memory))
291+
ASSERT_EQ(byte, static_cast<uint8_t>(range_base + idx));
292+
}
293+
}
294+
295+
auto &dummy_process = static_cast<DummyReaderProcess&>(*process_sp);
296+
dummy_process.read_less_than_requested = true;
297+
{
298+
llvm::SmallVector<uint8_t, 0> buffer(1024, 0);
299+
llvm::SmallVector<Range<addr_t, size_t>> ranges = {
300+
{0x12345, 128}, {0x11112222, 128}, {0x77777777, 128}};
301+
llvm::SmallVector<llvm::MutableArrayRef<uint8_t>> read_results =
302+
dummy_process.ReadMemoryRanges(ranges, buffer);
303+
for (auto [range, memory] : llvm::zip(ranges, read_results)) {
304+
ASSERT_LT(memory.size(), 128u);
305+
addr_t range_base = range.GetRangeBase();
306+
for (auto [idx, byte] : llvm::enumerate(memory))
307+
ASSERT_EQ(byte, static_cast<uint8_t>(range_base + idx));
308+
}
283309
}
284310
}

0 commit comments

Comments
 (0)