Skip to content

Commit 66bd7c4

Browse files
[lldb][nfc] Change ProcessGDBRemote::ParseMultiMemReadPacket signature
Instead of returning an `Expected<vector<...>>` it now returns an Error, and receives a vector argument to fill in. This will be useful to support a change were ParseMultiMemReadPacket will be called multiple times in a loop with the same vector; without this change, we would have to concatenate vectors and copy memory around.
1 parent 7a43921 commit 66bd7c4

File tree

2 files changed

+15
-18
lines changed

2 files changed

+15
-18
lines changed

lldb/source/Plugins/Process/gdb-remote/ProcessGDBRemote.cpp

Lines changed: 11 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -2807,15 +2807,14 @@ ProcessGDBRemote::ReadMemoryRanges(
28072807

28082808
llvm::StringRef response_str = response->GetStringRef();
28092809
const unsigned expected_num_ranges = ranges.size();
2810-
llvm::Expected<llvm::SmallVector<llvm::MutableArrayRef<uint8_t>>>
2811-
parsed_response =
2812-
ParseMultiMemReadPacket(response_str, buffer, expected_num_ranges);
2813-
if (!parsed_response) {
2814-
LLDB_LOG_ERROR(GetLog(GDBRLog::Process), parsed_response.takeError(),
2810+
llvm::SmallVector<llvm::MutableArrayRef<uint8_t>> memory_regions;
2811+
if (llvm::Error error = ParseMultiMemReadPacket(
2812+
response_str, buffer, expected_num_ranges, memory_regions)) {
2813+
LLDB_LOG_ERROR(GetLog(GDBRLog::Process), std::move(error),
28152814
"MultiMemRead error parsing response: {0}");
28162815
return Process::ReadMemoryRanges(ranges, buffer);
28172816
}
2818-
return std::move(*parsed_response);
2817+
return memory_regions;
28192818
}
28202819

28212820
llvm::Expected<StringExtractorGDBRemote>
@@ -2851,19 +2850,17 @@ ProcessGDBRemote::SendMultiMemReadPacket(
28512850
return response;
28522851
}
28532852

2854-
llvm::Expected<llvm::SmallVector<llvm::MutableArrayRef<uint8_t>>>
2855-
ProcessGDBRemote::ParseMultiMemReadPacket(llvm::StringRef response_str,
2856-
llvm::MutableArrayRef<uint8_t> buffer,
2857-
unsigned expected_num_ranges) {
2853+
llvm::Error ProcessGDBRemote::ParseMultiMemReadPacket(
2854+
llvm::StringRef response_str, llvm::MutableArrayRef<uint8_t> buffer,
2855+
unsigned expected_num_ranges,
2856+
llvm::SmallVectorImpl<llvm::MutableArrayRef<uint8_t>> &memory_regions) {
28582857
// The sizes and the data are separated by a `;`.
28592858
auto [sizes_str, memory_data] = response_str.split(';');
28602859
if (sizes_str.size() == response_str.size())
28612860
return llvm::createStringError(llvm::formatv(
28622861
"MultiMemRead response missing field separator ';' in: '{0}'",
28632862
response_str));
28642863

2865-
llvm::SmallVector<llvm::MutableArrayRef<uint8_t>> read_results;
2866-
28672864
// Sizes are separated by a `,`.
28682865
for (llvm::StringRef size_str : llvm::split(sizes_str, ',')) {
28692866
uint64_t read_size;
@@ -2886,10 +2883,10 @@ ProcessGDBRemote::ParseMultiMemReadPacket(llvm::StringRef response_str,
28862883
buffer = buffer.drop_front(read_size);
28872884

28882885
memcpy(region_to_write.data(), region_to_read.data(), read_size);
2889-
read_results.push_back(region_to_write);
2886+
memory_regions.push_back(region_to_write);
28902887
}
28912888

2892-
return read_results;
2889+
return llvm::Error::success();
28932890
}
28942891

28952892
bool ProcessGDBRemote::SupportsMemoryTagging() {

lldb/source/Plugins/Process/gdb-remote/ProcessGDBRemote.h

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -147,10 +147,10 @@ class ProcessGDBRemote : public Process,
147147
llvm::Expected<StringExtractorGDBRemote>
148148
SendMultiMemReadPacket(llvm::ArrayRef<Range<lldb::addr_t, size_t>> ranges);
149149

150-
llvm::Expected<llvm::SmallVector<llvm::MutableArrayRef<uint8_t>>>
151-
ParseMultiMemReadPacket(llvm::StringRef response_str,
152-
llvm::MutableArrayRef<uint8_t> buffer,
153-
unsigned expected_num_ranges);
150+
llvm::Error ParseMultiMemReadPacket(
151+
llvm::StringRef response_str, llvm::MutableArrayRef<uint8_t> buffer,
152+
unsigned expected_num_ranges,
153+
llvm::SmallVectorImpl<llvm::MutableArrayRef<uint8_t>> &parsed_ranges);
154154

155155
public:
156156
Status

0 commit comments

Comments
 (0)