Skip to content

Commit ec3e290

Browse files
committed
[lldb] Log when we cannot find an equivalent for a gdb register type
This happens if the type is described elsewhere in target xml as a <flags> or <struct>. Also hardcode the function names into the log messages because if you use __FUNCTION__ in a lambda you just get "operator()". Reviewed By: clayborg Differential Revision: https://reviews.llvm.org/D134043
1 parent 01d8270 commit ec3e290

File tree

1 file changed

+15
-8
lines changed

1 file changed

+15
-8
lines changed

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

Lines changed: 15 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -4022,8 +4022,10 @@ bool ParseRegisters(XMLNode feature_node, GdbServerTargetInfo &target_info,
40224022
if (!feature_node)
40234023
return false;
40244024

4025+
Log *log(GetLog(GDBRLog::Process));
4026+
40254027
feature_node.ForEachChildElementWithName(
4026-
"reg", [&target_info, &registers](const XMLNode &reg_node) -> bool {
4028+
"reg", [&target_info, &registers, log](const XMLNode &reg_node) -> bool {
40274029
std::string gdb_group;
40284030
std::string gdb_type;
40294031
DynamicRegisterInfo::Register reg_info;
@@ -4032,9 +4034,9 @@ bool ParseRegisters(XMLNode feature_node, GdbServerTargetInfo &target_info,
40324034

40334035
// FIXME: we're silently ignoring invalid data here
40344036
reg_node.ForEachAttribute([&target_info, &gdb_group, &gdb_type,
4035-
&encoding_set, &format_set, &reg_info](
4036-
const llvm::StringRef &name,
4037-
const llvm::StringRef &value) -> bool {
4037+
&encoding_set, &format_set, &reg_info,
4038+
log](const llvm::StringRef &name,
4039+
const llvm::StringRef &value) -> bool {
40384040
if (name == "name") {
40394041
reg_info.name.SetString(value);
40404042
} else if (name == "bitsize") {
@@ -4091,10 +4093,10 @@ bool ParseRegisters(XMLNode feature_node, GdbServerTargetInfo &target_info,
40914093
SplitCommaSeparatedRegisterNumberString(
40924094
value, reg_info.invalidate_regs, 0);
40934095
} else {
4094-
Log *log(GetLog(GDBRLog::Process));
40954096
LLDB_LOGF(log,
4096-
"ProcessGDBRemote::%s unhandled reg attribute %s = %s",
4097-
__FUNCTION__, name.data(), value.data());
4097+
"ProcessGDBRemote::ParseRegisters unhandled reg "
4098+
"attribute %s = %s",
4099+
name.data(), value.data());
40984100
}
40994101
return true; // Keep iterating through all attributes
41004102
});
@@ -4116,6 +4118,12 @@ bool ParseRegisters(XMLNode feature_node, GdbServerTargetInfo &target_info,
41164118
// them as vector (similarly to xmm/ymm)
41174119
reg_info.format = eFormatVectorOfUInt8;
41184120
reg_info.encoding = eEncodingVector;
4121+
} else {
4122+
LLDB_LOGF(
4123+
log,
4124+
"ProcessGDBRemote::ParseRegisters Could not determine lldb"
4125+
"format and encoding for gdb type %s",
4126+
gdb_type.c_str());
41194127
}
41204128
}
41214129

@@ -4133,7 +4141,6 @@ bool ParseRegisters(XMLNode feature_node, GdbServerTargetInfo &target_info,
41334141
}
41344142

41354143
if (reg_info.byte_size == 0) {
4136-
Log *log(GetLog(GDBRLog::Process));
41374144
LLDB_LOGF(log,
41384145
"ProcessGDBRemote::%s Skipping zero bitsize register %s",
41394146
__FUNCTION__, reg_info.name.AsCString());

0 commit comments

Comments
 (0)