[PATCH] D38587: [dsymutil] Emit valid debug locations when no symbol flags are set

Francis Ricci via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Fri Oct 6 11:31:06 PDT 2017


fjricci updated this revision to Diff 118050.
fjricci added a comment.

Use precompiled binary with IR as a comment to allow testing on linux


https://reviews.llvm.org/D38587

Files:
  test/tools/dsymutil/Inputs/swift-dwarf-loc.macho.x86_64
  test/tools/dsymutil/X86/swift-dwarf-loc.test
  tools/dsymutil/MachODebugMapParser.cpp


Index: tools/dsymutil/MachODebugMapParser.cpp
===================================================================
--- tools/dsymutil/MachODebugMapParser.cpp
+++ tools/dsymutil/MachODebugMapParser.cpp
@@ -482,7 +482,9 @@
     // are the only ones that need to be queried because the address
     // of common data won't be described in the debug map. All other
     // addresses should be fetched for the debug map.
-    if (!(Sym.getFlags() & SymbolRef::SF_Global))
+    uint8_t SymType =
+        MainBinary.getSymbolTableEntry(Sym.getRawDataRefImpl()).n_type;
+    if (!(SymType & (MachO::N_EXT | MachO::N_PEXT)))
       continue;
     Expected<section_iterator> SectionOrErr = Sym.getSection();
     if (!SectionOrErr) {
Index: test/tools/dsymutil/X86/swift-dwarf-loc.test
===================================================================
--- /dev/null
+++ test/tools/dsymutil/X86/swift-dwarf-loc.test
@@ -0,0 +1,37 @@
+RUN: llvm-dsymutil %T/swift-dwarf-loc.macho.x86_64 -no-output -verbose | FileCheck %s
+
+This test checks that dsymutil generates a valid dwarf location for a symbol with no flags set.
+
+The following IR was compiled for x86_64-apple:
+; ModuleID = '-'
+source_filename = "-"
+target datalayout = "e-m:o-i64:64-f80:128-n8:16:32:64-S128"
+target triple = "x86_64-apple-macosx10.12"
+
+%TSi = type <{ i64 }>
+
+ at _var = hidden global %TSi zeroinitializer, align 8, !dbg !0
+
+!llvm.dbg.cu = !{!8}
+!llvm.module.flags = !{!11, !12}
+
+!0 = !DIGlobalVariableExpression(var: !1, expr: !DIExpression())
+!1 = distinct !DIGlobalVariable(name: "x", linkageName: "_var", scope: !2, file: !3, line: 1, type: !4, isLocal: false, isDefinition: true)
+!2 = !DIModule(scope: null, name: "main")
+!3 = !DIFile(filename: "<stdin>", directory: "")
+!4 = !DICompositeType(tag: DW_TAG_structure_type, name: "Int", scope: !6, file: !5, size: 64, elements: !7, runtimeLang: DW_LANG_Swift, identifier: "_T0SiD")
+!5 = !DIFile(filename: "foo", directory: "/tmp")
+!6 = !DIModule(scope: null, name: "foo", includePath: "")
+!7 = !{}
+!8 = distinct !DICompileUnit(language: DW_LANG_Swift, file: !9, producer: "swiftc", isOptimized: false, flags: "", runtimeVersion: 4, emissionKind: FullDebug, enums: !7, globals: !10, imports: null)
+!9 = !DIFile(filename: "/tmp", directory: "")
+!10 = !{!0}
+!11 = !{i32 2, !"Dwarf Version", i32 4}
+!12 = !{i32 2, !"Debug Info Version", i32 3}
+
+Compiled with: llc -filetype=obj %p/../Inputs/swift-dwarf-loc.ll -mtriple x86_64-apple-darwin
+Linked with: ld -dylib %T/swift-dwarf-loc.o -arch x86_64 -lSystem -macosx_version_min 10.9.0
+
+CHECK: __var,
+CHECK-NOT: __var,{{.*}}binAddr: 0x0000000000000000
+CHECK-NOT: __var{{.*}} => 0000000000000000


-------------- next part --------------
A non-text attachment was scrubbed...
Name: D38587.118050.patch
Type: text/x-patch
Size: 2685 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20171006/f8f19a69/attachment.bin>


More information about the llvm-commits mailing list