[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
This commit is contained in:
Jez Ng 2021-03-05 17:22:57 -05:00
parent fc011b5eb1
commit 3c19b4f34d
3 changed files with 11 additions and 1 deletions

View File

@ -407,7 +407,11 @@ void ObjFile::parseSymbols(ArrayRef<structs::nlist_64> 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

View File

@ -733,6 +733,8 @@ void SymtabSection::finalizeContents() {
for (InputFile *file : inputFiles) {
if (auto *objFile = dyn_cast<ObjFile>(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<Defined>(sym)) {

View File

@ -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