[Lldb-commits] [lldb] e2f780f - [lldb] [gdb-remote] Use llvm::StringRef.split() and llvm::to_integer()
Michał Górny via lldb-commits
lldb-commits at lists.llvm.org
Sun Sep 26 12:23:47 PDT 2021
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);
More information about the lldb-commits
mailing list