Author: Michał Górny Date: 2021-09-26T21:23:26+02:00 New Revision: e2f780fba96c55b0dcb7aa3c4719110875b36dfb
URL: https://github.com/llvm/llvm-project/commit/e2f780fba96c55b0dcb7aa3c4719110875b36dfb DIFF: https://github.com/llvm/llvm-project/commit/e2f780fba96c55b0dcb7aa3c4719110875b36dfb.diff LOG: [lldb] [gdb-remote] Use llvm::StringRef.split() and llvm::to_integer() Replace the uses of StringConvert combined with hand-rolled array splitting with llvm::StringRef.split() and llvm::to_integer(). Differential Revision: https://reviews.llvm.org/D110472 Added: Modified: lldb/source/Plugins/Process/gdb-remote/GDBRemoteCommunicationClient.cpp 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/GDBRemoteCommunicationClient.cpp b/lldb/source/Plugins/Process/gdb-remote/GDBRemoteCommunicationClient.cpp index bf4baf7b7a266..6d2a267f294c1 100644 --- a/lldb/source/Plugins/Process/gdb-remote/GDBRemoteCommunicationClient.cpp +++ b/lldb/source/Plugins/Process/gdb-remote/GDBRemoteCommunicationClient.cpp @@ -16,7 +16,6 @@ #include "lldb/Core/ModuleSpec.h" #include "lldb/Host/HostInfo.h" -#include "lldb/Host/StringConvert.h" #include "lldb/Host/XML.h" #include "lldb/Symbol/Symbol.h" #include "lldb/Target/MemoryRegionInfo.h" @@ -1660,22 +1659,15 @@ Status GDBRemoteCommunicationClient::GetMemoryRegionInfo( error_extractor.GetHexByteString(error_string); error.SetErrorString(error_string.c_str()); } else if (name.equals("dirty-pages")) { + llvm::SmallVector<llvm::StringRef, 16> split_value; std::vector<addr_t> dirty_page_list; - std::string comma_sep_str = value.str(); - size_t comma_pos; - addr_t page; - while ((comma_pos = comma_sep_str.find(',')) != std::string::npos) { - comma_sep_str[comma_pos] = '\0'; - page = StringConvert::ToUInt64(comma_sep_str.c_str(), - LLDB_INVALID_ADDRESS, 16); - if (page != LLDB_INVALID_ADDRESS) + value.split(split_value, ','); + for (llvm::StringRef x : split_value) { + addr_t page; + x.consume_front("0x"); + if (llvm::to_integer(x, page, 16)) dirty_page_list.push_back(page); - comma_sep_str.erase(0, comma_pos + 1); } - page = StringConvert::ToUInt64(comma_sep_str.c_str(), - LLDB_INVALID_ADDRESS, 16); - if (page != LLDB_INVALID_ADDRESS) - dirty_page_list.push_back(page); region_info.SetDirtyPageList(dirty_page_list); } } diff --git a/lldb/source/Plugins/Process/gdb-remote/ProcessGDBRemote.cpp b/lldb/source/Plugins/Process/gdb-remote/ProcessGDBRemote.cpp index ad49f9ddad2cc..2c1b4fa319ffa 100644 --- a/lldb/source/Plugins/Process/gdb-remote/ProcessGDBRemote.cpp +++ b/lldb/source/Plugins/Process/gdb-remote/ProcessGDBRemote.cpp @@ -43,7 +43,6 @@ #include "lldb/Host/HostThread.h" #include "lldb/Host/PosixApi.h" #include "lldb/Host/PseudoTerminal.h" -#include "lldb/Host/StringConvert.h" #include "lldb/Host/ThreadLauncher.h" #include "lldb/Host/XML.h" #include "lldb/Interpreter/CommandInterpreter.h" @@ -381,20 +380,16 @@ bool ProcessGDBRemote::ParsePythonTargetDefinition( } static size_t SplitCommaSeparatedRegisterNumberString( - const llvm::StringRef &comma_separated_regiter_numbers, + const llvm::StringRef &comma_separated_register_numbers, std::vector<uint32_t> ®nums, int base) { regnums.clear(); - std::pair<llvm::StringRef, llvm::StringRef> value_pair; - value_pair.second = comma_separated_regiter_numbers; - do { - value_pair = value_pair.second.split(','); - if (!value_pair.first.empty()) { - uint32_t reg = StringConvert::ToUInt32(value_pair.first.str().c_str(), - LLDB_INVALID_REGNUM, base); - if (reg != LLDB_INVALID_REGNUM) - regnums.push_back(reg); - } - } while (!value_pair.second.empty()); + llvm::SmallVector<llvm::StringRef, 4> split_string; + comma_separated_register_numbers.split(split_string, ','); + for (llvm::StringRef x : split_string) { + uint32_t reg; + if (llvm::to_integer(x, reg, base)) + regnums.push_back(reg); + } return regnums.size(); } @@ -1459,21 +1454,16 @@ size_t ProcessGDBRemote::UpdateThreadIDsFromStopReplyThreadsValue( return m_thread_ids.size(); } -size_t -ProcessGDBRemote::UpdateThreadPCsFromStopReplyThreadsValue(std::string &value) { +size_t ProcessGDBRemote::UpdateThreadPCsFromStopReplyThreadsValue( + llvm::StringRef value) { m_thread_pcs.clear(); - size_t comma_pos; - lldb::addr_t pc; - while ((comma_pos = value.find(',')) != std::string::npos) { - value[comma_pos] = '\0'; - pc = StringConvert::ToUInt64(value.c_str(), LLDB_INVALID_ADDRESS, 16); - if (pc != LLDB_INVALID_ADDRESS) + llvm::SmallVector<llvm::StringRef, 16> split_value; + value.split(split_value, ','); + for (llvm::StringRef x : split_value) { + lldb::addr_t pc; + if (llvm::to_integer(x, pc, 16)) m_thread_pcs.push_back(pc); - value.erase(0, comma_pos + 1); } - pc = StringConvert::ToUInt64(value.c_str(), LLDB_INVALID_ADDRESS, 16); - if (pc != LLDB_INVALID_ADDRESS) - m_thread_pcs.push_back(pc); return m_thread_pcs.size(); } diff --git a/lldb/source/Plugins/Process/gdb-remote/ProcessGDBRemote.h b/lldb/source/Plugins/Process/gdb-remote/ProcessGDBRemote.h index 2a5178b08fc04..b4eb8e5a6b982 100644 --- a/lldb/source/Plugins/Process/gdb-remote/ProcessGDBRemote.h +++ b/lldb/source/Plugins/Process/gdb-remote/ProcessGDBRemote.h @@ -359,7 +359,7 @@ class ProcessGDBRemote : public Process, bool CalculateThreadStopInfo(ThreadGDBRemote *thread); - size_t UpdateThreadPCsFromStopReplyThreadsValue(std::string &value); + size_t UpdateThreadPCsFromStopReplyThreadsValue(llvm::StringRef value); size_t UpdateThreadIDsFromStopReplyThreadsValue(llvm::StringRef value); _______________________________________________ lldb-commits mailing list lldb-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits