From b33381e7992af1d64e4beb12140bd3526289322c Mon Sep 17 00:00:00 2001 From: Jonas Devlieghere Date: Fri, 5 Jun 2020 08:39:02 -0700 Subject: [PATCH] [dsymutil] Don't emit N_AST symbol entries in the Mach-O companion file Treat N_AST symbol table entries like other debug entries and don't emit them in the linked binary. Differential revision: https://reviews.llvm.org/D81205 --- test/tools/dsymutil/X86/swift-ast-x86_64.test | 3 +++ tools/dsymutil/MachOUtils.cpp | 8 ++++++++ 2 files changed, 11 insertions(+) diff --git a/test/tools/dsymutil/X86/swift-ast-x86_64.test b/test/tools/dsymutil/X86/swift-ast-x86_64.test index 55fe2c314a6..0ba86800f7b 100644 --- a/test/tools/dsymutil/X86/swift-ast-x86_64.test +++ b/test/tools/dsymutil/X86/swift-ast-x86_64.test @@ -18,3 +18,6 @@ READOBJ-NEXT: |.| RUN: dsymutil -oso-prepend-path %p/.. %p/../Inputs/swift-ast.macho.x86_64 -no-output -verbose 2>&1 | FileCheck %s --check-prefix=TIMESTAMP TIMESTAMP: warning: Timestamp mismatch + +RUN: dsymutil -s %T/swift-ast.dSYM/Contents/Resources/DWARF/swift-ast.macho.x86_64 | FileCheck %s --check-prefix=NAST +NAST-NOT: N_AST diff --git a/tools/dsymutil/MachOUtils.cpp b/tools/dsymutil/MachOUtils.cpp index 3f736115d7f..0f38525e45c 100644 --- a/tools/dsymutil/MachOUtils.cpp +++ b/tools/dsymutil/MachOUtils.cpp @@ -163,7 +163,15 @@ static bool transferSymbol(NListTy NList, bool IsLittleEndian, if ((NList.n_type & MachO::N_TYPE) == MachO::N_UNDF) return false; + // Do not transfer N_AST symbols as their content is copied into a section of + // the Mach-O companion file. + if (NList.n_type == MachO::N_AST) + return false; + StringRef Name = StringRef(Strings.begin() + NList.n_strx); + + // An N_SO with a filename opens a debugging scope and another one without a + // name closes it. Don't transfer anything in the debugging scope. if (InDebugNote) { InDebugNote = (NList.n_type != MachO::N_SO) || (!Name.empty() && Name[0] != '\0');