diff --git a/llvm/test/tools/dsymutil/X86/swift-ast-x86_64.test b/llvm/test/tools/dsymutil/X86/swift-ast-x86_64.test index 55fe2c314a6a6d5eef70d16155cf0a9ce6f0e622..0ba86800f7bd9ac325e04f87525b3107e403184e 100644 --- a/llvm/test/tools/dsymutil/X86/swift-ast-x86_64.test +++ b/llvm/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/llvm/tools/dsymutil/MachOUtils.cpp b/llvm/tools/dsymutil/MachOUtils.cpp index 3f736115d7f5770ee6bf0ff03427c7f4b41e66c6..0f38525e45c207ad7a75481e61ab3b0b76dd57fe 100644 --- a/llvm/tools/dsymutil/MachOUtils.cpp +++ b/llvm/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');