Skip to content

Conversation

@sayhaan
Copy link
Member

@sayhaan sayhaan commented May 29, 2024

Adds a split-dwarf test for DWARF5 with multiple CUs.

@llvmbot
Copy link
Member

llvmbot commented May 29, 2024

@llvm/pr-subscribers-bolt

Author: Sayhaan Siddiqui (sayhaan)

Changes

Adds a split-dwarf test for DWARF5 with multiple CUs.


Patch is 24.95 KiB, truncated to 20.00 KiB below, full version: https://github.com/llvm/llvm-project/pull/93744.diff

2 Files Affected:

  • (added) bolt/test/X86/Inputs/dwarf5-df-input-lowpc-ranges-other.s (+453)
  • (added) bolt/test/X86/dwarf5-df-input-lowpc-ranges-cus.test (+73)
diff --git a/bolt/test/X86/Inputs/dwarf5-df-input-lowpc-ranges-other.s b/bolt/test/X86/Inputs/dwarf5-df-input-lowpc-ranges-other.s new file mode 100644 index 0000000000000..0138d3d506379 --- /dev/null +++ b/bolt/test/X86/Inputs/dwarf5-df-input-lowpc-ranges-other.s @@ -0,0 +1,453 @@ +# clang++ -fbasic-block-sections=all -ffunction-sections -g2 -gdwarf-5 -gsplit-dwarf +# __attribute__((always_inline)) +# int doStuffOther(int val) { +# if (val) +# ++val; +# return val; +# } +# __attribute__((always_inline)) +# int doStuffOther2(int val) { +# int foo = 3; +# return val + foo; +# } +# +# +# int mainOther(int argc, const char** argv) { +# return doStuffOther(argc) + doStuffOther2(argc);; +# } +.text +.file	"mainOther.cpp" +.section	.text._Z12doStuffOtheri,"ax",@progbits +.globl	_Z12doStuffOtheri # -- Begin function _Z12doStuffOtheri +.p2align	4, 0x90 +.type	_Z12doStuffOtheri,@function +_Z12doStuffOtheri: # @_Z12doStuffOtheri +.Lfunc_begin0: +.file	0 "." "mainOther.cpp" md5 0xa1ed70aa11f60b0b51ac7b70ad68283d +.loc	0 1 0 # mainOther.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 +movl	%edi, -4(%rbp) +.Ltmp0: +.loc	0 2 7 prologue_end # mainOther.cpp:2:7 +cmpl	$0, -4(%rbp) +.Ltmp1: +.loc	0 2 7 is_stmt 0 # mainOther.cpp:2:7 +je	_Z12doStuffOtheri.__part.2 +jmp	_Z12doStuffOtheri.__part.1 +.LBB_END0_0: +.cfi_endproc +.section	.text._Z12doStuffOtheri,"ax",@progbits,unique,1 +_Z12doStuffOtheri.__part.1: # %if.then +.cfi_startproc +.cfi_def_cfa %rbp, 16 +.cfi_offset %rbp, -16 +.loc	0 3 6 is_stmt 1 # mainOther.cpp:3:6 +movl	-4(%rbp), %eax +addl	$1, %eax +movl	%eax, -4(%rbp) +jmp	_Z12doStuffOtheri.__part.2 +.LBB_END0_1: +.size	_Z12doStuffOtheri.__part.1, .LBB_END0_1-_Z12doStuffOtheri.__part.1 +.cfi_endproc +.section	.text._Z12doStuffOtheri,"ax",@progbits,unique,2 +_Z12doStuffOtheri.__part.2: # %if.end +.cfi_startproc +.cfi_def_cfa %rbp, 16 +.cfi_offset %rbp, -16 +.loc	0 4 11 # mainOther.cpp:4:11 +movl	-4(%rbp), %eax +.loc	0 4 4 epilogue_begin is_stmt 0 # mainOther.cpp:4:4 +popq	%rbp +.cfi_def_cfa %rsp, 8 +retq +.LBB_END0_2: +.size	_Z12doStuffOtheri.__part.2, .LBB_END0_2-_Z12doStuffOtheri.__part.2 +.cfi_endproc +.section	.text._Z12doStuffOtheri,"ax",@progbits +.Lfunc_end0: +.size	_Z12doStuffOtheri, .Lfunc_end0-_Z12doStuffOtheri + # -- End function +.section	.text._Z13doStuffOther2i,"ax",@progbits +.globl	_Z13doStuffOther2i # -- Begin function _Z13doStuffOther2i +.p2align	4, 0x90 +.type	_Z13doStuffOther2i,@function +_Z13doStuffOther2i: # @_Z13doStuffOther2i +.Lfunc_begin1: +.loc	0 7 0 is_stmt 1 # mainOther.cpp:7: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 +movl	%edi, -4(%rbp) +.Ltmp2: +.loc	0 8 8 prologue_end # mainOther.cpp:8:8 +movl	$3, -8(%rbp) +.loc	0 9 11 # mainOther.cpp:9:11 +movl	-4(%rbp), %eax +.loc	0 9 15 is_stmt 0 # mainOther.cpp:9:15 +addl	-8(%rbp), %eax +.loc	0 9 4 epilogue_begin # mainOther.cpp:9:4 +popq	%rbp +.cfi_def_cfa %rsp, 8 +retq +.LBB_END1_0: +.cfi_endproc +.Lfunc_end1: +.size	_Z13doStuffOther2i, .Lfunc_end1-_Z13doStuffOther2i + # -- 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	1 # DW_FORM_addr +.byte	85 # DW_AT_ranges +.byte	35 # DW_FORM_rnglistx +.byte	115 # DW_AT_addr_base +.byte	23 # DW_FORM_sec_offset +.byte	116 # DW_AT_rnglists_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	-3189507873368837485 +.byte	1 # Abbrev [1] 0x14:0x1c 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 +.quad	0 # DW_AT_low_pc +.byte	0 # DW_AT_ranges +.long	.Laddr_table_base0 # DW_AT_addr_base +.long	.Lrnglists_table_base0 # DW_AT_rnglists_base +.Ldebug_info_end0: +.section	.debug_rnglists,"",@progbits +.long	.Ldebug_list_header_end0-.Ldebug_list_header_start0 # Length +.Ldebug_list_header_start0: +.short	5 # Version +.byte	8 # Address size +.byte	0 # Segment selector size +.long	1 # Offset entry count +.Lrnglists_table_base0: +.long	.Ldebug_ranges1-.Lrnglists_table_base0 +.Ldebug_ranges1: +.byte	3 # DW_RLE_startx_length +.byte	0 # start index +.uleb128 .LBB_END0_1-_Z12doStuffOtheri.__part.1 # length +.byte	3 # DW_RLE_startx_length +.byte	1 # start index +.uleb128 .LBB_END0_2-_Z12doStuffOtheri.__part.2 # length +.byte	3 # DW_RLE_startx_length +.byte	2 # start index +.uleb128 .Lfunc_end0-.Lfunc_begin0 # length +.byte	3 # DW_RLE_startx_length +.byte	3 # start index +.uleb128 .Lfunc_end1-.Lfunc_begin1 # length +.byte	0 # DW_RLE_end_of_list +.Ldebug_list_header_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	"mainOther.dwo" # string offset=2 +.section	.debug_str_offsets,"",@progbits +.long	.Lskel_string0 +.long	.Lskel_string1 +.section	.debug_str_offsets.dwo,"e",@progbits +.long	44 # Length of String Offsets Set +.short	5 +.short	0 +.section	.debug_str.dwo,"eMS",@progbits,1 +.Linfo_string0: +.asciz	"_Z12doStuffOtheri" # string offset=0 +.Linfo_string1: +.asciz	"doStuffOther" # string offset=18 +.Linfo_string2: +.asciz	"int" # string offset=31 +.Linfo_string3: +.asciz	"_Z13doStuffOther2i" # string offset=35 +.Linfo_string4: +.asciz	"doStuffOther2" # string offset=54 +.Linfo_string5: +.asciz	"val" # string offset=68 +.Linfo_string6: +.asciz	"foo" # string offset=72 +.Linfo_string7: +.asciz	"clang version 19.0.0git (git@github.com:llvm/llvm-project.git df542e1ed82bd4e5a9e345d3a3ae63a76893a0cf)" # string offset=76 +.Linfo_string8: +.asciz	"mainOther.cpp" # string offset=180 +.Linfo_string9: +.asciz	"mainOther.dwo" # string offset=194 +.section	.debug_str_offsets.dwo,"e",@progbits +.long	0 +.long	18 +.long	31 +.long	35 +.long	54 +.long	68 +.long	72 +.long	76 +.long	180 +.long	194 +.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	-3189507873368837485 +.byte	1 # Abbrev [1] 0x14:0x4a DW_TAG_compile_unit +.byte	7 # DW_AT_producer +.short	33 # DW_AT_language +.byte	8 # DW_AT_name +.byte	9 # DW_AT_dwo_name +.byte	2 # Abbrev [2] 0x1a:0x18 DW_TAG_subprogram +.byte	0 # DW_AT_ranges +.byte	1 # DW_AT_frame_base +.byte	86 +.byte	0 # DW_AT_linkage_name +.byte	1 # DW_AT_name +.byte	0 # DW_AT_decl_file +.byte	1 # DW_AT_decl_line +.long	89 # DW_AT_type + # DW_AT_external +.byte	3 # Abbrev [3] 0x26:0xb DW_TAG_formal_parameter +.byte	2 # DW_AT_location +.byte	145 +.byte	124 +.byte	5 # DW_AT_name +.byte	0 # DW_AT_decl_file +.byte	1 # DW_AT_decl_line +.long	89 # DW_AT_type +.byte	0 # End Of Children Mark +.byte	4 # Abbrev [4] 0x32:0x27 DW_TAG_subprogram +.byte	3 # DW_AT_low_pc +.long	.Lfunc_end1-.Lfunc_begin1 # DW_AT_high_pc +.byte	1 # DW_AT_frame_base +.byte	86 +.byte	3 # DW_AT_linkage_name +.byte	4 # DW_AT_name +.byte	0 # DW_AT_decl_file +.byte	7 # DW_AT_decl_line +.long	89 # DW_AT_type + # DW_AT_external +.byte	3 # Abbrev [3] 0x42:0xb DW_TAG_formal_parameter +.byte	2 # DW_AT_location +.byte	145 +.byte	124 +.byte	5 # DW_AT_name +.byte	0 # DW_AT_decl_file +.byte	7 # DW_AT_decl_line +.long	89 # DW_AT_type +.byte	5 # Abbrev [5] 0x4d:0xb DW_TAG_variable +.byte	2 # DW_AT_location +.byte	145 +.byte	120 +.byte	6 # DW_AT_name +.byte	0 # DW_AT_decl_file +.byte	8 # DW_AT_decl_line +.long	89 # DW_AT_type +.byte	0 # End Of Children Mark +.byte	6 # Abbrev [6] 0x59: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 +.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	1 # DW_CHILDREN_yes +.byte	85 # DW_AT_ranges +.byte	35 # DW_FORM_rnglistx +.byte	64 # DW_AT_frame_base +.byte	24 # DW_FORM_exprloc +.byte	110 # DW_AT_linkage_name +.byte	37 # DW_FORM_strx1 +.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	5 # DW_TAG_formal_parameter +.byte	0 # DW_CHILDREN_no +.byte	2 # DW_AT_location +.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	0 # EOM(1) +.byte	0 # EOM(2) +.byte	4 # Abbreviation Code +.byte	46 # DW_TAG_subprogram +.byte	1 # DW_CHILDREN_yes +.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	110 # DW_AT_linkage_name +.byte	37 # DW_FORM_strx1 +.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	5 # Abbreviation Code +.byte	52 # DW_TAG_variable +.byte	0 # DW_CHILDREN_no +.byte	2 # DW_AT_location +.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	0 # EOM(1) +.byte	0 # EOM(2) +.byte	6 # 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_rnglists.dwo,"e",@progbits +.long	.Ldebug_list_header_end1-.Ldebug_list_header_start1 # Length +.Ldebug_list_header_start1: +.short	5 # Version +.byte	8 # Address size +.byte	0 # Segment selector size +.long	1 # Offset entry count +.Lrnglists_dwo_table_base0: +.long	.Ldebug_ranges0-.Lrnglists_dwo_table_base0 +.Ldebug_ranges0: +.byte	3 # DW_RLE_startx_length +.byte	0 # start index +.uleb128 .LBB_END0_1-_Z12doStuffOtheri.__part.1 # length +.byte	3 # DW_RLE_startx_length +.byte	1 # start index +.uleb128 .LBB_END0_2-_Z12doStuffOtheri.__part.2 # length +.byte	3 # DW_RLE_startx_length +.byte	2 # start index +.uleb128 .Lfunc_end0-.Lfunc_begin0 # length +.byte	0 # DW_RLE_end_of_list +.Ldebug_list_header_end1: +.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	_Z12doStuffOtheri.__part.1 +.quad	_Z12doStuffOtheri.__part.2 +.quad	.Lfunc_begin0 +.quad	.Lfunc_begin1 +.Ldebug_addr_end0: +.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	26 # DIE offset +.byte	48 # Attributes: FUNCTION, EXTERNAL +.asciz	"doStuffOther" # External Name +.long	50 # DIE offset +.byte	48 # Attributes: FUNCTION, EXTERNAL +.asciz	"doStuffOther2" # External Name +.long	0 # End Mark +.LpubNames_end0: +.secti... [truncated] 
@sayhaan sayhaan force-pushed the dwarf5-split-test branch from 227bf90 to b82caa4 Compare May 29, 2024 23:49
@sayhaan sayhaan force-pushed the dwarf5-split-test branch 2 times, most recently from 5154e5f to 373f2e6 Compare May 30, 2024 17:33
@sayhaan sayhaan requested a review from ayermolo May 30, 2024 17:37
@sayhaan sayhaan force-pushed the dwarf5-split-test branch from 373f2e6 to 4ae36c3 Compare May 30, 2024 17:55
@sayhaan sayhaan changed the title [BOLT][NFC] Add split-dwarf5 test with multiple CUs [BOLT][DWARF][NFC] Add split-dwarf5 test with multiple CUs May 30, 2024
Copy link
Contributor

@ayermolo ayermolo left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

small nit, otherwise LGTM

@sayhaan sayhaan force-pushed the dwarf5-split-test branch from 4ae36c3 to 6a956dc Compare May 31, 2024 20:10
@ayermolo
Copy link
Contributor

ayermolo commented Jun 3, 2024

image
can you cleanup the branches

@sayhaan sayhaan force-pushed the dwarf5-split-test branch from 07635f2 to f80b990 Compare June 3, 2024 16:21
@sayhaan sayhaan force-pushed the dwarf5-split-test branch from 93198ca to b775bb3 Compare June 3, 2024 21:09
@ayermolo ayermolo merged commit 7103e60 into llvm:main Jun 4, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

3 participants