aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorWalter Erquinigo <walter@modular.com>2024-08-29 18:41:01 +0000
committerwalter erquinigo <walter@modular.com>2024-08-30 16:30:00 -0400
commitb14b9126c92c548574a38c3142f482d4c0e65529 (patch)
tree73f41a8cb1acfb9502acd4d492359b0705c24022
parent3ef64f7ab5b8651eab500cd944984379fce5f639 (diff)
downloadllvm-users/modular/24.5.zip
llvm-users/modular/24.5.tar.gz
llvm-users/modular/24.5.tar.bz2
[LLDB][DWARF] Add an option to silence unsupported DW_FORM warningsusers/modular/24.5
My build of LLDB is all the time loading targets with a version of libc++ that was built with gcc that uses the DW_FORM 0x1e that is not implemented by LLVM, and I doubt it'll ever implement it. It's used for some 128 bit encoding of numbers, which is just very weird. Because of this, LLDB is showing some warnings all the time for my users, so I'm adding a flag to control the enablement of this warning.
-rw-r--r--lldb/source/Plugins/SymbolFile/DWARF/SymbolFileDWARF.cpp30
-rw-r--r--lldb/source/Plugins/SymbolFile/DWARF/SymbolFileDWARFProperties.td4
2 files changed, 23 insertions, 11 deletions
diff --git a/lldb/source/Plugins/SymbolFile/DWARF/SymbolFileDWARF.cpp b/lldb/source/Plugins/SymbolFile/DWARF/SymbolFileDWARF.cpp
index 7e0cf36..cb2625a 100644
--- a/lldb/source/Plugins/SymbolFile/DWARF/SymbolFileDWARF.cpp
+++ b/lldb/source/Plugins/SymbolFile/DWARF/SymbolFileDWARF.cpp
@@ -87,7 +87,7 @@
#include <cctype>
#include <cstring>
-//#define ENABLE_DEBUG_PRINTF // COMMENT OUT THIS LINE PRIOR TO CHECKIN
+// #define ENABLE_DEBUG_PRINTF // COMMENT OUT THIS LINE PRIOR TO CHECKIN
#ifdef ENABLE_DEBUG_PRINTF
#include <cstdio>
@@ -129,6 +129,11 @@ public:
bool IgnoreFileIndexes() const {
return GetPropertyAtIndexAs<bool>(ePropertyIgnoreIndexes, false);
}
+
+ bool EmitUnsupportedDWFormValueWarning() const {
+ return GetPropertyAtIndexAs<bool>(
+ ePropertyEmitUnsupportedDWFormValueWarning, true);
+ }
};
} // namespace
@@ -624,12 +629,14 @@ uint32_t SymbolFileDWARF::CalculateAbilities() {
llvm::DWARFDebugAbbrev *abbrev = DebugAbbrev();
std::set<dw_form_t> unsupported_forms = GetUnsupportedForms(abbrev);
if (!unsupported_forms.empty()) {
- StreamString error;
- error.Printf("unsupported DW_FORM value%s:",
- unsupported_forms.size() > 1 ? "s" : "");
- for (auto form : unsupported_forms)
- error.Printf(" %#x", form);
- m_objfile_sp->GetModule()->ReportWarning("{0}", error.GetString());
+ if (GetGlobalPluginProperties().EmitUnsupportedDWFormValueWarning()) {
+ StreamString error;
+ error.Printf("unsupported DW_FORM value%s:",
+ unsupported_forms.size() > 1 ? "s" : "");
+ for (auto form : unsupported_forms)
+ error.Printf(" %#x", form);
+ m_objfile_sp->GetModule()->ReportWarning("{0}", error.GetString());
+ }
return 0;
}
@@ -1770,16 +1777,17 @@ SymbolFileDWARF *SymbolFileDWARF::GetDIERefSymbolFile(const DIERef &die_ref) {
return this;
if (file_index) {
- // We have a SymbolFileDWARFDebugMap, so let it find the right file
+ // We have a SymbolFileDWARFDebugMap, so let it find the right file
if (SymbolFileDWARFDebugMap *debug_map = GetDebugMapSymfile())
return debug_map->GetSymbolFileByOSOIndex(*file_index);
-
+
// Handle the .dwp file case correctly
if (*file_index == DIERef::k_file_index_mask)
return GetDwpSymbolFile().get(); // DWP case
// Handle the .dwo file case correctly
- return DebugInfo().GetUnitAtIndex(*die_ref.file_index())
+ return DebugInfo()
+ .GetUnitAtIndex(*die_ref.file_index())
->GetDwoSymbolFile(); // DWO case
}
return this;
@@ -3594,7 +3602,7 @@ VariableSP SymbolFileDWARF::ParseVariableDIE(const SymbolContext &sc,
lldb::addr_t location_DW_OP_addr = LLDB_INVALID_ADDRESS;
if (!location_is_const_value_data) {
bool op_error = false;
- const DWARFExpression* location = location_list.GetAlwaysValidExpr();
+ const DWARFExpression *location = location_list.GetAlwaysValidExpr();
if (location)
location_DW_OP_addr =
location->GetLocation_DW_OP_addr(location_form.GetUnit(), op_error);
diff --git a/lldb/source/Plugins/SymbolFile/DWARF/SymbolFileDWARFProperties.td b/lldb/source/Plugins/SymbolFile/DWARF/SymbolFileDWARFProperties.td
index 2f1ce88..0f980a5 100644
--- a/lldb/source/Plugins/SymbolFile/DWARF/SymbolFileDWARFProperties.td
+++ b/lldb/source/Plugins/SymbolFile/DWARF/SymbolFileDWARFProperties.td
@@ -5,4 +5,8 @@ let Definition = "symbolfiledwarf" in {
Global,
DefaultFalse,
Desc<"Ignore indexes present in the object files and always index DWARF manually.">;
+ def EmitUnsupportedDWFormValueWarning: Property<"emit-unsupported-dwform-value", "Boolean">,
+ Global,
+ DefaultTrue,
+ Desc<"Emit warnings about unsupported DW_Form values.">;
}