aboutsummaryrefslogtreecommitdiff
path: root/test/tools
diff options
context:
space:
mode:
authorFrancis Ricci <francisjricci@gmail.com>2017-10-06 17:43:37 +0000
committerFrancis Ricci <francisjricci@gmail.com>2017-10-06 17:43:37 +0000
commit066f09ec5988007b65291528e292a26ef7582a8f (patch)
treebec6e58cceb361e34011f084e30dac9955fc5f70 /test/tools
parent287608ccc376fbc64dc319796139e5381438a1e5 (diff)
downloadllvm-066f09ec5988007b65291528e292a26ef7582a8f.tar.gz
[dsymutil] Emit valid debug locations when no symbol flags are set
Summary: swiftc emits symbols without flags set, which led dsymutil to ignore them when searching for global symbols, causing dwarf location data to be omitted. Xcode's dsymutil handles this case correctly, and emits valid location data. Add this functionality to llvm-dsymutil by allowing parsing of symbols with no flags set. Reviewers: aprantl, friss, JDevlieghere Subscribers: llvm-commits Differential Revision: https://reviews.llvm.org/D38587 git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@315082 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'test/tools')
-rw-r--r--test/tools/dsymutil/Inputs/swift-dwarf-loc.ll25
-rw-r--r--test/tools/dsymutil/X86/swift-dwarf-loc.test9
2 files changed, 34 insertions, 0 deletions
diff --git a/test/tools/dsymutil/Inputs/swift-dwarf-loc.ll b/test/tools/dsymutil/Inputs/swift-dwarf-loc.ll
new file mode 100644
index 00000000000..c2e70508c9d
--- /dev/null
+++ b/test/tools/dsymutil/Inputs/swift-dwarf-loc.ll
@@ -0,0 +1,25 @@
+; 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 }>
+
+@_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}
diff --git a/test/tools/dsymutil/X86/swift-dwarf-loc.test b/test/tools/dsymutil/X86/swift-dwarf-loc.test
new file mode 100644
index 00000000000..c8e8afc7411
--- /dev/null
+++ b/test/tools/dsymutil/X86/swift-dwarf-loc.test
@@ -0,0 +1,9 @@
+RUN: llc -filetype=obj %p/../Inputs/swift-dwarf-loc.ll -mtriple x86_64-apple-darwin -o %T/swift-dwarf-loc.o
+RUN: ld -dylib %T/swift-dwarf-loc.o -arch x86_64 -lSystem -macosx_version_min 10.9.0 -o %T/swift-dwarf-loc
+RUN: llvm-dsymutil %T/swift-dwarf-loc -no-output -verbose | FileCheck %s
+
+This test checks that dsymutil generates a valid dwarf location for a symbol with no flags set.
+
+CHECK: __var,
+CHECK-NOT: __var,{{.*}}binAddr: 0x0000000000000000
+CHECK-NOT: __var{{.*}} => 0000000000000000