mgorny updated this revision to Diff 398447.
mgorny added a comment.
Improve macro formatting while it's still hot.
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D116896/new/
https://reviews.llvm.org/D116896
Files:
lldb/source/Plugins/Process/gdb-remote/ProcessGDBRemote.cpp
Index: lldb/source/Plugins/Process/gdb-remote/ProcessGDBRemote.cpp
===================================================================
--- lldb/source/Plugins/Process/gdb-remote/ProcessGDBRemote.cpp
+++ lldb/source/Plugins/Process/gdb-remote/ProcessGDBRemote.cpp
@@ -375,6 +375,36 @@
return regnums.size();
}
+static std::vector<DynamicRegisterInfo::Register> GetRegisters_x86_64() {
+ ConstString empty_alt_name;
+ ConstString reg_set{"general purpose registers"};
+
+#define R64(name)
\
+ DynamicRegisterInfo::Register {
\
+ ConstString(#name), empty_alt_name, reg_set, 8, LLDB_INVALID_INDEX32,
\
+ lldb::eEncodingUint, lldb::eFormatHex, LLDB_INVALID_REGNUM,
\
+ LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, {}, {}
\
+ }
+#define R32(name)
\
+ DynamicRegisterInfo::Register {
\
+ ConstString(#name), empty_alt_name, reg_set, 4, LLDB_INVALID_INDEX32,
\
+ lldb::eEncodingUint, lldb::eFormatHex, LLDB_INVALID_REGNUM,
\
+ LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, {}, {}
\
+ }
+
+ std::vector<DynamicRegisterInfo::Register> registers{
+ R64(rax), R64(rbx), R64(rcx), R64(rdx), R64(rsi), R64(rdi),
+ R64(rbp), R64(rsp), R64(r8), R64(r9), R64(r10), R64(r11),
+ R64(r12), R64(r13), R64(r14), R64(r15), R64(rip), R32(eflags),
+ R32(cs), R32(ss), R32(ds), R32(es), R32(fs), R32(gs),
+ };
+
+#undef R32
+#undef R64
+
+ return registers;
+}
+
void ProcessGDBRemote::BuildDynamicRegisterInfo(bool force) {
if (!force && m_register_info_sp)
return;
@@ -394,6 +424,7 @@
// 2 - If the target definition doesn't have any of the info from the
// target.xml (registers) then proceed to read the target.xml.
// 3 - Fall back on the qRegisterInfo packets.
+ // 4 - Use hardcoded defaults if available.
FileSpec target_definition_fspec =
GetGlobalPluginProperties().GetTargetDefinitionFile();
@@ -507,6 +538,18 @@
}
}
+ if (registers.empty()) {
+ switch (arch_to_use.GetMachine()) {
+ case llvm::Triple::x86:
+ break;
+ case llvm::Triple::x86_64:
+ registers = GetRegisters_x86_64();
+ break;
+ default:
+ break;
+ }
+ }
+
AddRemoteRegisters(registers, arch_to_use);
}
Index: lldb/source/Plugins/Process/gdb-remote/ProcessGDBRemote.cpp
===================================================================
--- lldb/source/Plugins/Process/gdb-remote/ProcessGDBRemote.cpp
+++ lldb/source/Plugins/Process/gdb-remote/ProcessGDBRemote.cpp
@@ -375,6 +375,36 @@
return regnums.size();
}
+static std::vector<DynamicRegisterInfo::Register> GetRegisters_x86_64() {
+ ConstString empty_alt_name;
+ ConstString reg_set{"general purpose registers"};
+
+#define R64(name) \
+ DynamicRegisterInfo::Register { \
+ ConstString(#name), empty_alt_name, reg_set, 8, LLDB_INVALID_INDEX32, \
+ lldb::eEncodingUint, lldb::eFormatHex, LLDB_INVALID_REGNUM, \
+ LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, {}, {} \
+ }
+#define R32(name) \
+ DynamicRegisterInfo::Register { \
+ ConstString(#name), empty_alt_name, reg_set, 4, LLDB_INVALID_INDEX32, \
+ lldb::eEncodingUint, lldb::eFormatHex, LLDB_INVALID_REGNUM, \
+ LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, {}, {} \
+ }
+
+ std::vector<DynamicRegisterInfo::Register> registers{
+ R64(rax), R64(rbx), R64(rcx), R64(rdx), R64(rsi), R64(rdi),
+ R64(rbp), R64(rsp), R64(r8), R64(r9), R64(r10), R64(r11),
+ R64(r12), R64(r13), R64(r14), R64(r15), R64(rip), R32(eflags),
+ R32(cs), R32(ss), R32(ds), R32(es), R32(fs), R32(gs),
+ };
+
+#undef R32
+#undef R64
+
+ return registers;
+}
+
void ProcessGDBRemote::BuildDynamicRegisterInfo(bool force) {
if (!force && m_register_info_sp)
return;
@@ -394,6 +424,7 @@
// 2 - If the target definition doesn't have any of the info from the
// target.xml (registers) then proceed to read the target.xml.
// 3 - Fall back on the qRegisterInfo packets.
+ // 4 - Use hardcoded defaults if available.
FileSpec target_definition_fspec =
GetGlobalPluginProperties().GetTargetDefinitionFile();
@@ -507,6 +538,18 @@
}
}
+ if (registers.empty()) {
+ switch (arch_to_use.GetMachine()) {
+ case llvm::Triple::x86:
+ break;
+ case llvm::Triple::x86_64:
+ registers = GetRegisters_x86_64();
+ break;
+ default:
+ break;
+ }
+ }
+
AddRemoteRegisters(registers, arch_to_use);
}
_______________________________________________
lldb-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits