-
Notifications
You must be signed in to change notification settings - Fork 11k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
llvm-symbolizer: Fix "start file" to work with Split DWARF
A followup to the feature added in 69da27c that added the optional "start file name" to match "start line" - but this didn't work with Split DWARF because of the need for the decl file number resolution code to refer back to the skeleton unit to find its .debug_line contribution. So this patch adds the necessary infrastructure to track the skeleton unit corresponding to a split full unit for the purpose of this lookup.
- Loading branch information
Showing
4 changed files
with
229 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
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,211 @@ | ||
# RUN: rm -rf %t | ||
# RUN: mkdir %t | ||
# RUN: llvm-mc -filetype=obj -triple=x86_64 -dwarf-version=4 %s -o %t/test.o | ||
# RUN: cd %t | ||
# RUN: llvm-symbolizer -verbose 0x0 -obj=test.o | FileCheck --check-prefix=SYM %s | ||
# RUN: llvm-dwarfdump -lookup=0x1 test.o | FileCheck --check-prefix=LOOKUP %s | ||
|
||
# SYM: Filename: ./././test.h | ||
# SYM: Function start filename: ./test.cpp | ||
|
||
# LOOKUP: Line info: line 0, column 0, start file 'test.cpp', start line 1 | ||
|
||
|
||
.text | ||
.file "test.cpp" | ||
.globl _Z2f1v # -- Begin function _Z2f1v | ||
.p2align 4, 0x90 | ||
.type _Z2f1v,@function | ||
_Z2f1v: # @_Z2f1v | ||
.Lfunc_begin0: | ||
.file 1 "." "test.cpp" | ||
.loc 1 1 0 # test.cpp:1:0 | ||
.cfi_startproc | ||
# %bb.0: # %entry | ||
.file 2 "." "./test.h" | ||
.loc 2 1 1 prologue_end # ./test.h:1:1 | ||
xorl %eax, %eax | ||
retq | ||
.Ltmp0: | ||
.Lfunc_end0: | ||
.size _Z2f1v, .Lfunc_end0-_Z2f1v | ||
.cfi_endproc | ||
# -- End function | ||
.section .debug_abbrev,"",@progbits | ||
.byte 1 # Abbreviation Code | ||
.byte 17 # DW_TAG_compile_unit | ||
.byte 0 # DW_CHILDREN_no | ||
.byte 16 # DW_AT_stmt_list | ||
.byte 23 # DW_FORM_sec_offset | ||
.byte 27 # DW_AT_comp_dir | ||
.byte 14 # DW_FORM_strp | ||
.ascii "\264B" # DW_AT_GNU_pubnames | ||
.byte 25 # DW_FORM_flag_present | ||
.ascii "\260B" # DW_AT_GNU_dwo_name | ||
.byte 14 # DW_FORM_strp | ||
.ascii "\261B" # DW_AT_GNU_dwo_id | ||
.byte 7 # DW_FORM_data8 | ||
.byte 17 # DW_AT_low_pc | ||
.byte 1 # DW_FORM_addr | ||
.byte 18 # DW_AT_high_pc | ||
.byte 6 # DW_FORM_data4 | ||
.ascii "\263B" # DW_AT_GNU_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 4 # DWARF version number | ||
.long .debug_abbrev # Offset Into Abbrev. Section | ||
.byte 8 # Address Size (in bytes) | ||
.byte 1 # Abbrev [1] 0xb:0x25 DW_TAG_compile_unit | ||
.long .Lline_table_start0 # DW_AT_stmt_list | ||
.long .Lskel_string0 # DW_AT_comp_dir | ||
# DW_AT_GNU_pubnames | ||
.long .Lskel_string1 # DW_AT_GNU_dwo_name | ||
.quad 7198491773836599109 # DW_AT_GNU_dwo_id | ||
.quad .Lfunc_begin0 # DW_AT_low_pc | ||
.long .Lfunc_end0-.Lfunc_begin0 # DW_AT_high_pc | ||
.long .Laddr_table_base0 # DW_AT_GNU_addr_base | ||
.Ldebug_info_end0: | ||
.section .debug_str,"MS",@progbits,1 | ||
.Lskel_string0: | ||
.asciz "." # string offset=0 | ||
.Lskel_string1: | ||
.asciz "test.o" # string offset=2 | ||
.section .debug_str.dwo,"eMS",@progbits,1 | ||
.Linfo_string0: | ||
.asciz "_Z2f1v" # string offset=0 | ||
.Linfo_string1: | ||
.asciz "f1" # string offset=7 | ||
.Linfo_string2: | ||
.asciz "int" # string offset=10 | ||
.Linfo_string3: | ||
.asciz "clang version 13.0.0 (git@github.com:llvm/llvm-project.git 882ee7fbd6fc989fba53f3d9672440771feb80f5)" # string offset=14 | ||
.Linfo_string4: | ||
.asciz "test.cpp" # string offset=115 | ||
.Linfo_string5: | ||
.asciz "test.o" # string offset=124 | ||
.section .debug_str_offsets.dwo,"e",@progbits | ||
.long 0 | ||
.long 7 | ||
.long 10 | ||
.long 14 | ||
.long 115 | ||
.long 124 | ||
.section .debug_info.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) | ||
.byte 1 # Abbrev [1] 0xb:0x23 DW_TAG_compile_unit | ||
.byte 3 # DW_AT_producer | ||
.short 33 # DW_AT_language | ||
.byte 4 # DW_AT_name | ||
.byte 5 # DW_AT_GNU_dwo_name | ||
.quad 7198491773836599109 # DW_AT_GNU_dwo_id | ||
.byte 2 # Abbrev [2] 0x19:0x10 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 87 | ||
# DW_AT_GNU_all_call_sites | ||
.byte 0 # DW_AT_linkage_name | ||
.byte 1 # DW_AT_name | ||
.byte 1 # 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 2 # 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 | ||
.ascii "\202>" # DW_FORM_GNU_str_index | ||
.byte 19 # DW_AT_language | ||
.byte 5 # DW_FORM_data2 | ||
.byte 3 # DW_AT_name | ||
.ascii "\202>" # DW_FORM_GNU_str_index | ||
.ascii "\260B" # DW_AT_GNU_dwo_name | ||
.ascii "\202>" # DW_FORM_GNU_str_index | ||
.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 46 # DW_TAG_subprogram | ||
.byte 0 # DW_CHILDREN_no | ||
.byte 17 # DW_AT_low_pc | ||
.ascii "\201>" # DW_FORM_GNU_addr_index | ||
.byte 18 # DW_AT_high_pc | ||
.byte 6 # DW_FORM_data4 | ||
.byte 64 # DW_AT_frame_base | ||
.byte 24 # DW_FORM_exprloc | ||
.ascii "\227B" # DW_AT_GNU_all_call_sites | ||
.byte 25 # DW_FORM_flag_present | ||
.byte 110 # DW_AT_linkage_name | ||
.ascii "\202>" # DW_FORM_GNU_str_index | ||
.byte 3 # DW_AT_name | ||
.ascii "\202>" # DW_FORM_GNU_str_index | ||
.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 | ||
.ascii "\202>" # DW_FORM_GNU_str_index | ||
.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 | ||
.Laddr_table_base0: | ||
.quad .Lfunc_begin0 | ||
.section .debug_gnu_pubnames,"",@progbits | ||
.long .LpubNames_end0-.LpubNames_start0 # Length of Public Names Info | ||
.LpubNames_start0: | ||
.short 2 # DWARF Version | ||
.long .Lcu_begin0 # Offset of Compilation Unit Info | ||
.long 48 # Compilation Unit Length | ||
.long 25 # DIE offset | ||
.byte 48 # Attributes: FUNCTION, EXTERNAL | ||
.asciz "f1" # External Name | ||
.long 0 # End Mark | ||
.LpubNames_end0: | ||
.section .debug_gnu_pubtypes,"",@progbits | ||
.long .LpubTypes_end0-.LpubTypes_start0 # Length of Public Types Info | ||
.LpubTypes_start0: | ||
.short 2 # DWARF Version | ||
.long .Lcu_begin0 # Offset of Compilation Unit Info | ||
.long 48 # 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 13.0.0 (git@github.com:llvm/llvm-project.git 882ee7fbd6fc989fba53f3d9672440771feb80f5)" | ||
.section ".note.GNU-stack","",@progbits | ||
.addrsig | ||
.section .debug_line,"",@progbits | ||
.Lline_table_start0: |