aboutsummaryrefslogtreecommitdiff
path: root/lldb/source/Plugins/ObjectFile/ELF/ObjectFileELF.cpp
diff options
context:
space:
mode:
authornerix <nerixdev@outlook.de>2025-06-09 10:46:50 +0200
committerGitHub <noreply@github.com>2025-06-09 09:46:50 +0100
commitc6670fa20d434a85e167e88aa6a4f56bfc02af2f (patch)
treeaf183d2ac93af37b5c6c157f7ee0fb96a4f68c78 /lldb/source/Plugins/ObjectFile/ELF/ObjectFileELF.cpp
parent62c9b0cab614f2d408929f9ee4280fc3c0084e08 (diff)
downloadllvm-c6670fa20d434a85e167e88aa6a4f56bfc02af2f.zip
llvm-c6670fa20d434a85e167e88aa6a4f56bfc02af2f.tar.gz
llvm-c6670fa20d434a85e167e88aa6a4f56bfc02af2f.tar.bz2
[LLDB] Unify DWARF section name matching (#141344)
Different object file formats support DWARF sections (COFF, ELF, MachO, PE/COFF, WASM). COFF and PE/COFF only matched a subset. This caused some GCC executables produced on MinGW to have issue later on when debugging. One example is that `.debug_rnglists` was not matched, which caused range-extraction to fail when printing a backtrace. This unifies the parsing of section names in `ObjectFile::GetDWARFSectionTypeFromName`, so all file formats can use the same naming convention. Since the prefixes are different, `GetDWARFSectionTypeFromName` only matches the suffixes (i.e. `.debug_` needs to be stripped before). I added two tests to ensure the sections are correctly identified on Windows executables.
Diffstat (limited to 'lldb/source/Plugins/ObjectFile/ELF/ObjectFileELF.cpp')
-rw-r--r--lldb/source/Plugins/ObjectFile/ELF/ObjectFileELF.cpp36
1 files changed, 3 insertions, 33 deletions
diff --git a/lldb/source/Plugins/ObjectFile/ELF/ObjectFileELF.cpp b/lldb/source/Plugins/ObjectFile/ELF/ObjectFileELF.cpp
index 13e1198..f69358d 100644
--- a/lldb/source/Plugins/ObjectFile/ELF/ObjectFileELF.cpp
+++ b/lldb/source/Plugins/ObjectFile/ELF/ObjectFileELF.cpp
@@ -1653,39 +1653,9 @@ lldb::user_id_t ObjectFileELF::GetSectionIndexByName(const char *name) {
}
static SectionType GetSectionTypeFromName(llvm::StringRef Name) {
- if (Name.consume_front(".debug_")) {
- return llvm::StringSwitch<SectionType>(Name)
- .Case("abbrev", eSectionTypeDWARFDebugAbbrev)
- .Case("abbrev.dwo", eSectionTypeDWARFDebugAbbrevDwo)
- .Case("addr", eSectionTypeDWARFDebugAddr)
- .Case("aranges", eSectionTypeDWARFDebugAranges)
- .Case("cu_index", eSectionTypeDWARFDebugCuIndex)
- .Case("frame", eSectionTypeDWARFDebugFrame)
- .Case("info", eSectionTypeDWARFDebugInfo)
- .Case("info.dwo", eSectionTypeDWARFDebugInfoDwo)
- .Cases("line", "line.dwo", eSectionTypeDWARFDebugLine)
- .Cases("line_str", "line_str.dwo", eSectionTypeDWARFDebugLineStr)
- .Case("loc", eSectionTypeDWARFDebugLoc)
- .Case("loc.dwo", eSectionTypeDWARFDebugLocDwo)
- .Case("loclists", eSectionTypeDWARFDebugLocLists)
- .Case("loclists.dwo", eSectionTypeDWARFDebugLocListsDwo)
- .Case("macinfo", eSectionTypeDWARFDebugMacInfo)
- .Cases("macro", "macro.dwo", eSectionTypeDWARFDebugMacro)
- .Case("names", eSectionTypeDWARFDebugNames)
- .Case("pubnames", eSectionTypeDWARFDebugPubNames)
- .Case("pubtypes", eSectionTypeDWARFDebugPubTypes)
- .Case("ranges", eSectionTypeDWARFDebugRanges)
- .Case("rnglists", eSectionTypeDWARFDebugRngLists)
- .Case("rnglists.dwo", eSectionTypeDWARFDebugRngListsDwo)
- .Case("str", eSectionTypeDWARFDebugStr)
- .Case("str.dwo", eSectionTypeDWARFDebugStrDwo)
- .Case("str_offsets", eSectionTypeDWARFDebugStrOffsets)
- .Case("str_offsets.dwo", eSectionTypeDWARFDebugStrOffsetsDwo)
- .Case("tu_index", eSectionTypeDWARFDebugTuIndex)
- .Case("types", eSectionTypeDWARFDebugTypes)
- .Case("types.dwo", eSectionTypeDWARFDebugTypesDwo)
- .Default(eSectionTypeOther);
- }
+ if (Name.consume_front(".debug_"))
+ return ObjectFile::GetDWARFSectionTypeFromName(Name);
+
return llvm::StringSwitch<SectionType>(Name)
.Case(".ARM.exidx", eSectionTypeARMexidx)
.Case(".ARM.extab", eSectionTypeARMextab)