Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
libDebugInfoDWARF: Don't try to parse loclist[.dwo] headers when pars…
…ing debug_info[.dwo] There's no way to know whether there's a loclist contribution to parse if there's no loclistx encoding - and if there is one, there's no need to walk back from the loclist_base (or, uin the case of info.dwo/loclist.dwo - starting at 0 in the contribution) to parse the header, instead rely on the DWARF32/64 and address size in the CU that's already available. This would come up in split DWARF (non-split wouldn't try to read a loclist header in the absence of a loclist_base) when one unit had location lists and another does not (because the loclists.dwo section would be non-empty in that case - in the case where it's empty the parsing would silently skip). Simplify the testing a bit, rather than needing a whole dwp, etc - by creating a malformed loclists.dwo section (and use single file Split DWARF) that would trip up any attempt to parse it - but no attempt should be made.
- Loading branch information
Showing
3 changed files
with
265 additions
and
76 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
230 changes: 230 additions & 0 deletions
230
llvm/test/tools/llvm-dwarfdump/X86/debug_loclists_unused_invalid.s
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,230 @@ | ||
# REQUIRES: x86-registered-target | ||
|
||
# RUN: rm -rf %t | ||
# RUN: mkdir %t | ||
# RUN: cd %t | ||
# RUN: llvm-mc %s -dwarf-version=5 -filetype obj -triple x86_64-pc-linux -o main.o | ||
# RUN: llvm-dwarfdump main.o 2>&1 | FileCheck %s | ||
|
||
# CHECK: .debug_info.dwo contents: | ||
# CHECK-NEXT: Compile Unit: | ||
# CHECK-EMPTY: | ||
# CHECK-NEXT: compile_unit | ||
|
||
.text | ||
.file "main.cpp" | ||
.globl main # -- Begin function main | ||
.p2align 4, 0x90 | ||
.type main,@function | ||
main: # @main | ||
.Lfunc_begin0: | ||
.file 0 "/usr/local/google/home/blaikie/dev/scratch" "main.cpp" md5 0x277b2d67900f5d0f46c9638ad2528ff1 | ||
.loc 0 1 0 # main.cpp:1:0 | ||
.cfi_startproc | ||
# %bb.0: # %entry | ||
pushq %rbp | ||
.cfi_def_cfa_offset 16 | ||
.cfi_offset %rbp, -16 | ||
movq %rsp, %rbp | ||
.cfi_def_cfa_register %rbp | ||
xorl %eax, %eax | ||
.Ltmp0: | ||
.loc 0 2 1 prologue_end # main.cpp:2:1 | ||
popq %rbp | ||
.cfi_def_cfa %rsp, 8 | ||
retq | ||
.Ltmp1: | ||
.Lfunc_end0: | ||
.size main, .Lfunc_end0-main | ||
.cfi_endproc | ||
# -- End function | ||
.section .debug_abbrev,"",@progbits | ||
.byte 1 # Abbreviation Code | ||
.byte 74 # DW_TAG_skeleton_unit | ||
.byte 0 # DW_CHILDREN_no | ||
.byte 16 # DW_AT_stmt_list | ||
.byte 23 # DW_FORM_sec_offset | ||
.byte 114 # DW_AT_str_offsets_base | ||
.byte 23 # DW_FORM_sec_offset | ||
.byte 27 # DW_AT_comp_dir | ||
.byte 37 # DW_FORM_strx1 | ||
.ascii "\264B" # DW_AT_GNU_pubnames | ||
.byte 25 # DW_FORM_flag_present | ||
.byte 118 # DW_AT_dwo_name | ||
.byte 37 # DW_FORM_strx1 | ||
.byte 17 # DW_AT_low_pc | ||
.byte 27 # DW_FORM_addrx | ||
.byte 18 # DW_AT_high_pc | ||
.byte 6 # DW_FORM_data4 | ||
.byte 115 # DW_AT_addr_base | ||
.byte 23 # DW_FORM_sec_offset | ||
.byte 0 # EOM(1) | ||
.byte 0 # EOM(2) | ||
.byte 0 # EOM(3) | ||
.section .debug_info,"",@progbits | ||
.Lcu_begin0: | ||
.long .Ldebug_info_end0-.Ldebug_info_start0 # Length of Unit | ||
.Ldebug_info_start0: | ||
.short 5 # DWARF version number | ||
.byte 4 # DWARF Unit Type | ||
.byte 8 # Address Size (in bytes) | ||
.long .debug_abbrev # Offset Into Abbrev. Section | ||
.quad 6318074710904753300 | ||
.byte 1 # Abbrev [1] 0x14:0x14 DW_TAG_skeleton_unit | ||
.long .Lline_table_start0 # DW_AT_stmt_list | ||
.long .Lstr_offsets_base0 # DW_AT_str_offsets_base | ||
.byte 0 # DW_AT_comp_dir | ||
# DW_AT_GNU_pubnames | ||
.byte 1 # DW_AT_dwo_name | ||
.byte 0 # DW_AT_low_pc | ||
.long .Lfunc_end0-.Lfunc_begin0 # DW_AT_high_pc | ||
.long .Laddr_table_base0 # DW_AT_addr_base | ||
.Ldebug_info_end0: | ||
.section .debug_str_offsets,"",@progbits | ||
.long 12 # Length of String Offsets Set | ||
.short 5 | ||
.short 0 | ||
.Lstr_offsets_base0: | ||
.section .debug_str,"MS",@progbits,1 | ||
.Lskel_string0: | ||
.asciz "" # string offset=0 | ||
.Lskel_string1: | ||
.asciz "main.o" # string offset=43 | ||
.section .debug_str_offsets,"",@progbits | ||
.long .Lskel_string0 | ||
.long .Lskel_string1 | ||
.section .debug_str_offsets.dwo,"e",@progbits | ||
.long 24 # Length of String Offsets Set | ||
.short 5 | ||
.short 0 | ||
.section .debug_str.dwo,"eMS",@progbits,1 | ||
.Linfo_string0: | ||
.asciz "main" # string offset=0 | ||
.Linfo_string1: | ||
.asciz "int" # string offset=5 | ||
.Linfo_string2: | ||
.asciz "clang version 12.0.0 (git@github.com:llvm/llvm-project.git 9a33f027ac7d73e14ae287e78ab554142d1cbc8f)" # string offset=9 | ||
.Linfo_string3: | ||
.asciz "main.cpp" # string offset=110 | ||
.Linfo_string4: | ||
.asciz "main.s" # string offset=119 | ||
.section .debug_str_offsets.dwo,"e",@progbits | ||
.long 0 | ||
.long 5 | ||
.long 9 | ||
.long 110 | ||
.long 119 | ||
.section .debug_info.dwo,"e",@progbits | ||
.long .Ldebug_info_dwo_end0-.Ldebug_info_dwo_start0 # Length of Unit | ||
.Ldebug_info_dwo_start0: | ||
.short 5 # DWARF version number | ||
.byte 5 # DWARF Unit Type | ||
.byte 8 # Address Size (in bytes) | ||
.long 0 # Offset Into Abbrev. Section | ||
.quad 6318074710904753300 | ||
.byte 1 # Abbrev [1] 0x14:0x1a DW_TAG_compile_unit | ||
.byte 2 # DW_AT_producer | ||
.short 33 # DW_AT_language | ||
.byte 3 # DW_AT_name | ||
.byte 4 # DW_AT_dwo_name | ||
.byte 2 # Abbrev [2] 0x1a:0xf DW_TAG_subprogram | ||
.byte 0 # DW_AT_low_pc | ||
.long .Lfunc_end0-.Lfunc_begin0 # DW_AT_high_pc | ||
.byte 1 # DW_AT_frame_base | ||
.byte 86 | ||
.byte 0 # DW_AT_name | ||
.byte 0 # DW_AT_decl_file | ||
.byte 1 # DW_AT_decl_line | ||
.long 41 # DW_AT_type | ||
# DW_AT_external | ||
.byte 3 # Abbrev [3] 0x29:0x4 DW_TAG_base_type | ||
.byte 1 # DW_AT_name | ||
.byte 5 # DW_AT_encoding | ||
.byte 4 # DW_AT_byte_size | ||
.byte 0 # End Of Children Mark | ||
.Ldebug_info_dwo_end0: | ||
.section .debug_abbrev.dwo,"e",@progbits | ||
.byte 1 # Abbreviation Code | ||
.byte 17 # DW_TAG_compile_unit | ||
.byte 1 # DW_CHILDREN_yes | ||
.byte 37 # DW_AT_producer | ||
.byte 37 # DW_FORM_strx1 | ||
.byte 19 # DW_AT_language | ||
.byte 5 # DW_FORM_data2 | ||
.byte 3 # DW_AT_name | ||
.byte 37 # DW_FORM_strx1 | ||
.byte 118 # DW_AT_dwo_name | ||
.byte 37 # DW_FORM_strx1 | ||
.byte 0 # EOM(1) | ||
.byte 0 # EOM(2) | ||
.byte 2 # Abbreviation Code | ||
.byte 46 # DW_TAG_subprogram | ||
.byte 0 # DW_CHILDREN_no | ||
.byte 17 # DW_AT_low_pc | ||
.byte 27 # DW_FORM_addrx | ||
.byte 18 # DW_AT_high_pc | ||
.byte 6 # DW_FORM_data4 | ||
.byte 64 # DW_AT_frame_base | ||
.byte 24 # DW_FORM_exprloc | ||
.byte 3 # DW_AT_name | ||
.byte 37 # DW_FORM_strx1 | ||
.byte 58 # DW_AT_decl_file | ||
.byte 11 # DW_FORM_data1 | ||
.byte 59 # DW_AT_decl_line | ||
.byte 11 # DW_FORM_data1 | ||
.byte 73 # DW_AT_type | ||
.byte 19 # DW_FORM_ref4 | ||
.byte 63 # DW_AT_external | ||
.byte 25 # DW_FORM_flag_present | ||
.byte 0 # EOM(1) | ||
.byte 0 # EOM(2) | ||
.byte 3 # Abbreviation Code | ||
.byte 36 # DW_TAG_base_type | ||
.byte 0 # DW_CHILDREN_no | ||
.byte 3 # DW_AT_name | ||
.byte 37 # DW_FORM_strx1 | ||
.byte 62 # DW_AT_encoding | ||
.byte 11 # DW_FORM_data1 | ||
.byte 11 # DW_AT_byte_size | ||
.byte 11 # DW_FORM_data1 | ||
.byte 0 # EOM(1) | ||
.byte 0 # EOM(2) | ||
.byte 0 # EOM(3) | ||
.section .debug_addr,"",@progbits | ||
.long .Ldebug_addr_end0-.Ldebug_addr_start0 # Length of contribution | ||
.Ldebug_addr_start0: | ||
.short 5 # DWARF version number | ||
.byte 8 # Address size | ||
.byte 0 # Segment selector size | ||
.Laddr_table_base0: | ||
.quad .Lfunc_begin0 | ||
.Ldebug_addr_end0: | ||
.section .debug_gnu_pubnames,"",@progbits | ||
.long .LpubNames_end0-.LpubNames_begin0 # Length of Public Names Info | ||
.LpubNames_begin0: | ||
.short 2 # DWARF Version | ||
.long .Lcu_begin0 # Offset of Compilation Unit Info | ||
.long 40 # Compilation Unit Length | ||
.long 26 # DIE offset | ||
.byte 48 # Attributes: FUNCTION, EXTERNAL | ||
.asciz "main" # External Name | ||
.long 0 # End Mark | ||
.LpubNames_end0: | ||
.section .debug_gnu_pubtypes,"",@progbits | ||
.long .LpubTypes_end0-.LpubTypes_begin0 # Length of Public Types Info | ||
.LpubTypes_begin0: | ||
.short 2 # DWARF Version | ||
.long .Lcu_begin0 # Offset of Compilation Unit Info | ||
.long 40 # Compilation Unit Length | ||
.long 41 # DIE offset | ||
.byte 144 # Attributes: TYPE, STATIC | ||
.asciz "int" # External Name | ||
.long 0 # End Mark | ||
.LpubTypes_end0: | ||
.ident "clang version 12.0.0 (git@github.com:llvm/llvm-project.git 9a33f027ac7d73e14ae287e78ab554142d1cbc8f)" | ||
.section ".note.GNU-stack","",@progbits | ||
.addrsig | ||
.section .debug_line,"",@progbits | ||
.Lline_table_start0: | ||
.section .debug_loclists.dwo,"e",@progbits | ||
.byte 0 |