Skip to content

Commit ecfab0b

Browse files
committed
[lldb] [DynamicRegisterInfo] Support iterating over registers()
Add DynamicRegisterInfo::registers() method that returns llvm::iterator_range<> over RegisterInfos. This is a convenient replacement for GetNumRegisters() + GetRegisterInfoAtIndex(). Differential Revision: https://reviews.llvm.org/D111136
1 parent bd8741f commit ecfab0b

File tree

2 files changed

+10
-11
lines changed

2 files changed

+10
-11
lines changed

lldb/include/lldb/Target/DynamicRegisterInfo.h

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -77,9 +77,13 @@ class DynamicRegisterInfo {
7777
const lldb_private::RegisterInfo *
7878
GetRegisterInfo(llvm::StringRef reg_name) const;
7979

80+
typedef std::vector<lldb_private::RegisterInfo> reg_collection;
81+
llvm::iterator_range<reg_collection::const_iterator> registers() const {
82+
return llvm::iterator_range<reg_collection::const_iterator>(m_regs);
83+
}
84+
8085
protected:
8186
// Classes that inherit from DynamicRegisterInfo can see and modify these
82-
typedef std::vector<lldb_private::RegisterInfo> reg_collection;
8387
typedef std::vector<lldb_private::RegisterSet> set_collection;
8488
typedef std::vector<uint32_t> reg_num_collection;
8589
typedef std::vector<reg_num_collection> set_reg_num_collection;

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

Lines changed: 5 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -203,16 +203,11 @@ bool GDBRemoteRegisterContext::ReadRegisterBytes(const RegisterInfo *reg_info) {
203203
SetAllRegisterValid(true);
204204
return true;
205205
} else if (buffer_sp->GetByteSize() > 0) {
206-
const int regcount = m_reg_info_sp->GetNumRegisters();
207-
for (int i = 0; i < regcount; i++) {
208-
struct RegisterInfo *reginfo =
209-
m_reg_info_sp->GetRegisterInfoAtIndex(i);
210-
if (reginfo->byte_offset + reginfo->byte_size <=
211-
buffer_sp->GetByteSize()) {
212-
m_reg_valid[i] = true;
213-
} else {
214-
m_reg_valid[i] = false;
215-
}
206+
for (auto x : llvm::enumerate(m_reg_info_sp->registers())) {
207+
const struct RegisterInfo &reginfo = x.value();
208+
m_reg_valid[x.index()] =
209+
(reginfo.byte_offset + reginfo.byte_size <=
210+
buffer_sp->GetByteSize());
216211
}
217212

218213
m_gpacket_cached = true;

0 commit comments

Comments
 (0)