[lld-macho] Skip over symbols in un-parsed debug info sections
authorJez Ng <jezng@fb.com>
Fri, 5 Mar 2021 22:22:57 +0000 (17:22 -0500)
committerJez Ng <jezng@fb.com>
Fri, 5 Mar 2021 22:24:32 +0000 (17:24 -0500)
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
lld/MachO/SyntheticSections.cpp
lld/test/MachO/stabs.s

index ed3e73e..a426a8c 100644 (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
index 49f5def..b38ffea 100644 (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)) {
index ad9dacc..09735fe 100644 (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