Author: Felipe de Azevedo Piovezan Date: 2025-12-12T16:07:09Z New Revision: 66f2b6625e14c2b424304d2d4f0867eccb3f352b
URL: https://github.com/llvm/llvm-project/commit/66f2b6625e14c2b424304d2d4f0867eccb3f352b DIFF: https://github.com/llvm/llvm-project/commit/66f2b6625e14c2b424304d2d4f0867eccb3f352b.diff LOG: [lldb][nfc] Change ProcessGDBRemote::ParseMultiMemReadPacket signature (#172020) 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. Added: Modified: lldb/source/Plugins/Process/gdb-remote/ProcessGDBRemote.cpp lldb/source/Plugins/Process/gdb-remote/ProcessGDBRemote.h Removed: ################################################################################ diff --git a/lldb/source/Plugins/Process/gdb-remote/ProcessGDBRemote.cpp b/lldb/source/Plugins/Process/gdb-remote/ProcessGDBRemote.cpp index b976b53c035b0..d1b0ead74701b 100644 --- a/lldb/source/Plugins/Process/gdb-remote/ProcessGDBRemote.cpp +++ b/lldb/source/Plugins/Process/gdb-remote/ProcessGDBRemote.cpp @@ -2807,15 +2807,14 @@ ProcessGDBRemote::ReadMemoryRanges( llvm::StringRef response_str = response->GetStringRef(); const unsigned expected_num_ranges = ranges.size(); - llvm::Expected<llvm::SmallVector<llvm::MutableArrayRef<uint8_t>>> - parsed_response = - ParseMultiMemReadPacket(response_str, buffer, expected_num_ranges); - if (!parsed_response) { - LLDB_LOG_ERROR(GetLog(GDBRLog::Process), parsed_response.takeError(), + llvm::SmallVector<llvm::MutableArrayRef<uint8_t>> memory_regions; + if (llvm::Error error = ParseMultiMemReadPacket( + response_str, buffer, expected_num_ranges, memory_regions)) { + LLDB_LOG_ERROR(GetLog(GDBRLog::Process), std::move(error), "MultiMemRead error parsing response: {0}"); return Process::ReadMemoryRanges(ranges, buffer); } - return std::move(*parsed_response); + return memory_regions; } llvm::Expected<StringExtractorGDBRemote> @@ -2851,10 +2850,10 @@ ProcessGDBRemote::SendMultiMemReadPacket( return response; } -llvm::Expected<llvm::SmallVector<llvm::MutableArrayRef<uint8_t>>> -ProcessGDBRemote::ParseMultiMemReadPacket(llvm::StringRef response_str, - llvm::MutableArrayRef<uint8_t> buffer, - unsigned expected_num_ranges) { +llvm::Error ProcessGDBRemote::ParseMultiMemReadPacket( + llvm::StringRef response_str, llvm::MutableArrayRef<uint8_t> buffer, + unsigned expected_num_ranges, + llvm::SmallVectorImpl<llvm::MutableArrayRef<uint8_t>> &memory_regions) { // The sizes and the data are separated by a `;`. auto [sizes_str, memory_data] = response_str.split(';'); if (sizes_str.size() == response_str.size()) @@ -2862,8 +2861,6 @@ ProcessGDBRemote::ParseMultiMemReadPacket(llvm::StringRef response_str, "MultiMemRead response missing field separator ';' in: '{0}'", response_str)); - llvm::SmallVector<llvm::MutableArrayRef<uint8_t>> read_results; - // Sizes are separated by a `,`. for (llvm::StringRef size_str : llvm::split(sizes_str, ',')) { uint64_t read_size; @@ -2886,10 +2883,10 @@ ProcessGDBRemote::ParseMultiMemReadPacket(llvm::StringRef response_str, buffer = buffer.drop_front(read_size); memcpy(region_to_write.data(), region_to_read.data(), read_size); - read_results.push_back(region_to_write); + memory_regions.push_back(region_to_write); } - return read_results; + return llvm::Error::success(); } bool ProcessGDBRemote::SupportsMemoryTagging() { diff --git a/lldb/source/Plugins/Process/gdb-remote/ProcessGDBRemote.h b/lldb/source/Plugins/Process/gdb-remote/ProcessGDBRemote.h index b7e8777c9e12e..db3c43284587b 100644 --- a/lldb/source/Plugins/Process/gdb-remote/ProcessGDBRemote.h +++ b/lldb/source/Plugins/Process/gdb-remote/ProcessGDBRemote.h @@ -147,10 +147,10 @@ class ProcessGDBRemote : public Process, llvm::Expected<StringExtractorGDBRemote> SendMultiMemReadPacket(llvm::ArrayRef<Range<lldb::addr_t, size_t>> ranges); - llvm::Expected<llvm::SmallVector<llvm::MutableArrayRef<uint8_t>>> - ParseMultiMemReadPacket(llvm::StringRef response_str, - llvm::MutableArrayRef<uint8_t> buffer, - unsigned expected_num_ranges); + llvm::Error ParseMultiMemReadPacket( + llvm::StringRef response_str, llvm::MutableArrayRef<uint8_t> buffer, + unsigned expected_num_ranges, + llvm::SmallVectorImpl<llvm::MutableArrayRef<uint8_t>> &memory_regions); public: Status _______________________________________________ lldb-commits mailing list [email protected] https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits
