From ce0c205813c74b4225180ac8a6e40fd52ea88229 Mon Sep 17 00:00:00 2001 From: David Blaikie Date: Mon, 29 May 2017 00:48:45 +0000 Subject: DebugInfo: Include .dwo file name when hashing multiple CUs in a single file This is really a workaround for ThinLTO in particular - since it can import partial CUs that may end up looking very similar/the same as the same partial import in another ThinLTO compile. An alternative fix would be to change the DICompileUnit metadata to include a "primary file" or the like - and when importing for ThinLTO set the primary file to the name of the DICompileUnit that is being imported into. This involves changing the schema and would reduce the excessive uniqueness in the hash that this change creates - allowing diagnosing of more duplicate CUs than will be caught with this change. But duplicate CUs can still be caught in non-ThinLTO builds & are mostly a nuisance rather than a particularly deliberate/effective tool for finding broken code. (arguably the hash could always include the dwo file and nothing in fission would break, I think..) llvm-svn: 304119 --- .../Generic/split-dwarf-multiple-cu-hash.ll | 40 ++++++++++++++++++++++ 1 file changed, 40 insertions(+) create mode 100644 llvm/test/DebugInfo/Generic/split-dwarf-multiple-cu-hash.ll (limited to 'llvm/test/DebugInfo/Generic') diff --git a/llvm/test/DebugInfo/Generic/split-dwarf-multiple-cu-hash.ll b/llvm/test/DebugInfo/Generic/split-dwarf-multiple-cu-hash.ll new file mode 100644 index 00000000000..a6a83d82f3c --- /dev/null +++ b/llvm/test/DebugInfo/Generic/split-dwarf-multiple-cu-hash.ll @@ -0,0 +1,40 @@ +; RUN: %llc_dwarf -split-dwarf-file=foo.dwo %s -filetype=obj -o %T/a.o +; RUN: %llc_dwarf -split-dwarf-file=bar.dwo %s -filetype=obj -o %T/b.o +; RUN: llvm-dwarfdump -debug-dump=info %T/a.o %T/b.o | FileCheck %s + +; CHECK: dwo_id {{.*}}([[HASH:.*]]) +; CHECK-NOT: dwo_id {{.*}}([[HASH]]) + +; Function Attrs: noinline nounwind uwtable +define void @_Z1av() #0 !dbg !9 { +entry: + ret void, !dbg !12 +} + +; Function Attrs: noinline nounwind uwtable +define void @_Z1bv() #0 !dbg !13 { +entry: + ret void, !dbg !14 +} + +attributes #0 = { noinline nounwind uwtable "correctly-rounded-divide-sqrt-fp-math"="false" "disable-tail-calls"="false" "less-precise-fpmad"="false" "no-frame-pointer-elim"="true" "no-frame-pointer-elim-non-leaf" "no-infs-fp-math"="false" "no-jump-tables"="false" "no-nans-fp-math"="false" "no-signed-zeros-fp-math"="false" "no-trapping-math"="false" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+fxsr,+mmx,+sse,+sse2,+x87" "unsafe-fp-math"="false" "use-soft-float"="false" } + +!llvm.dbg.cu = !{!0, !3} +!llvm.ident = !{!5, !5} +!llvm.module.flags = !{!6, !7, !8} + +!0 = distinct !DICompileUnit(language: DW_LANG_C_plus_plus, file: !1, producer: "clang version 5.0.0 (trunk 304107) (llvm/trunk 304109)", isOptimized: false, runtimeVersion: 0, emissionKind: FullDebug, enums: !2) +!1 = !DIFile(filename: "a.cpp", directory: "/usr/local/google/home/blaikie/dev/scratch") +!2 = !{} +!3 = distinct !DICompileUnit(language: DW_LANG_C_plus_plus, file: !4, producer: "clang version 5.0.0 (trunk 304107) (llvm/trunk 304109)", isOptimized: false, runtimeVersion: 0, emissionKind: FullDebug, enums: !2) +!4 = !DIFile(filename: "b.cpp", directory: "/usr/local/google/home/blaikie/dev/scratch") +!5 = !{!"clang version 5.0.0 (trunk 304107) (llvm/trunk 304109)"} +!6 = !{i32 2, !"Dwarf Version", i32 4} +!7 = !{i32 2, !"Debug Info Version", i32 3} +!8 = !{i32 1, !"wchar_size", i32 4} +!9 = distinct !DISubprogram(name: "a", linkageName: "_Z1av", scope: !1, file: !1, line: 1, type: !10, isLocal: false, isDefinition: true, scopeLine: 1, flags: DIFlagPrototyped, isOptimized: false, unit: !0, variables: !2) +!10 = !DISubroutineType(types: !11) +!11 = !{null} +!12 = !DILocation(line: 2, column: 1, scope: !9) +!13 = distinct !DISubprogram(name: "b", linkageName: "_Z1bv", scope: !4, file: !4, line: 1, type: !10, isLocal: false, isDefinition: true, scopeLine: 1, flags: DIFlagPrototyped, isOptimized: false, unit: !3, variables: !2) +!14 = !DILocation(line: 2, column: 1, scope: !13) -- cgit v1.2.3