From 3c19b4f34d6a2a2fb628a3db9225a5167e363234 Mon Sep 17 00:00:00 2001 From: Jez Ng Date: Fri, 5 Mar 2021 17:22:57 -0500 Subject: [PATCH] [lld-macho] Skip over symbols in un-parsed debug info sections clang appears to emit symbols in `__debug_aranges`, at least for arm64... in the examples I've seen, it doesn't seem like those symbols are referenced outside of `__DWARF`, so I think they're safe to ignore. But hopefully @clayborg can confirm. Reviewed By: clayborg Differential Revision: https://reviews.llvm.org/D98073 --- lld/MachO/InputFiles.cpp | 6 +++++- lld/MachO/SyntheticSections.cpp | 2 ++ lld/test/MachO/stabs.s | 4 ++++ 3 files changed, 11 insertions(+), 1 deletion(-) diff --git a/lld/MachO/InputFiles.cpp b/lld/MachO/InputFiles.cpp index ed3e73e..a426a8c 100644 --- a/lld/MachO/InputFiles.cpp +++ b/lld/MachO/InputFiles.cpp @@ -407,7 +407,11 @@ void ObjFile::parseSymbols(ArrayRef nList, const section_64 &sec = sectionHeaders[sym.n_sect - 1]; SubsectionMap &subsecMap = subsections[sym.n_sect - 1]; - assert(!subsecMap.empty()); + + // parseSections() may have chosen not to parse this section. + if (subsecMap.empty()) + continue; + uint64_t offset = sym.n_value - sec.addr; // If the input file does not use subsections-via-symbols, all symbols can diff --git a/lld/MachO/SyntheticSections.cpp b/lld/MachO/SyntheticSections.cpp index 49f5def..b38ffea 100644 --- a/lld/MachO/SyntheticSections.cpp +++ b/lld/MachO/SyntheticSections.cpp @@ -733,6 +733,8 @@ void SymtabSection::finalizeContents() { for (InputFile *file : inputFiles) { if (auto *objFile = dyn_cast(file)) { for (Symbol *sym : objFile->symbols) { + if (sym == nullptr) + continue; // TODO: when we implement -dead_strip, we should filter out symbols // that belong to dead sections. if (auto *defined = dyn_cast(sym)) { diff --git a/lld/test/MachO/stabs.s b/lld/test/MachO/stabs.s index ad9dacc..09735fe 100644 --- a/lld/test/MachO/stabs.s +++ b/lld/test/MachO/stabs.s @@ -181,6 +181,10 @@ Ldebug_info_end0: .subsections_via_symbols .section __DWARF,__debug_line,regular,debug +.section __DWARF,__debug_aranges,regular,debug +ltmp1: + .byte 0 + #--- no-debug.s ## This file has no debug info. .text -- 2.7.4