Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
[DWARF] Suppress split line tables more carefully.
If a given split type unit does not have source locations, don't have it refer to the split line table. If no split type unit refers to the split line table, don't emit the line table at all. This will save a little space on rare occasions, but also refactors things a bit to improve which class is responsible for what. Responding to review comments on r326395. Differential Revision: https://reviews.llvm.org/D44220 llvm-svn: 328670
- Loading branch information
Showing
8 changed files
with
118 additions
and
21 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,40 @@ | ||
; Verify that split type units with no source locations don't have a | ||
; DW_AT_stmt_list attribute, and the .debug_line.dwo section is suppressed. | ||
|
||
; RUN: llc -split-dwarf-file=foo.dwo -dwarf-version=5 -generate-type-units \ | ||
; RUN: -filetype=obj -O0 -mtriple=x86_64-unknown-linux-gnu < %s \ | ||
; RUN: | llvm-dwarfdump -v - | FileCheck %s | ||
|
||
; FIXME: V5 wants type units in .debug_info.dwo not .debug_types.dwo. | ||
; CHECK-NOT: .debug_line.dwo | ||
; CHECK: .debug_types.dwo contents: | ||
; CHECK: 0x00000000: Type Unit: {{.*}} version = 0x0005 unit_type = DW_UT_split_type abbr_offset | ||
; CHECK: 0x00000018: DW_TAG_type_unit | ||
; CHECK-NOT: DW_AT_stmt_list | ||
; CHECK-NOT: DW_AT_decl_file | ||
; CHECK-NOT: .debug_line.dwo | ||
|
||
; ModuleID = 't.cpp' | ||
source_filename = "t.cpp" | ||
target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128" | ||
target triple = "x86_64-unknown-linux-gnu" | ||
|
||
%struct.S = type { i32 } | ||
|
||
@s = global %struct.S zeroinitializer, align 4, !dbg !0 | ||
|
||
!llvm.dbg.cu = !{!2} | ||
!llvm.module.flags = !{!8, !9} | ||
!llvm.ident = !{!10} | ||
|
||
!0 = !DIGlobalVariableExpression(var: !1, expr: !DIExpression()) | ||
!1 = distinct !DIGlobalVariable(name: "s", scope: !2, file: !3, line: 5, type: !6, isLocal: false, isDefinition: true) | ||
!2 = distinct !DICompileUnit(language: DW_LANG_C_plus_plus, file: !3, producer: "clang version 5.0.0 (trunk 295942)", isOptimized: false, runtimeVersion: 0, emissionKind: FullDebug, enums: !4, globals: !5) | ||
!3 = !DIFile(filename: "t.cpp", directory: "/home/probinson/projects/scratch") | ||
!4 = !{} | ||
!5 = !{!0} | ||
!6 = distinct !DICompositeType(tag: DW_TAG_structure_type, name: "S", size: 32, elements: !7, identifier: "_ZTS1S") | ||
!7 = !{} | ||
!8 = !{i32 2, !"Dwarf Version", i32 4} | ||
!9 = !{i32 2, !"Debug Info Version", i32 3} | ||
!10 = !{!"clang version 5.0.0 (trunk 295942)"} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,57 @@ | ||
; Verify that if we have two split type units, one with source locations and | ||
; one without, the one without locations doesn't have a DW_AT_stmt_list | ||
; attribute, but the other one does and the .debug_line.dwo section is present. | ||
|
||
; RUN: llc -split-dwarf-file=foo.dwo -dwarf-version=5 -generate-type-units \ | ||
; RUN: -filetype=obj -O0 -mtriple=x86_64-unknown-linux-gnu < %s \ | ||
; RUN: | llvm-dwarfdump -v - | FileCheck %s | ||
|
||
; Currently the no-source-location type comes out first. | ||
; FIXME: V5 wants type units in .debug_info.dwo not .debug_types.dwo. | ||
; CHECK: .debug_types.dwo contents: | ||
; CHECK: 0x00000000: Type Unit: {{.*}} name = 'S' | ||
; CHECK-SAME: (next unit at [[TU2:0x[0-9a-f]+]]) | ||
; CHECK: DW_TAG_type_unit | ||
; CHECK-NOT: DW_AT_stmt_list | ||
; CHECK-NOT: DW_AT_decl_file | ||
; CHECK: [[TU2]]: Type Unit: {{.*}} name = 'T' | ||
; CHECK: DW_TAG_type_unit | ||
; CHECK: DW_AT_stmt_list | ||
; CHECK: DW_AT_decl_file | ||
|
||
; CHECK: .debug_line.dwo | ||
; CHECK-NOT: standard_opcode_lengths | ||
; CHECK: file_names[ 0]: | ||
; CHECK-NEXT: name: "t.cpp" | ||
; CHECK-NEXT: dir_index: 0 | ||
|
||
; ModuleID = 't.cpp' | ||
source_filename = "t.cpp" | ||
target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128" | ||
target triple = "x86_64-unknown-linux-gnu" | ||
|
||
%struct.S = type { i32 } | ||
%struct.T = type { i32 } | ||
|
||
@s = global %struct.S zeroinitializer, align 4, !dbg !0 | ||
@t = global %struct.T zeroinitializer, align 4, !dbg !14 | ||
|
||
!llvm.dbg.cu = !{!2} | ||
!llvm.module.flags = !{!8, !9} | ||
!llvm.ident = !{!10} | ||
|
||
!0 = !DIGlobalVariableExpression(var: !1, expr: !DIExpression()) | ||
!1 = distinct !DIGlobalVariable(name: "s", scope: !2, file: !3, line: 5, type: !6, isLocal: false, isDefinition: true) | ||
!2 = distinct !DICompileUnit(language: DW_LANG_C_plus_plus, file: !3, producer: "clang version 5.0.0 (trunk 295942)", isOptimized: false, runtimeVersion: 0, emissionKind: FullDebug, enums: !4, globals: !5) | ||
!3 = !DIFile(filename: "t.cpp", directory: "/home/probinson/projects/scratch") | ||
!4 = !{} | ||
!5 = !{!0,!14} | ||
!6 = distinct !DICompositeType(tag: DW_TAG_structure_type, name: "S", size: 32, elements: !7, identifier: "_ZTS1S") | ||
!7 = !{} | ||
!8 = !{i32 2, !"Dwarf Version", i32 4} | ||
!9 = !{i32 2, !"Debug Info Version", i32 3} | ||
!10 = !{!"clang version 5.0.0 (trunk 295942)"} | ||
!11 = distinct !DIGlobalVariable(name: "t", scope: !2, file: !3, line: 10, type: !12, isLocal: false, isDefinition: true) | ||
!12 = distinct !DICompositeType(tag: DW_TAG_structure_type, name: "T", file: !3, line: 8, size: 32, elements: !13, identifier: "_ZTS1S") | ||
!13 = !{} | ||
!14 = !DIGlobalVariableExpression(var: !11, expr: !DIExpression()) |