[Lldb-commits] [lldb] 1704c8d - [lldb][MachO] Fix section type recognition for new DWARF 5 sections
Felipe de Azevedo Piovezan via lldb-commits
lldb-commits at lists.llvm.org
Wed Jun 21 10:25:25 PDT 2023
Author: Felipe de Azevedo Piovezan
Date: 2023-06-21T13:25:10-04:00
New Revision: 1704c8d1047d75e0f17736de146281d68fe7b203
URL: https://github.com/llvm/llvm-project/commit/1704c8d1047d75e0f17736de146281d68fe7b203
DIFF: https://github.com/llvm/llvm-project/commit/1704c8d1047d75e0f17736de146281d68fe7b203.diff
LOG: [lldb][MachO] Fix section type recognition for new DWARF 5 sections
When LLDB needs to access a debug section, it generally calls
SectionList::FindSectionByType with the corresponding type (we have one type for
each DWARF section). However, the missing entries made some sections be
classified as "eSectionTypeOther", which makes all calls to `FindSectionByType`
fail.
With this patch, a check-lldb build with
`-DLLDB_TEST_USER_ARGS=--dwarf-version=5` reports a much lower number of
failures:
Unsupported : 327
Passed : 2423
Expectedly Failed: 16
Unresolved : 2
Failed : 52
This is down from previously 400~ failures.
Differential Revision: https://reviews.llvm.org/D153433
Added:
Modified:
lldb/source/Plugins/ObjectFile/Mach-O/ObjectFileMachO.cpp
Removed:
################################################################################
diff --git a/lldb/source/Plugins/ObjectFile/Mach-O/ObjectFileMachO.cpp b/lldb/source/Plugins/ObjectFile/Mach-O/ObjectFileMachO.cpp
index 5fddb4e6eadd0..ce904b0a9c7a0 100644
--- a/lldb/source/Plugins/ObjectFile/Mach-O/ObjectFileMachO.cpp
+++ b/lldb/source/Plugins/ObjectFile/Mach-O/ObjectFileMachO.cpp
@@ -1439,19 +1439,32 @@ static lldb::SectionType GetSectionType(uint32_t flags,
static ConstString g_sect_name_cfstring("__cfstring");
static ConstString g_sect_name_dwarf_debug_abbrev("__debug_abbrev");
+ static ConstString g_sect_name_dwarf_debug_abbrev_dwo("__debug_abbrev.dwo");
+ static ConstString g_sect_name_dwarf_debug_addr("__debug_addr");
static ConstString g_sect_name_dwarf_debug_aranges("__debug_aranges");
+ static ConstString g_sect_name_dwarf_debug_cu_index("__debug_cu_index");
static ConstString g_sect_name_dwarf_debug_frame("__debug_frame");
static ConstString g_sect_name_dwarf_debug_info("__debug_info");
+ static ConstString g_sect_name_dwarf_debug_info_dwo("__debug_info.dwo");
static ConstString g_sect_name_dwarf_debug_line("__debug_line");
+ static ConstString g_sect_name_dwarf_debug_line_dwo("__debug_line.dwo");
static ConstString g_sect_name_dwarf_debug_line_str("__debug_line_str");
static ConstString g_sect_name_dwarf_debug_loc("__debug_loc");
static ConstString g_sect_name_dwarf_debug_loclists("__debug_loclists");
+ static ConstString g_sect_name_dwarf_debug_loclists_dwo("__debug_loclists.dwo");
static ConstString g_sect_name_dwarf_debug_macinfo("__debug_macinfo");
+ static ConstString g_sect_name_dwarf_debug_macro("__debug_macro");
+ static ConstString g_sect_name_dwarf_debug_macro_dwo("__debug_macro.dwo");
static ConstString g_sect_name_dwarf_debug_names("__debug_names");
static ConstString g_sect_name_dwarf_debug_pubnames("__debug_pubnames");
static ConstString g_sect_name_dwarf_debug_pubtypes("__debug_pubtypes");
static ConstString g_sect_name_dwarf_debug_ranges("__debug_ranges");
+ static ConstString g_sect_name_dwarf_debug_rnglists("__debug_rnglists");
static ConstString g_sect_name_dwarf_debug_str("__debug_str");
+ static ConstString g_sect_name_dwarf_debug_str_dwo("__debug_str.dwo");
+ static ConstString g_sect_name_dwarf_debug_str_offs("__debug_str_offs");
+ static ConstString g_sect_name_dwarf_debug_str_offs_dwo("__debug_str_offs.dwo");
+ static ConstString g_sect_name_dwarf_debug_tu_index("__debug_tu_index");
static ConstString g_sect_name_dwarf_debug_types("__debug_types");
static ConstString g_sect_name_dwarf_apple_names("__apple_names");
static ConstString g_sect_name_dwarf_apple_types("__apple_types");
@@ -1465,22 +1478,38 @@ static lldb::SectionType GetSectionType(uint32_t flags,
if (section_name == g_sect_name_dwarf_debug_abbrev)
return eSectionTypeDWARFDebugAbbrev;
+ if (section_name == g_sect_name_dwarf_debug_abbrev_dwo)
+ return eSectionTypeDWARFDebugAbbrevDwo;
+ if (section_name == g_sect_name_dwarf_debug_addr)
+ return eSectionTypeDWARFDebugAddr;
if (section_name == g_sect_name_dwarf_debug_aranges)
return eSectionTypeDWARFDebugAranges;
+ if (section_name == g_sect_name_dwarf_debug_cu_index)
+ return eSectionTypeDWARFDebugCuIndex;
if (section_name == g_sect_name_dwarf_debug_frame)
return eSectionTypeDWARFDebugFrame;
if (section_name == g_sect_name_dwarf_debug_info)
return eSectionTypeDWARFDebugInfo;
+ if (section_name == g_sect_name_dwarf_debug_info_dwo)
+ return eSectionTypeDWARFDebugInfoDwo;
if (section_name == g_sect_name_dwarf_debug_line)
return eSectionTypeDWARFDebugLine;
+ if (section_name == g_sect_name_dwarf_debug_line_dwo)
+ return eSectionTypeDWARFDebugLine; // Same as debug_line.
if (section_name == g_sect_name_dwarf_debug_line_str)
return eSectionTypeDWARFDebugLineStr;
if (section_name == g_sect_name_dwarf_debug_loc)
return eSectionTypeDWARFDebugLoc;
if (section_name == g_sect_name_dwarf_debug_loclists)
return eSectionTypeDWARFDebugLocLists;
+ if (section_name == g_sect_name_dwarf_debug_loclists_dwo)
+ return eSectionTypeDWARFDebugLocListsDwo;
if (section_name == g_sect_name_dwarf_debug_macinfo)
return eSectionTypeDWARFDebugMacInfo;
+ if (section_name == g_sect_name_dwarf_debug_macro)
+ return eSectionTypeDWARFDebugMacro;
+ if (section_name == g_sect_name_dwarf_debug_macro_dwo)
+ return eSectionTypeDWARFDebugMacInfo; // Same as debug_macro.
if (section_name == g_sect_name_dwarf_debug_names)
return eSectionTypeDWARFDebugNames;
if (section_name == g_sect_name_dwarf_debug_pubnames)
@@ -1489,8 +1518,18 @@ static lldb::SectionType GetSectionType(uint32_t flags,
return eSectionTypeDWARFDebugPubTypes;
if (section_name == g_sect_name_dwarf_debug_ranges)
return eSectionTypeDWARFDebugRanges;
+ if (section_name == g_sect_name_dwarf_debug_rnglists)
+ return eSectionTypeDWARFDebugRngLists;
if (section_name == g_sect_name_dwarf_debug_str)
return eSectionTypeDWARFDebugStr;
+ if (section_name == g_sect_name_dwarf_debug_str_dwo)
+ return eSectionTypeDWARFDebugStrDwo;
+ if (section_name == g_sect_name_dwarf_debug_str_offs)
+ return eSectionTypeDWARFDebugStrOffsets;
+ if (section_name == g_sect_name_dwarf_debug_str_offs_dwo)
+ return eSectionTypeDWARFDebugStrOffsetsDwo;
+ if (section_name == g_sect_name_dwarf_debug_tu_index)
+ return eSectionTypeDWARFDebugTuIndex;
if (section_name == g_sect_name_dwarf_debug_types)
return eSectionTypeDWARFDebugTypes;
if (section_name == g_sect_name_dwarf_apple_names)
More information about the lldb-commits
mailing list