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');