-
Notifications
You must be signed in to change notification settings - Fork 10.7k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
DebugInfo: Rebuild dwp debug_info index column from v5 indexes more r…
…obustly the v4 rebuilding is a best-effort because it's not possible to reliably parse the DWO ID as it requires the abbrev section (& if the index isn't trustworthy then there's no way to find the associated abbrev section contribution for a given info section contribution) But in v5 the DWO ID/type signature is in the header and can be rebuilt losslessly (only at the cost of performance of rescanning/parsing the headers of all the units), so let's implement that. the testing isn't /ideal/ - I think the testing should've been implemented as a hardcoded dwp file with a corrupted/incorrect index, then the test could've demonstrated that reparsing the index produces the right answer - but this is a quick port of the existing v5 test back to v4 so that we don't lose coverage on the v4 codepath now that it's separated from the v5 codepath. Differential Revision: https://reviews.llvm.org/D146662
- Loading branch information
Showing
2 changed files
with
132 additions
and
4 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
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,79 @@ | ||
# This test checks if we can correctly parse manull cu and tu index for DWARF4. | ||
|
||
# RUN: llvm-mc -triple x86_64-unknown-linux %s -filetype=obj -o %t.o \ | ||
# RUN: -split-dwarf-file=%t.dwo -dwarf-version=4 | ||
# RUN: llvm-dwp %t.dwo -o %t.dwp | ||
# RUN: llvm-dwarfdump -debug-info -debug-types -debug-cu-index -debug-tu-index %t.dwp | FileCheck %s | ||
# RUN: llvm-dwarfdump -debug-info -debug-types -debug-cu-index -debug-tu-index -manaully-generate-unit-index %t.dwp | FileCheck %s | ||
|
||
## Note: In order to check whether the type unit index is generated | ||
## there is no need to add the missing DIEs for the structure type of the type unit. | ||
|
||
# CHECK-DAG: .debug_info.dwo contents: | ||
# CHECK: 0x00000000: Compile Unit: length = 0x00000010, format = DWARF32, version = 0x0004, abbr_offset = 0x0000, addr_size = 0x08 (next unit at 0x00000014) | ||
# CHECK: DW_AT_GNU_dwo_id ([[CUID1:.*]]) | ||
# CHECK-DAG: .debug_types.dwo contents: | ||
# CHECK: 0x00000000: Type Unit: length = 0x00000016, format = DWARF32, version = 0x0004, abbr_offset = 0x0000, addr_size = 0x08, name = '', type_signature = [[TUID1:.*]], type_offset = 0x0019 (next unit at 0x0000001a) | ||
# CHECK: 0x0000001a: Type Unit: length = 0x00000016, format = DWARF32, version = 0x0004, abbr_offset = 0x0000, addr_size = 0x08, name = '', type_signature = [[TUID2:.*]], type_offset = 0x0019 (next unit at 0x00000034) | ||
# CHECK-DAG: .debug_cu_index contents: | ||
# CHECK: version = 2, units = 1, slots = 2 | ||
# CHECK: Index Signature INFO ABBREV | ||
# CHECK: 2 [[CUID1]] [0x0000000000000000, 0x0000000000000014) [0x00000000, 0x00000013) | ||
# CHECK-DAG: .debug_tu_index contents: | ||
# CHECK: version = 2, units = 2, slots = 4 | ||
# CHECK: Index Signature TYPES ABBREV | ||
# CHECK: 1 [[TUID1]] [0x0000000000000000, 0x000000000000001a) [0x00000000, 0x00000013) | ||
# CHECK: 4 [[TUID2]] [0x000000000000001a, 0x0000000000000034) [0x00000000, 0x00000013) | ||
|
||
.section .debug_types.dwo,"e",@progbits | ||
.long .Ldebug_info_dwo_end0-.Ldebug_info_dwo_start0 # Length of Unit | ||
.Ldebug_info_dwo_start0: | ||
.short 4 # DWARF version number | ||
.long 0 # Offset Into Abbrev. Section | ||
.byte 8 # Address Size (in bytes) | ||
.quad 5657452045627120676 # Type Signature | ||
.long 25 # Type DIE Offset | ||
.byte 2 # Abbrev [2] DW_TAG_type_unit | ||
.byte 3 # Abbrev [3] DW_TAG_structure_type | ||
.byte 0 # End Of Children Mark | ||
.Ldebug_info_dwo_end0: | ||
.section .debug_types.dwo,"e",@progbits | ||
.long .Ldebug_info_dwo_end1-.Ldebug_info_dwo_start1 # Length of Unit | ||
.Ldebug_info_dwo_start1: | ||
.short 4 # DWARF version number | ||
.long 0 # Offset Into Abbrev. Section | ||
.byte 8 # Address Size (in bytes) | ||
.quad -8528522068957683993 # Type Signature | ||
.long 25 # Type DIE Offset | ||
.byte 2 # Abbrev [2] DW_TAG_type_unit | ||
.byte 3 # Abbrev [3] DW_TAG_structure_type | ||
.byte 0 # End Of Children Mark | ||
.Ldebug_info_dwo_end1: | ||
.section .debug_info.dwo,"e",@progbits | ||
.long .Ldebug_info_dwo_end2-.Ldebug_info_dwo_start2 # Length of Unit | ||
.Ldebug_info_dwo_start2: | ||
.short 4 # DWARF version number | ||
.long 0 # Offset Into Abbrev. Section | ||
.byte 8 # Address Size (in bytes) | ||
.byte 1 # Abbrev [1] DW_TAG_compile_unit | ||
.quad -6619898858003450627 # DW_AT_GNU_dwo_id | ||
.Ldebug_info_dwo_end2: | ||
.section .debug_abbrev.dwo,"e",@progbits | ||
.byte 1 # Abbreviation Code | ||
.byte 17 # DW_TAG_compile_unit | ||
.byte 0 # DW_CHILDREN_no | ||
.ascii "\261B" # DW_AT_GNU_dwo_id | ||
.byte 7 # DW_FORM_data8 | ||
.byte 0 # EOM(1) | ||
.byte 0 # EOM(2) | ||
.byte 2 # Abbreviation Code | ||
.byte 65 # DW_TAG_type_unit | ||
.byte 1 # DW_CHILDREN_yes | ||
.byte 0 # EOM | ||
.byte 0 # EOM | ||
.byte 3 # Abbreviation Code | ||
.byte 0x13 # DW_TAG_structure_unit | ||
.byte 0 # DW_CHILDREN_no | ||
.byte 0 # EOM | ||
.byte 0 # EOM | ||
.byte 0 # EOM |