forked from OSchip/llvm-project
[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 llvm-svn: 315082
This commit is contained in:
parent
de42c29a68
commit
b468fd64f9
|
@ -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}
|
|
@ -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
|
|
@ -482,7 +482,9 @@ void MachODebugMapParser::loadMainBinarySymbols(
|
|||
// 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) {
|
||||
|
|
Loading…
Reference in New Issue