diff --git a/bolt/include/bolt/Rewrite/DWARFRewriter.h b/bolt/include/bolt/Rewrite/DWARFRewriter.h --- a/bolt/include/bolt/Rewrite/DWARFRewriter.h +++ b/bolt/include/bolt/Rewrite/DWARFRewriter.h @@ -38,7 +38,11 @@ /// Stores and serializes information that will be put into the /// .debug_ranges DWARF section. - std::unique_ptr RangesSectionWriter; + std::unique_ptr LegacyRangesSectionWriter; + + /// Stores and serializes information that will be put into the + /// .debug_rnglists DWARF section. + std::unique_ptr RangeListsSectionWriter; /// Stores and serializes information that will be put into the /// .debug_aranges DWARF section. diff --git a/bolt/lib/Core/BinaryContext.cpp b/bolt/lib/Core/BinaryContext.cpp --- a/bolt/lib/Core/BinaryContext.cpp +++ b/bolt/lib/Core/BinaryContext.cpp @@ -1490,10 +1490,6 @@ ContainsDwarfLegacy |= CU->getVersion() < 5; } - if (ContainsDwarf5 && ContainsDwarfLegacy) - llvm::errs() << "BOLT-WARNING: BOLT does not support mix mode binary with " - "DWARF5 and DWARF{2,3,4}.\n"; - std::sort(AllRanges.begin(), AllRanges.end()); for (auto &KV : BinaryFunctions) { const uint64_t FunctionAddress = KV.first; diff --git a/bolt/lib/Rewrite/DWARFRewriter.cpp b/bolt/lib/Rewrite/DWARFRewriter.cpp --- a/bolt/lib/Rewrite/DWARFRewriter.cpp +++ b/bolt/lib/Rewrite/DWARFRewriter.cpp @@ -180,13 +180,15 @@ if (BC.isDWARF5Used()) { AddrWriter = std::make_unique(&BC); - RangesSectionWriter = std::make_unique(); + RangeListsSectionWriter = std::make_unique(); DebugRangeListsSectionWriter::setAddressWriter(AddrWriter.get()); } else { AddrWriter = std::make_unique(&BC); - RangesSectionWriter = std::make_unique(); } + if (BC.isDWARFLegacyUsed()) + LegacyRangesSectionWriter = std::make_unique(); + DebugLoclistWriter::setAddressWriter(AddrWriter.get()); size_t CUIndex = 0; @@ -263,6 +265,9 @@ SplitCU = BC.getDWOCU(*DWOId); DebugLocWriter *DebugLocWriter = nullptr; + DebugRangesSectionWriter *RangesSectionWriter = + Unit->getVersion() >= 5 ? RangeListsSectionWriter.get() + : LegacyRangesSectionWriter.get(); // Skipping CUs that failed to load. if (SplitCU) { updateDWONameCompDir(*Unit); @@ -279,8 +284,7 @@ std::lock_guard Lock(AccessMutex); DebugLocWriter = LocListWritersByCU[*DWOId].get(); } - DebugRangesSectionWriter *TempRangesSectionWriter = - RangesSectionWriter.get(); + DebugRangesSectionWriter *TempRangesSectionWriter = RangesSectionWriter; if (Unit->getVersion() >= 5) { TempRangesSectionWriter = RangeListsWritersByCU[*DWOId].get(); } else { @@ -312,7 +316,7 @@ if (Unit->getVersion() >= 5) { RangesBase = RangesSectionWriter->getSectionOffset() + getDWARF5RngListLocListHeaderSize(); - RangesSectionWriter.get()->initSection(*Unit); + RangesSectionWriter->initSection(*Unit); StrOffstsWriter->finalizeSection(); } @@ -321,16 +325,13 @@ *DebugLocWriter, *RangesSectionWriter, RangesBase); DebugLocWriter->finalize(*DebugInfoPatcher, *AbbrevWriter); if (Unit->getVersion() >= 5) - RangesSectionWriter.get()->finalizeSection(); + RangesSectionWriter->finalizeSection(); }; CUIndex = 0; if (opts::NoThreads || opts::DeterministicDebugInfo) { - for (std::unique_ptr &CU : BC.DwCtx->compile_units()) { - processUnitDIE(CUIndex, CU.get()); - if (CU->getVersion() >= 5) - ++CUIndex; - } + for (std::unique_ptr &CU : BC.DwCtx->compile_units()) + processUnitDIE(CUIndex++, CU.get()); } else { // Update unit debug info in parallel ThreadPool &ThreadPool = ParallelUtilities::getThreadPool(); @@ -942,13 +943,21 @@ DebugStrOffsetsSectionContents->size()); } - std::unique_ptr RangesSectionContents = - RangesSectionWriter->releaseBuffer(); - BC.registerOrUpdateNoteSection( - llvm::isa(*RangesSectionWriter) - ? ".debug_rnglists" - : ".debug_ranges", - copyByteArray(*RangesSectionContents), RangesSectionContents->size()); + if (BC.isDWARFLegacyUsed()) { + std::unique_ptr RangesSectionContents = + LegacyRangesSectionWriter->releaseBuffer(); + BC.registerOrUpdateNoteSection(".debug_ranges", + copyByteArray(*RangesSectionContents), + RangesSectionContents->size()); + } + + if (BC.isDWARF5Used()) { + std::unique_ptr RangesSectionContents = + RangeListsSectionWriter->releaseBuffer(); + BC.registerOrUpdateNoteSection(".debug_rnglists", + copyByteArray(*RangesSectionContents), + RangesSectionContents->size()); + } if (BC.isDWARF5Used()) { std::unique_ptr LocationListSectionContents = diff --git a/bolt/test/X86/Inputs/dwarf5-dwarf4-monolithic-helper0.s b/bolt/test/X86/Inputs/dwarf5-dwarf4-monolithic-helper0.s new file mode 100644 --- /dev/null +++ b/bolt/test/X86/Inputs/dwarf5-dwarf4-monolithic-helper0.s @@ -0,0 +1,308 @@ + .text + .file "helper0.cpp" + .file 1 "/test" "helper0.cpp" + .section .text._Z4foo0i,"ax",@progbits + .globl _Z4foo0i # -- Begin function _Z4foo0i + .p2align 4, 0x90 + .type _Z4foo0i,@function +_Z4foo0i: # @_Z4foo0i +.Lfunc_begin0: + .loc 1 6 0 # helper0.cpp:6:0 + .cfi_startproc +# %bb.0: # %entry + #DEBUG_VALUE: foo0:argc <- $edi + #DEBUG_VALUE: foo0:x <- $edi + # kill: def $edi killed $edi def $rdi + #DEBUG_VALUE: useFoo:x <- undef + .loc 1 3 6 prologue_end # helper0.cpp:3:6 + leal 4(%rdi), %eax +.Ltmp0: + #DEBUG_VALUE: foo0:x <- $eax + .loc 1 9 4 # helper0.cpp:9:4 + retq +.Ltmp1: +.Lfunc_end0: + .size _Z4foo0i, .Lfunc_end0-_Z4foo0i + .cfi_endproc + # -- End function + .type fooVar0,@object # @fooVar0 + .bss + .globl fooVar0 + .p2align 2 +fooVar0: + .long 0 # 0x0 + .size fooVar0, 4 + + .section .debug_loc,"",@progbits +.Ldebug_loc0: + .quad .Lfunc_begin0-.Lfunc_begin0 + .quad .Ltmp0-.Lfunc_begin0 + .short 1 # Loc expr size + .byte 85 # super-register DW_OP_reg5 + .quad .Ltmp0-.Lfunc_begin0 + .quad .Lfunc_end0-.Lfunc_begin0 + .short 1 # Loc expr size + .byte 80 # super-register DW_OP_reg0 + .quad 0 + .quad 0 + .section .debug_abbrev,"",@progbits + .byte 1 # Abbreviation Code + .byte 17 # DW_TAG_compile_unit + .byte 1 # DW_CHILDREN_yes + .byte 37 # DW_AT_producer + .byte 14 # DW_FORM_strp + .byte 19 # DW_AT_language + .byte 5 # DW_FORM_data2 + .byte 3 # DW_AT_name + .byte 14 # DW_FORM_strp + .byte 16 # DW_AT_stmt_list + .byte 23 # DW_FORM_sec_offset + .byte 27 # DW_AT_comp_dir + .byte 14 # DW_FORM_strp + .byte 17 # DW_AT_low_pc + .byte 1 # DW_FORM_addr + .byte 18 # DW_AT_high_pc + .byte 6 # DW_FORM_data4 + .byte 0 # EOM(1) + .byte 0 # EOM(2) + .byte 2 # Abbreviation Code + .byte 52 # DW_TAG_variable + .byte 0 # DW_CHILDREN_no + .byte 3 # DW_AT_name + .byte 14 # DW_FORM_strp + .byte 73 # DW_AT_type + .byte 19 # DW_FORM_ref4 + .byte 63 # DW_AT_external + .byte 25 # DW_FORM_flag_present + .byte 58 # DW_AT_decl_file + .byte 11 # DW_FORM_data1 + .byte 59 # DW_AT_decl_line + .byte 11 # DW_FORM_data1 + .byte 2 # DW_AT_location + .byte 24 # DW_FORM_exprloc + .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 14 # DW_FORM_strp + .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 4 # Abbreviation Code + .byte 46 # DW_TAG_subprogram + .byte 1 # DW_CHILDREN_yes + .byte 110 # DW_AT_linkage_name + .byte 14 # DW_FORM_strp + .byte 3 # DW_AT_name + .byte 14 # DW_FORM_strp + .byte 58 # DW_AT_decl_file + .byte 11 # DW_FORM_data1 + .byte 59 # DW_AT_decl_line + .byte 11 # DW_FORM_data1 + .byte 32 # DW_AT_inline + .byte 11 # DW_FORM_data1 + .byte 0 # EOM(1) + .byte 0 # EOM(2) + .byte 5 # Abbreviation Code + .byte 5 # DW_TAG_formal_parameter + .byte 0 # DW_CHILDREN_no + .byte 3 # DW_AT_name + .byte 14 # DW_FORM_strp + .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 15 # DW_TAG_pointer_type + .byte 0 # DW_CHILDREN_no + .byte 73 # DW_AT_type + .byte 19 # DW_FORM_ref4 + .byte 0 # EOM(1) + .byte 0 # EOM(2) + .byte 7 # Abbreviation Code + .byte 46 # DW_TAG_subprogram + .byte 1 # DW_CHILDREN_yes + .byte 17 # DW_AT_low_pc + .byte 1 # DW_FORM_addr + .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 + .byte 14 # DW_FORM_strp + .byte 3 # DW_AT_name + .byte 14 # DW_FORM_strp + .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 8 # 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 14 # DW_FORM_strp + .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 9 # Abbreviation Code + .byte 52 # DW_TAG_variable + .byte 0 # DW_CHILDREN_no + .byte 2 # DW_AT_location + .byte 23 # DW_FORM_sec_offset + .byte 3 # DW_AT_name + .byte 14 # DW_FORM_strp + .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 10 # Abbreviation Code + .byte 29 # DW_TAG_inlined_subroutine + .byte 0 # DW_CHILDREN_no + .byte 49 # DW_AT_abstract_origin + .byte 19 # DW_FORM_ref4 + .byte 17 # DW_AT_low_pc + .byte 1 # DW_FORM_addr + .byte 18 # DW_AT_high_pc + .byte 6 # DW_FORM_data4 + .byte 88 # DW_AT_call_file + .byte 11 # DW_FORM_data1 + .byte 89 # DW_AT_call_line + .byte 11 # DW_FORM_data1 + .byte 87 # DW_AT_call_column + .byte 11 # DW_FORM_data1 + .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:0xa7 DW_TAG_compile_unit + .long .Linfo_string0 # DW_AT_producer + .short 33 # DW_AT_language + .long .Linfo_string1 # DW_AT_name + .long .Lline_table_start0 # DW_AT_stmt_list + .long .Linfo_string2 # DW_AT_comp_dir + .quad .Lfunc_begin0 # DW_AT_low_pc + .long .Lfunc_end0-.Lfunc_begin0 # DW_AT_high_pc + .byte 2 # Abbrev [2] 0x2a:0x15 DW_TAG_variable + .long .Linfo_string3 # DW_AT_name + .long 63 # DW_AT_type + # DW_AT_external + .byte 1 # DW_AT_decl_file + .byte 1 # DW_AT_decl_line + .byte 9 # DW_AT_location + .byte 3 + .quad fooVar0 + .byte 3 # Abbrev [3] 0x3f:0x7 DW_TAG_base_type + .long .Linfo_string4 # DW_AT_name + .byte 5 # DW_AT_encoding + .byte 4 # DW_AT_byte_size + .byte 4 # Abbrev [4] 0x46:0x18 DW_TAG_subprogram + .long .Linfo_string5 # DW_AT_linkage_name + .long .Linfo_string6 # DW_AT_name + .byte 1 # DW_AT_decl_file + .byte 2 # DW_AT_decl_line + .byte 1 # DW_AT_inline + .byte 5 # Abbrev [5] 0x52:0xb DW_TAG_formal_parameter + .long .Linfo_string7 # DW_AT_name + .byte 1 # DW_AT_decl_file + .byte 2 # DW_AT_decl_line + .long 94 # DW_AT_type + .byte 0 # End Of Children Mark + .byte 6 # Abbrev [6] 0x5e:0x5 DW_TAG_pointer_type + .long 63 # DW_AT_type + .byte 7 # Abbrev [7] 0x63:0x4e DW_TAG_subprogram + .quad .Lfunc_begin0 # 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 + .long .Linfo_string8 # DW_AT_linkage_name + .long .Linfo_string9 # DW_AT_name + .byte 1 # DW_AT_decl_file + .byte 6 # DW_AT_decl_line + .long 63 # DW_AT_type + # DW_AT_external + .byte 8 # Abbrev [8] 0x80:0xd DW_TAG_formal_parameter + .byte 1 # DW_AT_location + .byte 85 + .long .Linfo_string10 # DW_AT_name + .byte 1 # DW_AT_decl_file + .byte 6 # DW_AT_decl_line + .long 63 # DW_AT_type + .byte 9 # Abbrev [9] 0x8d:0xf DW_TAG_variable + .long .Ldebug_loc0 # DW_AT_location + .long .Linfo_string7 # DW_AT_name + .byte 1 # DW_AT_decl_file + .byte 7 # DW_AT_decl_line + .long 63 # DW_AT_type + .byte 10 # Abbrev [10] 0x9c:0x14 DW_TAG_inlined_subroutine + .long 70 # DW_AT_abstract_origin + .quad .Lfunc_begin0 # DW_AT_low_pc + .long .Ltmp0-.Lfunc_begin0 # DW_AT_high_pc + .byte 1 # DW_AT_call_file + .byte 8 # DW_AT_call_line + .byte 4 # DW_AT_call_column + .byte 0 # End Of Children Mark + .byte 0 # End Of Children Mark +.Ldebug_info_end0: + .section .debug_str,"MS",@progbits,1 +.Linfo_string0: + .asciz "clang version 15.0.0" # string offset=0 +.Linfo_string1: + .asciz "helper0.cpp" # string offset=134 +.Linfo_string2: + .asciz "/test" # string offset=146 +.Linfo_string3: + .asciz "fooVar0" # string offset=201 +.Linfo_string4: + .asciz "int" # string offset=209 +.Linfo_string5: + .asciz "_ZL6useFooPi" # string offset=213 +.Linfo_string6: + .asciz "useFoo" # string offset=226 +.Linfo_string7: + .asciz "x" # string offset=233 +.Linfo_string8: + .asciz "_Z4foo0i" # string offset=235 +.Linfo_string9: + .asciz "foo0" # string offset=244 +.Linfo_string10: + .asciz "argc" # string offset=249 + .ident "clang version 15.0.0" + .section ".note.GNU-stack","",@progbits + .addrsig + .section .debug_line,"",@progbits +.Lline_table_start0: diff --git a/bolt/test/X86/Inputs/dwarf5-dwarf4-monolithic-helper1.s b/bolt/test/X86/Inputs/dwarf5-dwarf4-monolithic-helper1.s new file mode 100644 --- /dev/null +++ b/bolt/test/X86/Inputs/dwarf5-dwarf4-monolithic-helper1.s @@ -0,0 +1,356 @@ + .text + .file "helper1.cpp" + .file 0 "/test" "helper1.cpp" md5 0xe6dbd773fdf80bfea332cdf8284cddce + .section .text._Z4foo1i,"ax",@progbits + .globl _Z4foo1i # -- Begin function _Z4foo1i + .p2align 4, 0x90 + .type _Z4foo1i,@function +_Z4foo1i: # @_Z4foo1i +.Lfunc_begin0: + .loc 0 6 0 # helper1.cpp:6:0 + .cfi_startproc +# %bb.0: # %entry + #DEBUG_VALUE: foo1:argc <- $edi + #DEBUG_VALUE: foo1:x <- $edi + # kill: def $edi killed $edi def $rdi + #DEBUG_VALUE: useFoo:x <- undef + .loc 0 3 6 prologue_end # helper1.cpp:3:6 + leal 4(%rdi), %eax +.Ltmp0: + #DEBUG_VALUE: foo1:x <- $eax + .loc 0 9 4 # helper1.cpp:9:4 + retq +.Ltmp1: +.Lfunc_end0: + .size _Z4foo1i, .Lfunc_end0-_Z4foo1i + .cfi_endproc + # -- End function + .type fooVar1,@object # @fooVar1 + .bss + .globl fooVar1 + .p2align 2 +fooVar1: + .long 0 # 0x0 + .size fooVar1, 4 + + .section .debug_loclists,"",@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 +.Lloclists_table_base0: + .long .Ldebug_loc0-.Lloclists_table_base0 +.Ldebug_loc0: + .byte 4 # DW_LLE_offset_pair + .uleb128 .Lfunc_begin0-.Lfunc_begin0 # starting offset + .uleb128 .Ltmp0-.Lfunc_begin0 # ending offset + .byte 1 # Loc expr size + .byte 85 # super-register DW_OP_reg5 + .byte 4 # DW_LLE_offset_pair + .uleb128 .Ltmp0-.Lfunc_begin0 # starting offset + .uleb128 .Lfunc_end0-.Lfunc_begin0 # ending offset + .byte 1 # Loc expr size + .byte 80 # super-register DW_OP_reg0 + .byte 0 # DW_LLE_end_of_list +.Ldebug_list_header_end0: + .section .debug_abbrev,"",@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 114 # DW_AT_str_offsets_base + .byte 23 # DW_FORM_sec_offset + .byte 16 # DW_AT_stmt_list + .byte 23 # DW_FORM_sec_offset + .byte 27 # DW_AT_comp_dir + .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 + .ascii "\214\001" # DW_AT_loclists_base + .byte 23 # DW_FORM_sec_offset + .byte 0 # EOM(1) + .byte 0 # EOM(2) + .byte 2 # Abbreviation Code + .byte 52 # DW_TAG_variable + .byte 0 # DW_CHILDREN_no + .byte 3 # DW_AT_name + .byte 37 # DW_FORM_strx1 + .byte 73 # DW_AT_type + .byte 19 # DW_FORM_ref4 + .byte 63 # DW_AT_external + .byte 25 # DW_FORM_flag_present + .byte 58 # DW_AT_decl_file + .byte 11 # DW_FORM_data1 + .byte 59 # DW_AT_decl_line + .byte 11 # DW_FORM_data1 + .byte 2 # DW_AT_location + .byte 24 # DW_FORM_exprloc + .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 4 # Abbreviation Code + .byte 46 # DW_TAG_subprogram + .byte 1 # DW_CHILDREN_yes + .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 32 # DW_AT_inline + .byte 33 # DW_FORM_implicit_const + .byte 1 + .byte 0 # EOM(1) + .byte 0 # EOM(2) + .byte 5 # Abbreviation Code + .byte 5 # DW_TAG_formal_parameter + .byte 0 # DW_CHILDREN_no + .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 15 # DW_TAG_pointer_type + .byte 0 # DW_CHILDREN_no + .byte 73 # DW_AT_type + .byte 19 # DW_FORM_ref4 + .byte 0 # EOM(1) + .byte 0 # EOM(2) + .byte 7 # 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 122 # DW_AT_call_all_calls + .byte 25 # DW_FORM_flag_present + .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 8 # 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 9 # Abbreviation Code + .byte 52 # DW_TAG_variable + .byte 0 # DW_CHILDREN_no + .byte 2 # DW_AT_location + .byte 34 # DW_FORM_loclistx + .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 10 # Abbreviation Code + .byte 29 # DW_TAG_inlined_subroutine + .byte 0 # DW_CHILDREN_no + .byte 49 # DW_AT_abstract_origin + .byte 19 # DW_FORM_ref4 + .byte 17 # DW_AT_low_pc + .byte 27 # DW_FORM_addrx + .byte 18 # DW_AT_high_pc + .byte 6 # DW_FORM_data4 + .byte 88 # DW_AT_call_file + .byte 11 # DW_FORM_data1 + .byte 89 # DW_AT_call_line + .byte 11 # DW_FORM_data1 + .byte 87 # DW_AT_call_column + .byte 11 # DW_FORM_data1 + .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 1 # DWARF Unit Type + .byte 8 # Address Size (in bytes) + .long .debug_abbrev # Offset Into Abbrev. Section + .byte 1 # Abbrev [1] 0xc:0x6f DW_TAG_compile_unit + .byte 0 # DW_AT_producer + .short 33 # DW_AT_language + .byte 1 # DW_AT_name + .long .Lstr_offsets_base0 # DW_AT_str_offsets_base + .long .Lline_table_start0 # DW_AT_stmt_list + .byte 2 # DW_AT_comp_dir + .byte 1 # DW_AT_low_pc + .long .Lfunc_end0-.Lfunc_begin0 # DW_AT_high_pc + .long .Laddr_table_base0 # DW_AT_addr_base + .long .Lloclists_table_base0 # DW_AT_loclists_base + .byte 2 # Abbrev [2] 0x27:0xb DW_TAG_variable + .byte 3 # DW_AT_name + .long 50 # DW_AT_type + # DW_AT_external + .byte 0 # DW_AT_decl_file + .byte 1 # DW_AT_decl_line + .byte 2 # DW_AT_location + .byte 161 + .byte 0 + .byte 3 # Abbrev [3] 0x32:0x4 DW_TAG_base_type + .byte 4 # DW_AT_name + .byte 5 # DW_AT_encoding + .byte 4 # DW_AT_byte_size + .byte 4 # Abbrev [4] 0x36:0xe DW_TAG_subprogram + .byte 5 # DW_AT_linkage_name + .byte 6 # DW_AT_name + .byte 0 # DW_AT_decl_file + .byte 2 # DW_AT_decl_line + # DW_AT_inline + .byte 5 # Abbrev [5] 0x3b:0x8 DW_TAG_formal_parameter + .byte 7 # DW_AT_name + .byte 0 # DW_AT_decl_file + .byte 2 # DW_AT_decl_line + .long 68 # DW_AT_type + .byte 0 # End Of Children Mark + .byte 6 # Abbrev [6] 0x44:0x5 DW_TAG_pointer_type + .long 50 # DW_AT_type + .byte 7 # Abbrev [7] 0x49:0x31 DW_TAG_subprogram + .byte 1 # DW_AT_low_pc + .long .Lfunc_end0-.Lfunc_begin0 # DW_AT_high_pc + .byte 1 # DW_AT_frame_base + .byte 87 + # DW_AT_call_all_calls + .byte 8 # DW_AT_linkage_name + .byte 9 # DW_AT_name + .byte 0 # DW_AT_decl_file + .byte 6 # DW_AT_decl_line + .long 50 # DW_AT_type + # DW_AT_external + .byte 8 # Abbrev [8] 0x59:0xa DW_TAG_formal_parameter + .byte 1 # DW_AT_location + .byte 85 + .byte 10 # DW_AT_name + .byte 0 # DW_AT_decl_file + .byte 6 # DW_AT_decl_line + .long 50 # DW_AT_type + .byte 9 # Abbrev [9] 0x63:0x9 DW_TAG_variable + .byte 0 # DW_AT_location + .byte 7 # DW_AT_name + .byte 0 # DW_AT_decl_file + .byte 7 # DW_AT_decl_line + .long 50 # DW_AT_type + .byte 10 # Abbrev [10] 0x6c:0xd DW_TAG_inlined_subroutine + .long 54 # DW_AT_abstract_origin + .byte 1 # DW_AT_low_pc + .long .Ltmp0-.Lfunc_begin0 # DW_AT_high_pc + .byte 0 # DW_AT_call_file + .byte 8 # DW_AT_call_line + .byte 4 # DW_AT_call_column + .byte 0 # End Of Children Mark + .byte 0 # End Of Children Mark +.Ldebug_info_end0: + .section .debug_str_offsets,"",@progbits + .long 48 # Length of String Offsets Set + .short 5 + .short 0 +.Lstr_offsets_base0: + .section .debug_str,"MS",@progbits,1 +.Linfo_string0: + .asciz "clang version 15.0.0" # string offset=0 +.Linfo_string1: + .asciz "helper1.cpp" # string offset=134 +.Linfo_string2: + .asciz "/test" # string offset=146 +.Linfo_string3: + .asciz "fooVar1" # string offset=201 +.Linfo_string4: + .asciz "int" # string offset=209 +.Linfo_string5: + .asciz "_ZL6useFooPi" # string offset=213 +.Linfo_string6: + .asciz "useFoo" # string offset=226 +.Linfo_string7: + .asciz "x" # string offset=233 +.Linfo_string8: + .asciz "_Z4foo1i" # string offset=235 +.Linfo_string9: + .asciz "foo1" # string offset=244 +.Linfo_string10: + .asciz "argc" # string offset=249 + .section .debug_str_offsets,"",@progbits + .long .Linfo_string0 + .long .Linfo_string1 + .long .Linfo_string2 + .long .Linfo_string3 + .long .Linfo_string4 + .long .Linfo_string5 + .long .Linfo_string6 + .long .Linfo_string7 + .long .Linfo_string8 + .long .Linfo_string9 + .long .Linfo_string10 + .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 fooVar1 + .quad .Lfunc_begin0 +.Ldebug_addr_end0: + .ident "clang version 15.0.0" + .section ".note.GNU-stack","",@progbits + .addrsig + .section .debug_line,"",@progbits +.Lline_table_start0: diff --git a/bolt/test/X86/Inputs/dwarf5-dwarf4-monolithic-helper2.s b/bolt/test/X86/Inputs/dwarf5-dwarf4-monolithic-helper2.s new file mode 100644 --- /dev/null +++ b/bolt/test/X86/Inputs/dwarf5-dwarf4-monolithic-helper2.s @@ -0,0 +1,308 @@ + .text + .file "helper2.cpp" + .file 1 "/test" "helper2.cpp" + .section .text._Z4foo2i,"ax",@progbits + .globl _Z4foo2i # -- Begin function _Z4foo2i + .p2align 4, 0x90 + .type _Z4foo2i,@function +_Z4foo2i: # @_Z4foo2i +.Lfunc_begin0: + .loc 1 6 0 # helper2.cpp:6:0 + .cfi_startproc +# %bb.0: # %entry + #DEBUG_VALUE: foo2:argc <- $edi + #DEBUG_VALUE: foo2:x <- $edi + # kill: def $edi killed $edi def $rdi + #DEBUG_VALUE: useFoo:x <- undef + .loc 1 3 6 prologue_end # helper2.cpp:3:6 + leal 4(%rdi), %eax +.Ltmp0: + #DEBUG_VALUE: foo2:x <- $eax + .loc 1 9 4 # helper2.cpp:9:4 + retq +.Ltmp1: +.Lfunc_end0: + .size _Z4foo2i, .Lfunc_end0-_Z4foo2i + .cfi_endproc + # -- End function + .type fooVar2,@object # @fooVar2 + .bss + .globl fooVar2 + .p2align 2 +fooVar2: + .long 0 # 0x0 + .size fooVar2, 4 + + .section .debug_loc,"",@progbits +.Ldebug_loc0: + .quad .Lfunc_begin0-.Lfunc_begin0 + .quad .Ltmp0-.Lfunc_begin0 + .short 1 # Loc expr size + .byte 85 # super-register DW_OP_reg5 + .quad .Ltmp0-.Lfunc_begin0 + .quad .Lfunc_end0-.Lfunc_begin0 + .short 1 # Loc expr size + .byte 80 # super-register DW_OP_reg0 + .quad 0 + .quad 0 + .section .debug_abbrev,"",@progbits + .byte 1 # Abbreviation Code + .byte 17 # DW_TAG_compile_unit + .byte 1 # DW_CHILDREN_yes + .byte 37 # DW_AT_producer + .byte 14 # DW_FORM_strp + .byte 19 # DW_AT_language + .byte 5 # DW_FORM_data2 + .byte 3 # DW_AT_name + .byte 14 # DW_FORM_strp + .byte 16 # DW_AT_stmt_list + .byte 23 # DW_FORM_sec_offset + .byte 27 # DW_AT_comp_dir + .byte 14 # DW_FORM_strp + .byte 17 # DW_AT_low_pc + .byte 1 # DW_FORM_addr + .byte 18 # DW_AT_high_pc + .byte 6 # DW_FORM_data4 + .byte 0 # EOM(1) + .byte 0 # EOM(2) + .byte 2 # Abbreviation Code + .byte 52 # DW_TAG_variable + .byte 0 # DW_CHILDREN_no + .byte 3 # DW_AT_name + .byte 14 # DW_FORM_strp + .byte 73 # DW_AT_type + .byte 19 # DW_FORM_ref4 + .byte 63 # DW_AT_external + .byte 25 # DW_FORM_flag_present + .byte 58 # DW_AT_decl_file + .byte 11 # DW_FORM_data1 + .byte 59 # DW_AT_decl_line + .byte 11 # DW_FORM_data1 + .byte 2 # DW_AT_location + .byte 24 # DW_FORM_exprloc + .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 14 # DW_FORM_strp + .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 4 # Abbreviation Code + .byte 46 # DW_TAG_subprogram + .byte 1 # DW_CHILDREN_yes + .byte 110 # DW_AT_linkage_name + .byte 14 # DW_FORM_strp + .byte 3 # DW_AT_name + .byte 14 # DW_FORM_strp + .byte 58 # DW_AT_decl_file + .byte 11 # DW_FORM_data1 + .byte 59 # DW_AT_decl_line + .byte 11 # DW_FORM_data1 + .byte 32 # DW_AT_inline + .byte 11 # DW_FORM_data1 + .byte 0 # EOM(1) + .byte 0 # EOM(2) + .byte 5 # Abbreviation Code + .byte 5 # DW_TAG_formal_parameter + .byte 0 # DW_CHILDREN_no + .byte 3 # DW_AT_name + .byte 14 # DW_FORM_strp + .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 15 # DW_TAG_pointer_type + .byte 0 # DW_CHILDREN_no + .byte 73 # DW_AT_type + .byte 19 # DW_FORM_ref4 + .byte 0 # EOM(1) + .byte 0 # EOM(2) + .byte 7 # Abbreviation Code + .byte 46 # DW_TAG_subprogram + .byte 1 # DW_CHILDREN_yes + .byte 17 # DW_AT_low_pc + .byte 1 # DW_FORM_addr + .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 + .byte 14 # DW_FORM_strp + .byte 3 # DW_AT_name + .byte 14 # DW_FORM_strp + .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 8 # 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 14 # DW_FORM_strp + .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 9 # Abbreviation Code + .byte 52 # DW_TAG_variable + .byte 0 # DW_CHILDREN_no + .byte 2 # DW_AT_location + .byte 23 # DW_FORM_sec_offset + .byte 3 # DW_AT_name + .byte 14 # DW_FORM_strp + .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 10 # Abbreviation Code + .byte 29 # DW_TAG_inlined_subroutine + .byte 0 # DW_CHILDREN_no + .byte 49 # DW_AT_abstract_origin + .byte 19 # DW_FORM_ref4 + .byte 17 # DW_AT_low_pc + .byte 1 # DW_FORM_addr + .byte 18 # DW_AT_high_pc + .byte 6 # DW_FORM_data4 + .byte 88 # DW_AT_call_file + .byte 11 # DW_FORM_data1 + .byte 89 # DW_AT_call_line + .byte 11 # DW_FORM_data1 + .byte 87 # DW_AT_call_column + .byte 11 # DW_FORM_data1 + .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:0xa7 DW_TAG_compile_unit + .long .Linfo_string0 # DW_AT_producer + .short 33 # DW_AT_language + .long .Linfo_string1 # DW_AT_name + .long .Lline_table_start0 # DW_AT_stmt_list + .long .Linfo_string2 # DW_AT_comp_dir + .quad .Lfunc_begin0 # DW_AT_low_pc + .long .Lfunc_end0-.Lfunc_begin0 # DW_AT_high_pc + .byte 2 # Abbrev [2] 0x2a:0x15 DW_TAG_variable + .long .Linfo_string3 # DW_AT_name + .long 63 # DW_AT_type + # DW_AT_external + .byte 1 # DW_AT_decl_file + .byte 1 # DW_AT_decl_line + .byte 9 # DW_AT_location + .byte 3 + .quad fooVar2 + .byte 3 # Abbrev [3] 0x3f:0x7 DW_TAG_base_type + .long .Linfo_string4 # DW_AT_name + .byte 5 # DW_AT_encoding + .byte 4 # DW_AT_byte_size + .byte 4 # Abbrev [4] 0x46:0x18 DW_TAG_subprogram + .long .Linfo_string5 # DW_AT_linkage_name + .long .Linfo_string6 # DW_AT_name + .byte 1 # DW_AT_decl_file + .byte 2 # DW_AT_decl_line + .byte 1 # DW_AT_inline + .byte 5 # Abbrev [5] 0x52:0xb DW_TAG_formal_parameter + .long .Linfo_string7 # DW_AT_name + .byte 1 # DW_AT_decl_file + .byte 2 # DW_AT_decl_line + .long 94 # DW_AT_type + .byte 0 # End Of Children Mark + .byte 6 # Abbrev [6] 0x5e:0x5 DW_TAG_pointer_type + .long 63 # DW_AT_type + .byte 7 # Abbrev [7] 0x63:0x4e DW_TAG_subprogram + .quad .Lfunc_begin0 # 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 + .long .Linfo_string8 # DW_AT_linkage_name + .long .Linfo_string9 # DW_AT_name + .byte 1 # DW_AT_decl_file + .byte 6 # DW_AT_decl_line + .long 63 # DW_AT_type + # DW_AT_external + .byte 8 # Abbrev [8] 0x80:0xd DW_TAG_formal_parameter + .byte 1 # DW_AT_location + .byte 85 + .long .Linfo_string10 # DW_AT_name + .byte 1 # DW_AT_decl_file + .byte 6 # DW_AT_decl_line + .long 63 # DW_AT_type + .byte 9 # Abbrev [9] 0x8d:0xf DW_TAG_variable + .long .Ldebug_loc0 # DW_AT_location + .long .Linfo_string7 # DW_AT_name + .byte 1 # DW_AT_decl_file + .byte 7 # DW_AT_decl_line + .long 63 # DW_AT_type + .byte 10 # Abbrev [10] 0x9c:0x14 DW_TAG_inlined_subroutine + .long 70 # DW_AT_abstract_origin + .quad .Lfunc_begin0 # DW_AT_low_pc + .long .Ltmp0-.Lfunc_begin0 # DW_AT_high_pc + .byte 1 # DW_AT_call_file + .byte 8 # DW_AT_call_line + .byte 4 # DW_AT_call_column + .byte 0 # End Of Children Mark + .byte 0 # End Of Children Mark +.Ldebug_info_end0: + .section .debug_str,"MS",@progbits,1 +.Linfo_string0: + .asciz "clang version 15.0.0" # string offset=0 +.Linfo_string1: + .asciz "helper2.cpp" # string offset=134 +.Linfo_string2: + .asciz "/test" # string offset=146 +.Linfo_string3: + .asciz "fooVar2" # string offset=201 +.Linfo_string4: + .asciz "int" # string offset=209 +.Linfo_string5: + .asciz "_ZL6useFooPi" # string offset=213 +.Linfo_string6: + .asciz "useFoo" # string offset=226 +.Linfo_string7: + .asciz "x" # string offset=233 +.Linfo_string8: + .asciz "_Z4foo2i" # string offset=235 +.Linfo_string9: + .asciz "foo2" # string offset=244 +.Linfo_string10: + .asciz "argc" # string offset=249 + .ident "clang version 15.0.0" + .section ".note.GNU-stack","",@progbits + .addrsig + .section .debug_line,"",@progbits +.Lline_table_start0: diff --git a/bolt/test/X86/Inputs/dwarf5-dwarf4-monolithic-main.s b/bolt/test/X86/Inputs/dwarf5-dwarf4-monolithic-main.s new file mode 100644 --- /dev/null +++ b/bolt/test/X86/Inputs/dwarf5-dwarf4-monolithic-main.s @@ -0,0 +1,684 @@ + .text + .file "main.cpp" + .section .text._Z3usePiS_,"ax",@progbits + .globl _Z3usePiS_ # -- Begin function _Z3usePiS_ + .p2align 4, 0x90 + .type _Z3usePiS_,@function +_Z3usePiS_: # @_Z3usePiS_ +.Lfunc_begin0: + .file 0 "/test" "main.cpp" md5 0xe3a18fae8565a087d09d6076b542cdab + .loc 0 1 0 # main.cpp:1:0 + .cfi_startproc +# %bb.0: # %entry + #DEBUG_VALUE: use:x <- $rdi + #DEBUG_VALUE: use:y <- $rsi + .loc 0 2 6 prologue_end # main.cpp:2:6 + addl $4, (%rdi) + .loc 0 3 6 # main.cpp:3:6 + addl $-2, (%rsi) + .loc 0 4 1 # main.cpp:4:1 + retq +.Ltmp0: +.Lfunc_end0: + .size _Z3usePiS_, .Lfunc_end0-_Z3usePiS_ + .cfi_endproc + # -- End function + .section .text.main,"ax",@progbits + .globl main # -- Begin function main + .p2align 4, 0x90 + .type main,@function +main: # @main +.Lfunc_begin1: + .loc 0 12 0 # main.cpp:12:0 + .cfi_startproc +# %bb.0: # %entry + #DEBUG_VALUE: main:argc <- $edi + #DEBUG_VALUE: main:argv <- $rsi + pushq %rbp + .cfi_def_cfa_offset 16 + pushq %r15 + .cfi_def_cfa_offset 24 + pushq %r14 + .cfi_def_cfa_offset 32 + pushq %rbx + .cfi_def_cfa_offset 40 + pushq %rax + .cfi_def_cfa_offset 48 + .cfi_offset %rbx, -40 + .cfi_offset %r14, -32 + .cfi_offset %r15, -24 + .cfi_offset %rbp, -16 +.Ltmp1: + #DEBUG_VALUE: main:x <- $edi + movl %edi, %ebx +.Ltmp2: + #DEBUG_VALUE: main:y <- [DW_OP_plus_uconst 3, DW_OP_stack_value] undef + #DEBUG_VALUE: use:x <- undef + #DEBUG_VALUE: use:y <- undef + .loc 0 2 6 prologue_end # main.cpp:2:6 + leal 4(%rbx), %r14d +.Ltmp3: + #DEBUG_VALUE: main:x <- $r14d + .loc 0 14 20 # main.cpp:14:20 + addl fooVar0(%rip), %ebx + .loc 0 14 30 is_stmt 0 # main.cpp:14:30 + addl fooVar1(%rip), %ebx +.Ltmp4: + .loc 0 3 6 is_stmt 1 # main.cpp:3:6 + addl fooVar2(%rip), %ebx +.Ltmp5: + #DEBUG_VALUE: main:y <- undef + .loc 0 16 19 # main.cpp:16:19 + movl %r14d, %edi +.Ltmp6: + #DEBUG_VALUE: main:argc <- [DW_OP_LLVM_entry_value 1] $edi + callq _Z4foo0i +.Ltmp7: + #DEBUG_VALUE: main:argv <- [DW_OP_LLVM_entry_value 1] $rsi + movl %eax, %ebp + #DEBUG_VALUE: main:x <- $r14d + .loc 0 16 29 is_stmt 0 # main.cpp:16:29 + movl %r14d, %edi + callq _Z4foo1i +.Ltmp8: + movl %eax, %r15d + #DEBUG_VALUE: main:x <- $r14d + .loc 0 16 39 # main.cpp:16:39 + movl %r14d, %edi + callq _Z4foo2i +.Ltmp9: + # kill: def $eax killed $eax def $rax + .loc 0 16 13 # main.cpp:16:13 + addl %ebx, %ebp + .loc 0 16 17 # main.cpp:16:17 + addl %r15d, %ebp + .loc 0 16 37 # main.cpp:16:37 + addl %ebp, %eax + addl $5, %eax + .loc 0 16 4 # main.cpp:16:4 + addq $8, %rsp + .cfi_def_cfa_offset 40 + popq %rbx + .cfi_def_cfa_offset 32 + popq %r14 +.Ltmp10: + .cfi_def_cfa_offset 24 + popq %r15 + .cfi_def_cfa_offset 16 + popq %rbp + .cfi_def_cfa_offset 8 + retq +.Ltmp11: +.Lfunc_end1: + .size main, .Lfunc_end1-main + .cfi_endproc + # -- End function + .section .debug_loclists,"",@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 3 # Offset entry count +.Lloclists_table_base0: + .long .Ldebug_loc0-.Lloclists_table_base0 + .long .Ldebug_loc1-.Lloclists_table_base0 + .long .Ldebug_loc2-.Lloclists_table_base0 +.Ldebug_loc0: + .byte 1 # DW_LLE_base_addressx + .byte 1 # base address index + .byte 4 # DW_LLE_offset_pair + .uleb128 .Lfunc_begin1-.Lfunc_begin1 # starting offset + .uleb128 .Ltmp6-.Lfunc_begin1 # ending offset + .byte 1 # Loc expr size + .byte 85 # super-register DW_OP_reg5 + .byte 4 # DW_LLE_offset_pair + .uleb128 .Ltmp6-.Lfunc_begin1 # starting offset + .uleb128 .Lfunc_end1-.Lfunc_begin1 # ending offset + .byte 4 # Loc expr size + .byte 163 # DW_OP_entry_value + .byte 1 # 1 + .byte 85 # super-register DW_OP_reg5 + .byte 159 # DW_OP_stack_value + .byte 0 # DW_LLE_end_of_list +.Ldebug_loc1: + .byte 1 # DW_LLE_base_addressx + .byte 1 # base address index + .byte 4 # DW_LLE_offset_pair + .uleb128 .Lfunc_begin1-.Lfunc_begin1 # starting offset + .uleb128 .Ltmp7-.Lfunc_begin1 # ending offset + .byte 1 # Loc expr size + .byte 84 # DW_OP_reg4 + .byte 4 # DW_LLE_offset_pair + .uleb128 .Ltmp7-.Lfunc_begin1 # starting offset + .uleb128 .Lfunc_end1-.Lfunc_begin1 # ending offset + .byte 4 # Loc expr size + .byte 163 # DW_OP_entry_value + .byte 1 # 1 + .byte 84 # DW_OP_reg4 + .byte 159 # DW_OP_stack_value + .byte 0 # DW_LLE_end_of_list +.Ldebug_loc2: + .byte 1 # DW_LLE_base_addressx + .byte 1 # base address index + .byte 4 # DW_LLE_offset_pair + .uleb128 .Ltmp1-.Lfunc_begin1 # starting offset + .uleb128 .Ltmp3-.Lfunc_begin1 # ending offset + .byte 1 # Loc expr size + .byte 85 # super-register DW_OP_reg5 + .byte 4 # DW_LLE_offset_pair + .uleb128 .Ltmp3-.Lfunc_begin1 # starting offset + .uleb128 .Ltmp10-.Lfunc_begin1 # ending offset + .byte 1 # Loc expr size + .byte 94 # super-register DW_OP_reg14 + .byte 0 # DW_LLE_end_of_list +.Ldebug_list_header_end0: + .section .debug_abbrev,"",@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 114 # DW_AT_str_offsets_base + .byte 23 # DW_FORM_sec_offset + .byte 16 # DW_AT_stmt_list + .byte 23 # DW_FORM_sec_offset + .byte 27 # DW_AT_comp_dir + .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 + .ascii "\214\001" # DW_AT_loclists_base + .byte 23 # DW_FORM_sec_offset + .byte 0 # EOM(1) + .byte 0 # EOM(2) + .byte 2 # 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 122 # DW_AT_call_all_calls + .byte 25 # DW_FORM_flag_present + .byte 49 # DW_AT_abstract_origin + .byte 19 # DW_FORM_ref4 + .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 49 # DW_AT_abstract_origin + .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 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 63 # DW_AT_external + .byte 25 # DW_FORM_flag_present + .byte 32 # DW_AT_inline + .byte 33 # DW_FORM_implicit_const + .byte 1 + .byte 0 # EOM(1) + .byte 0 # EOM(2) + .byte 5 # Abbreviation Code + .byte 5 # DW_TAG_formal_parameter + .byte 0 # DW_CHILDREN_no + .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 15 # DW_TAG_pointer_type + .byte 0 # DW_CHILDREN_no + .byte 73 # DW_AT_type + .byte 19 # DW_FORM_ref4 + .byte 0 # EOM(1) + .byte 0 # EOM(2) + .byte 7 # 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 8 # 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 122 # DW_AT_call_all_calls + .byte 25 # DW_FORM_flag_present + .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 9 # Abbreviation Code + .byte 5 # DW_TAG_formal_parameter + .byte 0 # DW_CHILDREN_no + .byte 2 # DW_AT_location + .byte 34 # DW_FORM_loclistx + .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 10 # Abbreviation Code + .byte 52 # DW_TAG_variable + .byte 0 # DW_CHILDREN_no + .byte 2 # DW_AT_location + .byte 34 # DW_FORM_loclistx + .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 11 # Abbreviation Code + .byte 52 # DW_TAG_variable + .byte 0 # DW_CHILDREN_no + .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 12 # Abbreviation Code + .byte 29 # DW_TAG_inlined_subroutine + .byte 0 # DW_CHILDREN_no + .byte 49 # DW_AT_abstract_origin + .byte 19 # DW_FORM_ref4 + .byte 85 # DW_AT_ranges + .byte 35 # DW_FORM_rnglistx + .byte 88 # DW_AT_call_file + .byte 11 # DW_FORM_data1 + .byte 89 # DW_AT_call_line + .byte 11 # DW_FORM_data1 + .byte 87 # DW_AT_call_column + .byte 11 # DW_FORM_data1 + .byte 0 # EOM(1) + .byte 0 # EOM(2) + .byte 13 # Abbreviation Code + .byte 72 # DW_TAG_call_site + .byte 1 # DW_CHILDREN_yes + .byte 127 # DW_AT_call_origin + .byte 19 # DW_FORM_ref4 + .byte 125 # DW_AT_call_return_pc + .byte 27 # DW_FORM_addrx + .byte 0 # EOM(1) + .byte 0 # EOM(2) + .byte 14 # Abbreviation Code + .byte 73 # DW_TAG_call_site_parameter + .byte 0 # DW_CHILDREN_no + .byte 2 # DW_AT_location + .byte 24 # DW_FORM_exprloc + .byte 126 # DW_AT_call_value + .byte 24 # DW_FORM_exprloc + .byte 0 # EOM(1) + .byte 0 # EOM(2) + .byte 15 # Abbreviation Code + .byte 46 # DW_TAG_subprogram + .byte 1 # DW_CHILDREN_yes + .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 60 # DW_AT_declaration + .byte 25 # DW_FORM_flag_present + .byte 63 # DW_AT_external + .byte 25 # DW_FORM_flag_present + .byte 0 # EOM(1) + .byte 0 # EOM(2) + .byte 16 # Abbreviation Code + .byte 5 # DW_TAG_formal_parameter + .byte 0 # DW_CHILDREN_no + .byte 73 # DW_AT_type + .byte 19 # DW_FORM_ref4 + .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 1 # DWARF Unit Type + .byte 8 # Address Size (in bytes) + .long .debug_abbrev # Offset Into Abbrev. Section + .byte 1 # Abbrev [1] 0xc:0xfc DW_TAG_compile_unit + .byte 0 # DW_AT_producer + .short 33 # DW_AT_language + .byte 1 # DW_AT_name + .long .Lstr_offsets_base0 # DW_AT_str_offsets_base + .long .Lline_table_start0 # DW_AT_stmt_list + .byte 2 # DW_AT_comp_dir + .quad 0 # DW_AT_low_pc + .byte 1 # DW_AT_ranges + .long .Laddr_table_base0 # DW_AT_addr_base + .long .Lrnglists_table_base0 # DW_AT_rnglists_base + .long .Lloclists_table_base0 # DW_AT_loclists_base + .byte 2 # Abbrev [2] 0x2f:0x1b 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_call_all_calls + .long 74 # DW_AT_abstract_origin + .byte 3 # Abbrev [3] 0x3b:0x7 DW_TAG_formal_parameter + .byte 1 # DW_AT_location + .byte 85 + .long 79 # DW_AT_abstract_origin + .byte 3 # Abbrev [3] 0x42:0x7 DW_TAG_formal_parameter + .byte 1 # DW_AT_location + .byte 84 + .long 87 # DW_AT_abstract_origin + .byte 0 # End Of Children Mark + .byte 4 # Abbrev [4] 0x4a:0x16 DW_TAG_subprogram + .byte 3 # DW_AT_linkage_name + .byte 4 # DW_AT_name + .byte 0 # DW_AT_decl_file + .byte 1 # DW_AT_decl_line + # DW_AT_external + # DW_AT_inline + .byte 5 # Abbrev [5] 0x4f:0x8 DW_TAG_formal_parameter + .byte 5 # DW_AT_name + .byte 0 # DW_AT_decl_file + .byte 1 # DW_AT_decl_line + .long 96 # DW_AT_type + .byte 5 # Abbrev [5] 0x57:0x8 DW_TAG_formal_parameter + .byte 7 # DW_AT_name + .byte 0 # DW_AT_decl_file + .byte 1 # DW_AT_decl_line + .long 96 # DW_AT_type + .byte 0 # End Of Children Mark + .byte 6 # Abbrev [6] 0x60:0x5 DW_TAG_pointer_type + .long 101 # DW_AT_type + .byte 7 # Abbrev [7] 0x65:0x4 DW_TAG_base_type + .byte 6 # DW_AT_name + .byte 5 # DW_AT_encoding + .byte 4 # DW_AT_byte_size + .byte 8 # Abbrev [8] 0x69:0x63 DW_TAG_subprogram + .byte 1 # DW_AT_low_pc + .long .Lfunc_end1-.Lfunc_begin1 # DW_AT_high_pc + .byte 1 # DW_AT_frame_base + .byte 87 + # DW_AT_call_all_calls + .byte 14 # DW_AT_name + .byte 0 # DW_AT_decl_file + .byte 12 # DW_AT_decl_line + .long 101 # DW_AT_type + # DW_AT_external + .byte 9 # Abbrev [9] 0x78:0x9 DW_TAG_formal_parameter + .byte 0 # DW_AT_location + .byte 15 # DW_AT_name + .byte 0 # DW_AT_decl_file + .byte 12 # DW_AT_decl_line + .long 101 # DW_AT_type + .byte 9 # Abbrev [9] 0x81:0x9 DW_TAG_formal_parameter + .byte 1 # DW_AT_location + .byte 16 # DW_AT_name + .byte 0 # DW_AT_decl_file + .byte 12 # DW_AT_decl_line + .long 249 # DW_AT_type + .byte 10 # Abbrev [10] 0x8a:0x9 DW_TAG_variable + .byte 2 # DW_AT_location + .byte 5 # DW_AT_name + .byte 0 # DW_AT_decl_file + .byte 13 # DW_AT_decl_line + .long 101 # DW_AT_type + .byte 11 # Abbrev [11] 0x93:0x8 DW_TAG_variable + .byte 7 # DW_AT_name + .byte 0 # DW_AT_decl_file + .byte 14 # DW_AT_decl_line + .long 101 # DW_AT_type + .byte 12 # Abbrev [12] 0x9b:0x9 DW_TAG_inlined_subroutine + .long 74 # DW_AT_abstract_origin + .byte 0 # DW_AT_ranges + .byte 0 # DW_AT_call_file + .byte 15 # DW_AT_call_line + .byte 4 # DW_AT_call_column + .byte 13 # Abbrev [13] 0xa4:0xd DW_TAG_call_site + .long 204 # DW_AT_call_origin + .byte 2 # DW_AT_call_return_pc + .byte 14 # Abbrev [14] 0xaa:0x6 DW_TAG_call_site_parameter + .byte 1 # DW_AT_location + .byte 85 + .byte 2 # DW_AT_call_value + .byte 126 + .byte 0 + .byte 0 # End Of Children Mark + .byte 13 # Abbrev [13] 0xb1:0xd DW_TAG_call_site + .long 219 # DW_AT_call_origin + .byte 3 # DW_AT_call_return_pc + .byte 14 # Abbrev [14] 0xb7:0x6 DW_TAG_call_site_parameter + .byte 1 # DW_AT_location + .byte 85 + .byte 2 # DW_AT_call_value + .byte 126 + .byte 0 + .byte 0 # End Of Children Mark + .byte 13 # Abbrev [13] 0xbe:0xd DW_TAG_call_site + .long 234 # DW_AT_call_origin + .byte 4 # DW_AT_call_return_pc + .byte 14 # Abbrev [14] 0xc4:0x6 DW_TAG_call_site_parameter + .byte 1 # DW_AT_location + .byte 85 + .byte 2 # DW_AT_call_value + .byte 126 + .byte 0 + .byte 0 # End Of Children Mark + .byte 0 # End Of Children Mark + .byte 15 # Abbrev [15] 0xcc:0xf DW_TAG_subprogram + .byte 8 # DW_AT_linkage_name + .byte 9 # DW_AT_name + .byte 0 # DW_AT_decl_file + .byte 9 # DW_AT_decl_line + .long 101 # DW_AT_type + # DW_AT_declaration + # DW_AT_external + .byte 16 # Abbrev [16] 0xd5:0x5 DW_TAG_formal_parameter + .long 101 # DW_AT_type + .byte 0 # End Of Children Mark + .byte 15 # Abbrev [15] 0xdb:0xf DW_TAG_subprogram + .byte 10 # DW_AT_linkage_name + .byte 11 # DW_AT_name + .byte 0 # DW_AT_decl_file + .byte 10 # DW_AT_decl_line + .long 101 # DW_AT_type + # DW_AT_declaration + # DW_AT_external + .byte 16 # Abbrev [16] 0xe4:0x5 DW_TAG_formal_parameter + .long 101 # DW_AT_type + .byte 0 # End Of Children Mark + .byte 15 # Abbrev [15] 0xea:0xf DW_TAG_subprogram + .byte 12 # DW_AT_linkage_name + .byte 13 # DW_AT_name + .byte 0 # DW_AT_decl_file + .byte 11 # DW_AT_decl_line + .long 101 # DW_AT_type + # DW_AT_declaration + # DW_AT_external + .byte 16 # Abbrev [16] 0xf3:0x5 DW_TAG_formal_parameter + .long 101 # DW_AT_type + .byte 0 # End Of Children Mark + .byte 6 # Abbrev [6] 0xf9:0x5 DW_TAG_pointer_type + .long 254 # DW_AT_type + .byte 6 # Abbrev [6] 0xfe:0x5 DW_TAG_pointer_type + .long 259 # DW_AT_type + .byte 7 # Abbrev [7] 0x103:0x4 DW_TAG_base_type + .byte 17 # DW_AT_name + .byte 6 # DW_AT_encoding + .byte 1 # DW_AT_byte_size + .byte 0 # End Of Children Mark +.Ldebug_info_end0: + .section .debug_rnglists,"",@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 2 # Offset entry count +.Lrnglists_table_base0: + .long .Ldebug_ranges0-.Lrnglists_table_base0 + .long .Ldebug_ranges1-.Lrnglists_table_base0 +.Ldebug_ranges0: + .byte 1 # DW_RLE_base_addressx + .byte 1 # base address index + .byte 4 # DW_RLE_offset_pair + .uleb128 .Ltmp2-.Lfunc_begin1 # starting offset + .uleb128 .Ltmp3-.Lfunc_begin1 # ending offset + .byte 4 # DW_RLE_offset_pair + .uleb128 .Ltmp4-.Lfunc_begin1 # starting offset + .uleb128 .Ltmp5-.Lfunc_begin1 # ending offset + .byte 0 # DW_RLE_end_of_list +.Ldebug_ranges1: + .byte 3 # DW_RLE_startx_length + .byte 0 # start index + .uleb128 .Lfunc_end0-.Lfunc_begin0 # length + .byte 3 # DW_RLE_startx_length + .byte 1 # start index + .uleb128 .Lfunc_end1-.Lfunc_begin1 # length + .byte 0 # DW_RLE_end_of_list +.Ldebug_list_header_end1: + .section .debug_str_offsets,"",@progbits + .long 76 # Length of String Offsets Set + .short 5 + .short 0 +.Lstr_offsets_base0: + .section .debug_str,"MS",@progbits,1 +.Linfo_string0: + .asciz "clang version 15.0.0" # string offset=0 +.Linfo_string1: + .asciz "main.cpp" # string offset=134 +.Linfo_string2: + .asciz "/test" # string offset=143 +.Linfo_string3: + .asciz "_Z3usePiS_" # string offset=198 +.Linfo_string4: + .asciz "use" # string offset=209 +.Linfo_string5: + .asciz "x" # string offset=213 +.Linfo_string6: + .asciz "int" # string offset=215 +.Linfo_string7: + .asciz "y" # string offset=219 +.Linfo_string8: + .asciz "_Z4foo0i" # string offset=221 +.Linfo_string9: + .asciz "foo0" # string offset=230 +.Linfo_string10: + .asciz "_Z4foo1i" # string offset=235 +.Linfo_string11: + .asciz "foo1" # string offset=244 +.Linfo_string12: + .asciz "_Z4foo2i" # string offset=249 +.Linfo_string13: + .asciz "foo2" # string offset=258 +.Linfo_string14: + .asciz "main" # string offset=263 +.Linfo_string15: + .asciz "argc" # string offset=268 +.Linfo_string16: + .asciz "argv" # string offset=273 +.Linfo_string17: + .asciz "char" # string offset=278 + .section .debug_str_offsets,"",@progbits + .long .Linfo_string0 + .long .Linfo_string1 + .long .Linfo_string2 + .long .Linfo_string3 + .long .Linfo_string4 + .long .Linfo_string5 + .long .Linfo_string6 + .long .Linfo_string7 + .long .Linfo_string8 + .long .Linfo_string9 + .long .Linfo_string10 + .long .Linfo_string11 + .long .Linfo_string12 + .long .Linfo_string13 + .long .Linfo_string14 + .long .Linfo_string15 + .long .Linfo_string16 + .long .Linfo_string17 + .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 + .quad .Lfunc_begin1 + .quad .Ltmp7 + .quad .Ltmp8 + .quad .Ltmp9 +.Ldebug_addr_end0: + .ident "clang version 15.0.0" + .section ".note.GNU-stack","",@progbits + .addrsig + .section .debug_line,"",@progbits +.Lline_table_start0: diff --git a/bolt/test/X86/Inputs/dwarf5-split-dwarf4-monolithic-helper1.s b/bolt/test/X86/Inputs/dwarf5-split-dwarf4-monolithic-helper1.s new file mode 100644 --- /dev/null +++ b/bolt/test/X86/Inputs/dwarf5-split-dwarf4-monolithic-helper1.s @@ -0,0 +1,422 @@ + .text + .file "helper1.cpp" + .file 0 "." "helper1.cpp" md5 0xe6dbd773fdf80bfea332cdf8284cddce + .section .text._Z4foo1i,"ax",@progbits + .globl _Z4foo1i # -- Begin function _Z4foo1i + .p2align 4, 0x90 + .type _Z4foo1i,@function +_Z4foo1i: # @_Z4foo1i +.Lfunc_begin0: + .loc 0 6 0 # helper1.cpp:6:0 + .cfi_startproc +# %bb.0: # %entry + #DEBUG_VALUE: foo1:argc <- $edi + #DEBUG_VALUE: foo1:x <- $edi + # kill: def $edi killed $edi def $rdi + #DEBUG_VALUE: useFoo:x <- undef + .loc 0 3 6 prologue_end # helper1.cpp:3:6 + leal 4(%rdi), %eax +.Ltmp0: + #DEBUG_VALUE: foo1:x <- $eax + .loc 0 9 4 # helper1.cpp:9:4 + retq +.Ltmp1: +.Lfunc_end0: + .size _Z4foo1i, .Lfunc_end0-_Z4foo1i + .cfi_endproc + # -- End function + .type fooVar1,@object # @fooVar1 + .bss + .globl fooVar1 + .p2align 2 +fooVar1: + .long 0 # 0x0 + .size fooVar1, 4 + + .section .debug_loclists.dwo,"e",@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 +.Lloclists_table_base0: + .long .Ldebug_loc0-.Lloclists_table_base0 +.Ldebug_loc0: + .byte 1 # DW_LLE_base_addressx + .byte 1 # base address index + .byte 4 # DW_LLE_offset_pair + .uleb128 .Lfunc_begin0-.Lfunc_begin0 # starting offset + .uleb128 .Ltmp0-.Lfunc_begin0 # ending offset + .byte 1 # Loc expr size + .byte 85 # super-register DW_OP_reg5 + .byte 4 # DW_LLE_offset_pair + .uleb128 .Ltmp0-.Lfunc_begin0 # starting offset + .uleb128 .Lfunc_end0-.Lfunc_begin0 # ending offset + .byte 1 # Loc expr size + .byte 80 # super-register DW_OP_reg0 + .byte 0 # DW_LLE_end_of_list +.Ldebug_list_header_end0: + .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 3067768330068978739 + .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 1 # 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 "helper1.dwo" # string offset=60 + .section .debug_str_offsets,"",@progbits + .long .Lskel_string0 + .long .Lskel_string1 + .section .debug_str_offsets.dwo,"e",@progbits + .long 48 # Length of String Offsets Set + .short 5 + .short 0 + .section .debug_str.dwo,"eMS",@progbits,1 +.Linfo_string0: + .asciz "fooVar1" # string offset=0 +.Linfo_string1: + .asciz "int" # string offset=8 +.Linfo_string2: + .asciz "_ZL6useFooPi" # string offset=12 +.Linfo_string3: + .asciz "useFoo" # string offset=25 +.Linfo_string4: + .asciz "x" # string offset=32 +.Linfo_string5: + .asciz "_Z4foo1i" # string offset=34 +.Linfo_string6: + .asciz "foo1" # string offset=43 +.Linfo_string7: + .asciz "argc" # string offset=48 +.Linfo_string8: + .asciz "clang version 15.0.0" # string offset=53 +.Linfo_string9: + .asciz "helper1.cpp" # string offset=187 +.Linfo_string10: + .asciz "helper1.dwo" # string offset=199 + .section .debug_str_offsets.dwo,"e",@progbits + .long 0 + .long 8 + .long 12 + .long 25 + .long 32 + .long 34 + .long 43 + .long 48 + .long 53 + .long 187 + .long 199 + .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 3067768330068978739 + .byte 1 # Abbrev [1] 0x14:0x5a DW_TAG_compile_unit + .byte 8 # DW_AT_producer + .short 33 # DW_AT_language + .byte 9 # DW_AT_name + .byte 10 # DW_AT_dwo_name + .byte 2 # Abbrev [2] 0x1a:0xb DW_TAG_variable + .byte 0 # DW_AT_name + .long 37 # DW_AT_type + # DW_AT_external + .byte 0 # DW_AT_decl_file + .byte 1 # DW_AT_decl_line + .byte 2 # DW_AT_location + .byte 161 + .byte 0 + .byte 3 # Abbrev [3] 0x25:0x4 DW_TAG_base_type + .byte 1 # DW_AT_name + .byte 5 # DW_AT_encoding + .byte 4 # DW_AT_byte_size + .byte 4 # Abbrev [4] 0x29:0xe DW_TAG_subprogram + .byte 2 # DW_AT_linkage_name + .byte 3 # DW_AT_name + .byte 0 # DW_AT_decl_file + .byte 2 # DW_AT_decl_line + # DW_AT_inline + .byte 5 # Abbrev [5] 0x2e:0x8 DW_TAG_formal_parameter + .byte 4 # DW_AT_name + .byte 0 # DW_AT_decl_file + .byte 2 # DW_AT_decl_line + .long 55 # DW_AT_type + .byte 0 # End Of Children Mark + .byte 6 # Abbrev [6] 0x37:0x5 DW_TAG_pointer_type + .long 37 # DW_AT_type + .byte 7 # Abbrev [7] 0x3c:0x31 DW_TAG_subprogram + .byte 1 # DW_AT_low_pc + .long .Lfunc_end0-.Lfunc_begin0 # DW_AT_high_pc + .byte 1 # DW_AT_frame_base + .byte 87 + # DW_AT_call_all_calls + .byte 5 # DW_AT_linkage_name + .byte 6 # DW_AT_name + .byte 0 # DW_AT_decl_file + .byte 6 # DW_AT_decl_line + .long 37 # DW_AT_type + # DW_AT_external + .byte 8 # Abbrev [8] 0x4c:0xa DW_TAG_formal_parameter + .byte 1 # DW_AT_location + .byte 85 + .byte 7 # DW_AT_name + .byte 0 # DW_AT_decl_file + .byte 6 # DW_AT_decl_line + .long 37 # DW_AT_type + .byte 9 # Abbrev [9] 0x56:0x9 DW_TAG_variable + .byte 0 # DW_AT_location + .byte 4 # DW_AT_name + .byte 0 # DW_AT_decl_file + .byte 7 # DW_AT_decl_line + .long 37 # DW_AT_type + .byte 10 # Abbrev [10] 0x5f:0xd DW_TAG_inlined_subroutine + .long 41 # DW_AT_abstract_origin + .byte 1 # DW_AT_low_pc + .long .Ltmp0-.Lfunc_begin0 # DW_AT_high_pc + .byte 0 # DW_AT_call_file + .byte 8 # DW_AT_call_line + .byte 4 # DW_AT_call_column + .byte 0 # End Of Children Mark + .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 52 # DW_TAG_variable + .byte 0 # DW_CHILDREN_no + .byte 3 # DW_AT_name + .byte 37 # DW_FORM_strx1 + .byte 73 # DW_AT_type + .byte 19 # DW_FORM_ref4 + .byte 63 # DW_AT_external + .byte 25 # DW_FORM_flag_present + .byte 58 # DW_AT_decl_file + .byte 11 # DW_FORM_data1 + .byte 59 # DW_AT_decl_line + .byte 11 # DW_FORM_data1 + .byte 2 # DW_AT_location + .byte 24 # DW_FORM_exprloc + .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 4 # Abbreviation Code + .byte 46 # DW_TAG_subprogram + .byte 1 # DW_CHILDREN_yes + .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 32 # DW_AT_inline + .byte 33 # DW_FORM_implicit_const + .byte 1 + .byte 0 # EOM(1) + .byte 0 # EOM(2) + .byte 5 # Abbreviation Code + .byte 5 # DW_TAG_formal_parameter + .byte 0 # DW_CHILDREN_no + .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 15 # DW_TAG_pointer_type + .byte 0 # DW_CHILDREN_no + .byte 73 # DW_AT_type + .byte 19 # DW_FORM_ref4 + .byte 0 # EOM(1) + .byte 0 # EOM(2) + .byte 7 # 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 122 # DW_AT_call_all_calls + .byte 25 # DW_FORM_flag_present + .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 8 # 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 9 # Abbreviation Code + .byte 52 # DW_TAG_variable + .byte 0 # DW_CHILDREN_no + .byte 2 # DW_AT_location + .byte 34 # DW_FORM_loclistx + .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 10 # Abbreviation Code + .byte 29 # DW_TAG_inlined_subroutine + .byte 0 # DW_CHILDREN_no + .byte 49 # DW_AT_abstract_origin + .byte 19 # DW_FORM_ref4 + .byte 17 # DW_AT_low_pc + .byte 27 # DW_FORM_addrx + .byte 18 # DW_AT_high_pc + .byte 6 # DW_FORM_data4 + .byte 88 # DW_AT_call_file + .byte 11 # DW_FORM_data1 + .byte 89 # DW_AT_call_line + .byte 11 # DW_FORM_data1 + .byte 87 # DW_AT_call_column + .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 fooVar1 + .quad .Lfunc_begin0 +.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 40 # Compilation Unit Length + .long 41 # DIE offset + .byte 176 # Attributes: FUNCTION, STATIC + .asciz "useFoo" # External Name + .long 60 # DIE offset + .byte 48 # Attributes: FUNCTION, EXTERNAL + .asciz "foo1" # External Name + .long 26 # DIE offset + .byte 32 # Attributes: VARIABLE, EXTERNAL + .asciz "fooVar1" # 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 40 # Compilation Unit Length + .long 37 # DIE offset + .byte 144 # Attributes: TYPE, STATIC + .asciz "int" # External Name + .long 0 # End Mark +.LpubTypes_end0: + .ident "clang version 15.0.0" + .section ".note.GNU-stack","",@progbits + .addrsig + .section .debug_line,"",@progbits +.Lline_table_start0: diff --git a/bolt/test/X86/Inputs/dwarf5-split-dwarf4-monolithic-main.s b/bolt/test/X86/Inputs/dwarf5-split-dwarf4-monolithic-main.s new file mode 100644 --- /dev/null +++ b/bolt/test/X86/Inputs/dwarf5-split-dwarf4-monolithic-main.s @@ -0,0 +1,757 @@ + .text + .file "main.cpp" + .section .text._Z3usePiS_,"ax",@progbits + .globl _Z3usePiS_ # -- Begin function _Z3usePiS_ + .p2align 4, 0x90 + .type _Z3usePiS_,@function +_Z3usePiS_: # @_Z3usePiS_ +.Lfunc_begin0: + .file 0 "." "main.cpp" md5 0xe3a18fae8565a087d09d6076b542cdab + .loc 0 1 0 # main.cpp:1:0 + .cfi_startproc +# %bb.0: # %entry + #DEBUG_VALUE: use:x <- $rdi + #DEBUG_VALUE: use:y <- $rsi + .loc 0 2 6 prologue_end # main.cpp:2:6 + addl $4, (%rdi) + .loc 0 3 6 # main.cpp:3:6 + addl $-2, (%rsi) + .loc 0 4 1 # main.cpp:4:1 + retq +.Ltmp0: +.Lfunc_end0: + .size _Z3usePiS_, .Lfunc_end0-_Z3usePiS_ + .cfi_endproc + # -- End function + .section .text.main,"ax",@progbits + .globl main # -- Begin function main + .p2align 4, 0x90 + .type main,@function +main: # @main +.Lfunc_begin1: + .loc 0 12 0 # main.cpp:12:0 + .cfi_startproc +# %bb.0: # %entry + #DEBUG_VALUE: main:argc <- $edi + #DEBUG_VALUE: main:argv <- $rsi + pushq %rbp + .cfi_def_cfa_offset 16 + pushq %r15 + .cfi_def_cfa_offset 24 + pushq %r14 + .cfi_def_cfa_offset 32 + pushq %rbx + .cfi_def_cfa_offset 40 + pushq %rax + .cfi_def_cfa_offset 48 + .cfi_offset %rbx, -40 + .cfi_offset %r14, -32 + .cfi_offset %r15, -24 + .cfi_offset %rbp, -16 +.Ltmp1: + #DEBUG_VALUE: main:x <- $edi + movl %edi, %ebx +.Ltmp2: + #DEBUG_VALUE: main:y <- [DW_OP_plus_uconst 3, DW_OP_stack_value] undef + #DEBUG_VALUE: use:x <- undef + #DEBUG_VALUE: use:y <- undef + .loc 0 2 6 prologue_end # main.cpp:2:6 + leal 4(%rbx), %r14d +.Ltmp3: + #DEBUG_VALUE: main:x <- $r14d + .loc 0 14 20 # main.cpp:14:20 + addl fooVar0(%rip), %ebx + .loc 0 14 30 is_stmt 0 # main.cpp:14:30 + addl fooVar1(%rip), %ebx +.Ltmp4: + .loc 0 3 6 is_stmt 1 # main.cpp:3:6 + addl fooVar2(%rip), %ebx +.Ltmp5: + #DEBUG_VALUE: main:y <- undef + .loc 0 16 19 # main.cpp:16:19 + movl %r14d, %edi +.Ltmp6: + #DEBUG_VALUE: main:argc <- [DW_OP_LLVM_entry_value 1] $edi + callq _Z4foo0i +.Ltmp7: + #DEBUG_VALUE: main:argv <- [DW_OP_LLVM_entry_value 1] $rsi + movl %eax, %ebp + #DEBUG_VALUE: main:x <- $r14d + .loc 0 16 29 is_stmt 0 # main.cpp:16:29 + movl %r14d, %edi + callq _Z4foo1i +.Ltmp8: + movl %eax, %r15d + #DEBUG_VALUE: main:x <- $r14d + .loc 0 16 39 # main.cpp:16:39 + movl %r14d, %edi + callq _Z4foo2i +.Ltmp9: + # kill: def $eax killed $eax def $rax + .loc 0 16 13 # main.cpp:16:13 + addl %ebx, %ebp + .loc 0 16 17 # main.cpp:16:17 + addl %r15d, %ebp + .loc 0 16 37 # main.cpp:16:37 + addl %ebp, %eax + addl $5, %eax + .loc 0 16 4 # main.cpp:16:4 + addq $8, %rsp + .cfi_def_cfa_offset 40 + popq %rbx + .cfi_def_cfa_offset 32 + popq %r14 +.Ltmp10: + .cfi_def_cfa_offset 24 + popq %r15 + .cfi_def_cfa_offset 16 + popq %rbp + .cfi_def_cfa_offset 8 + retq +.Ltmp11: +.Lfunc_end1: + .size main, .Lfunc_end1-main + .cfi_endproc + # -- End function + .section .debug_loclists.dwo,"e",@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 3 # Offset entry count +.Lloclists_table_base0: + .long .Ldebug_loc0-.Lloclists_table_base0 + .long .Ldebug_loc1-.Lloclists_table_base0 + .long .Ldebug_loc2-.Lloclists_table_base0 +.Ldebug_loc0: + .byte 1 # DW_LLE_base_addressx + .byte 1 # base address index + .byte 4 # DW_LLE_offset_pair + .uleb128 .Lfunc_begin1-.Lfunc_begin1 # starting offset + .uleb128 .Ltmp6-.Lfunc_begin1 # ending offset + .byte 1 # Loc expr size + .byte 85 # super-register DW_OP_reg5 + .byte 4 # DW_LLE_offset_pair + .uleb128 .Ltmp6-.Lfunc_begin1 # starting offset + .uleb128 .Lfunc_end1-.Lfunc_begin1 # ending offset + .byte 4 # Loc expr size + .byte 163 # DW_OP_entry_value + .byte 1 # 1 + .byte 85 # super-register DW_OP_reg5 + .byte 159 # DW_OP_stack_value + .byte 0 # DW_LLE_end_of_list +.Ldebug_loc1: + .byte 1 # DW_LLE_base_addressx + .byte 1 # base address index + .byte 4 # DW_LLE_offset_pair + .uleb128 .Lfunc_begin1-.Lfunc_begin1 # starting offset + .uleb128 .Ltmp7-.Lfunc_begin1 # ending offset + .byte 1 # Loc expr size + .byte 84 # DW_OP_reg4 + .byte 4 # DW_LLE_offset_pair + .uleb128 .Ltmp7-.Lfunc_begin1 # starting offset + .uleb128 .Lfunc_end1-.Lfunc_begin1 # ending offset + .byte 4 # Loc expr size + .byte 163 # DW_OP_entry_value + .byte 1 # 1 + .byte 84 # DW_OP_reg4 + .byte 159 # DW_OP_stack_value + .byte 0 # DW_LLE_end_of_list +.Ldebug_loc2: + .byte 1 # DW_LLE_base_addressx + .byte 1 # base address index + .byte 4 # DW_LLE_offset_pair + .uleb128 .Ltmp1-.Lfunc_begin1 # starting offset + .uleb128 .Ltmp3-.Lfunc_begin1 # ending offset + .byte 1 # Loc expr size + .byte 85 # super-register DW_OP_reg5 + .byte 4 # DW_LLE_offset_pair + .uleb128 .Ltmp3-.Lfunc_begin1 # starting offset + .uleb128 .Ltmp10-.Lfunc_begin1 # ending offset + .byte 1 # Loc expr size + .byte 94 # super-register DW_OP_reg14 + .byte 0 # DW_LLE_end_of_list +.Ldebug_list_header_end0: + .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 8833000344697388042 + .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_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_table_base0: + .long .Ldebug_ranges1-.Lrnglists_table_base0 +.Ldebug_ranges1: + .byte 3 # DW_RLE_startx_length + .byte 0 # start index + .uleb128 .Lfunc_end0-.Lfunc_begin0 # length + .byte 3 # DW_RLE_startx_length + .byte 1 # start index + .uleb128 .Lfunc_end1-.Lfunc_begin1 # length + .byte 0 # DW_RLE_end_of_list +.Ldebug_list_header_end1: + .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.dwo" # string offset=60 + .section .debug_str_offsets,"",@progbits + .long .Lskel_string0 + .long .Lskel_string1 + .section .debug_str_offsets.dwo,"e",@progbits + .long 76 # Length of String Offsets Set + .short 5 + .short 0 + .section .debug_str.dwo,"eMS",@progbits,1 +.Linfo_string0: + .asciz "_Z3usePiS_" # string offset=0 +.Linfo_string1: + .asciz "use" # string offset=11 +.Linfo_string2: + .asciz "x" # string offset=15 +.Linfo_string3: + .asciz "int" # string offset=17 +.Linfo_string4: + .asciz "y" # string offset=21 +.Linfo_string5: + .asciz "_Z4foo0i" # string offset=23 +.Linfo_string6: + .asciz "foo0" # string offset=32 +.Linfo_string7: + .asciz "_Z4foo1i" # string offset=37 +.Linfo_string8: + .asciz "foo1" # string offset=46 +.Linfo_string9: + .asciz "_Z4foo2i" # string offset=51 +.Linfo_string10: + .asciz "foo2" # string offset=60 +.Linfo_string11: + .asciz "main" # string offset=65 +.Linfo_string12: + .asciz "argc" # string offset=70 +.Linfo_string13: + .asciz "argv" # string offset=75 +.Linfo_string14: + .asciz "char" # string offset=80 +.Linfo_string15: + .asciz "clang version 15.0.0" # string offset=85 +.Linfo_string16: + .asciz "main.cpp" # string offset=219 +.Linfo_string17: + .asciz "main.dwo" # string offset=228 + .section .debug_str_offsets.dwo,"e",@progbits + .long 0 + .long 11 + .long 15 + .long 17 + .long 21 + .long 23 + .long 32 + .long 37 + .long 46 + .long 51 + .long 60 + .long 65 + .long 70 + .long 75 + .long 80 + .long 85 + .long 219 + .long 228 + .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 8833000344697388042 + .byte 1 # Abbrev [1] 0x14:0xdf DW_TAG_compile_unit + .byte 15 # DW_AT_producer + .short 33 # DW_AT_language + .byte 16 # DW_AT_name + .byte 17 # DW_AT_dwo_name + .byte 2 # Abbrev [2] 0x1a:0x1b 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_call_all_calls + .long 53 # DW_AT_abstract_origin + .byte 3 # Abbrev [3] 0x26:0x7 DW_TAG_formal_parameter + .byte 1 # DW_AT_location + .byte 85 + .long 58 # DW_AT_abstract_origin + .byte 3 # Abbrev [3] 0x2d:0x7 DW_TAG_formal_parameter + .byte 1 # DW_AT_location + .byte 84 + .long 66 # DW_AT_abstract_origin + .byte 0 # End Of Children Mark + .byte 4 # Abbrev [4] 0x35:0x16 DW_TAG_subprogram + .byte 0 # DW_AT_linkage_name + .byte 1 # DW_AT_name + .byte 0 # DW_AT_decl_file + .byte 1 # DW_AT_decl_line + # DW_AT_external + # DW_AT_inline + .byte 5 # Abbrev [5] 0x3a:0x8 DW_TAG_formal_parameter + .byte 2 # DW_AT_name + .byte 0 # DW_AT_decl_file + .byte 1 # DW_AT_decl_line + .long 75 # DW_AT_type + .byte 5 # Abbrev [5] 0x42:0x8 DW_TAG_formal_parameter + .byte 4 # DW_AT_name + .byte 0 # DW_AT_decl_file + .byte 1 # DW_AT_decl_line + .long 75 # DW_AT_type + .byte 0 # End Of Children Mark + .byte 6 # Abbrev [6] 0x4b:0x5 DW_TAG_pointer_type + .long 80 # DW_AT_type + .byte 7 # Abbrev [7] 0x50:0x4 DW_TAG_base_type + .byte 3 # DW_AT_name + .byte 5 # DW_AT_encoding + .byte 4 # DW_AT_byte_size + .byte 8 # Abbrev [8] 0x54:0x63 DW_TAG_subprogram + .byte 1 # DW_AT_low_pc + .long .Lfunc_end1-.Lfunc_begin1 # DW_AT_high_pc + .byte 1 # DW_AT_frame_base + .byte 87 + # DW_AT_call_all_calls + .byte 11 # DW_AT_name + .byte 0 # DW_AT_decl_file + .byte 12 # DW_AT_decl_line + .long 80 # DW_AT_type + # DW_AT_external + .byte 9 # Abbrev [9] 0x63:0x9 DW_TAG_formal_parameter + .byte 0 # DW_AT_location + .byte 12 # DW_AT_name + .byte 0 # DW_AT_decl_file + .byte 12 # DW_AT_decl_line + .long 80 # DW_AT_type + .byte 9 # Abbrev [9] 0x6c:0x9 DW_TAG_formal_parameter + .byte 1 # DW_AT_location + .byte 13 # DW_AT_name + .byte 0 # DW_AT_decl_file + .byte 12 # DW_AT_decl_line + .long 228 # DW_AT_type + .byte 10 # Abbrev [10] 0x75:0x9 DW_TAG_variable + .byte 2 # DW_AT_location + .byte 2 # DW_AT_name + .byte 0 # DW_AT_decl_file + .byte 13 # DW_AT_decl_line + .long 80 # DW_AT_type + .byte 11 # Abbrev [11] 0x7e:0x8 DW_TAG_variable + .byte 4 # DW_AT_name + .byte 0 # DW_AT_decl_file + .byte 14 # DW_AT_decl_line + .long 80 # DW_AT_type + .byte 12 # Abbrev [12] 0x86:0x9 DW_TAG_inlined_subroutine + .long 53 # DW_AT_abstract_origin + .byte 0 # DW_AT_ranges + .byte 0 # DW_AT_call_file + .byte 15 # DW_AT_call_line + .byte 4 # DW_AT_call_column + .byte 13 # Abbrev [13] 0x8f:0xd DW_TAG_call_site + .long 183 # DW_AT_call_origin + .byte 2 # DW_AT_call_return_pc + .byte 14 # Abbrev [14] 0x95:0x6 DW_TAG_call_site_parameter + .byte 1 # DW_AT_location + .byte 85 + .byte 2 # DW_AT_call_value + .byte 126 + .byte 0 + .byte 0 # End Of Children Mark + .byte 13 # Abbrev [13] 0x9c:0xd DW_TAG_call_site + .long 198 # DW_AT_call_origin + .byte 3 # DW_AT_call_return_pc + .byte 14 # Abbrev [14] 0xa2:0x6 DW_TAG_call_site_parameter + .byte 1 # DW_AT_location + .byte 85 + .byte 2 # DW_AT_call_value + .byte 126 + .byte 0 + .byte 0 # End Of Children Mark + .byte 13 # Abbrev [13] 0xa9:0xd DW_TAG_call_site + .long 213 # DW_AT_call_origin + .byte 4 # DW_AT_call_return_pc + .byte 14 # Abbrev [14] 0xaf:0x6 DW_TAG_call_site_parameter + .byte 1 # DW_AT_location + .byte 85 + .byte 2 # DW_AT_call_value + .byte 126 + .byte 0 + .byte 0 # End Of Children Mark + .byte 0 # End Of Children Mark + .byte 15 # Abbrev [15] 0xb7:0xf DW_TAG_subprogram + .byte 5 # DW_AT_linkage_name + .byte 6 # DW_AT_name + .byte 0 # DW_AT_decl_file + .byte 9 # DW_AT_decl_line + .long 80 # DW_AT_type + # DW_AT_declaration + # DW_AT_external + .byte 16 # Abbrev [16] 0xc0:0x5 DW_TAG_formal_parameter + .long 80 # DW_AT_type + .byte 0 # End Of Children Mark + .byte 15 # Abbrev [15] 0xc6:0xf DW_TAG_subprogram + .byte 7 # DW_AT_linkage_name + .byte 8 # DW_AT_name + .byte 0 # DW_AT_decl_file + .byte 10 # DW_AT_decl_line + .long 80 # DW_AT_type + # DW_AT_declaration + # DW_AT_external + .byte 16 # Abbrev [16] 0xcf:0x5 DW_TAG_formal_parameter + .long 80 # DW_AT_type + .byte 0 # End Of Children Mark + .byte 15 # Abbrev [15] 0xd5:0xf DW_TAG_subprogram + .byte 9 # DW_AT_linkage_name + .byte 10 # DW_AT_name + .byte 0 # DW_AT_decl_file + .byte 11 # DW_AT_decl_line + .long 80 # DW_AT_type + # DW_AT_declaration + # DW_AT_external + .byte 16 # Abbrev [16] 0xde:0x5 DW_TAG_formal_parameter + .long 80 # DW_AT_type + .byte 0 # End Of Children Mark + .byte 6 # Abbrev [6] 0xe4:0x5 DW_TAG_pointer_type + .long 233 # DW_AT_type + .byte 6 # Abbrev [6] 0xe9:0x5 DW_TAG_pointer_type + .long 238 # DW_AT_type + .byte 7 # Abbrev [7] 0xee:0x4 DW_TAG_base_type + .byte 14 # DW_AT_name + .byte 6 # DW_AT_encoding + .byte 1 # 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 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 122 # DW_AT_call_all_calls + .byte 25 # DW_FORM_flag_present + .byte 49 # DW_AT_abstract_origin + .byte 19 # DW_FORM_ref4 + .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 49 # DW_AT_abstract_origin + .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 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 63 # DW_AT_external + .byte 25 # DW_FORM_flag_present + .byte 32 # DW_AT_inline + .byte 33 # DW_FORM_implicit_const + .byte 1 + .byte 0 # EOM(1) + .byte 0 # EOM(2) + .byte 5 # Abbreviation Code + .byte 5 # DW_TAG_formal_parameter + .byte 0 # DW_CHILDREN_no + .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 15 # DW_TAG_pointer_type + .byte 0 # DW_CHILDREN_no + .byte 73 # DW_AT_type + .byte 19 # DW_FORM_ref4 + .byte 0 # EOM(1) + .byte 0 # EOM(2) + .byte 7 # 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 8 # 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 122 # DW_AT_call_all_calls + .byte 25 # DW_FORM_flag_present + .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 9 # Abbreviation Code + .byte 5 # DW_TAG_formal_parameter + .byte 0 # DW_CHILDREN_no + .byte 2 # DW_AT_location + .byte 34 # DW_FORM_loclistx + .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 10 # Abbreviation Code + .byte 52 # DW_TAG_variable + .byte 0 # DW_CHILDREN_no + .byte 2 # DW_AT_location + .byte 34 # DW_FORM_loclistx + .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 11 # Abbreviation Code + .byte 52 # DW_TAG_variable + .byte 0 # DW_CHILDREN_no + .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 12 # Abbreviation Code + .byte 29 # DW_TAG_inlined_subroutine + .byte 0 # DW_CHILDREN_no + .byte 49 # DW_AT_abstract_origin + .byte 19 # DW_FORM_ref4 + .byte 85 # DW_AT_ranges + .byte 35 # DW_FORM_rnglistx + .byte 88 # DW_AT_call_file + .byte 11 # DW_FORM_data1 + .byte 89 # DW_AT_call_line + .byte 11 # DW_FORM_data1 + .byte 87 # DW_AT_call_column + .byte 11 # DW_FORM_data1 + .byte 0 # EOM(1) + .byte 0 # EOM(2) + .byte 13 # Abbreviation Code + .byte 72 # DW_TAG_call_site + .byte 1 # DW_CHILDREN_yes + .byte 127 # DW_AT_call_origin + .byte 19 # DW_FORM_ref4 + .byte 125 # DW_AT_call_return_pc + .byte 27 # DW_FORM_addrx + .byte 0 # EOM(1) + .byte 0 # EOM(2) + .byte 14 # Abbreviation Code + .byte 73 # DW_TAG_call_site_parameter + .byte 0 # DW_CHILDREN_no + .byte 2 # DW_AT_location + .byte 24 # DW_FORM_exprloc + .byte 126 # DW_AT_call_value + .byte 24 # DW_FORM_exprloc + .byte 0 # EOM(1) + .byte 0 # EOM(2) + .byte 15 # Abbreviation Code + .byte 46 # DW_TAG_subprogram + .byte 1 # DW_CHILDREN_yes + .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 60 # DW_AT_declaration + .byte 25 # DW_FORM_flag_present + .byte 63 # DW_AT_external + .byte 25 # DW_FORM_flag_present + .byte 0 # EOM(1) + .byte 0 # EOM(2) + .byte 16 # Abbreviation Code + .byte 5 # DW_TAG_formal_parameter + .byte 0 # DW_CHILDREN_no + .byte 73 # DW_AT_type + .byte 19 # DW_FORM_ref4 + .byte 0 # EOM(1) + .byte 0 # EOM(2) + .byte 0 # EOM(3) + .section .debug_rnglists.dwo,"e",@progbits + .long .Ldebug_list_header_end2-.Ldebug_list_header_start2 # Length +.Ldebug_list_header_start2: + .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 1 # DW_RLE_base_addressx + .byte 1 # base address index + .byte 4 # DW_RLE_offset_pair + .uleb128 .Ltmp2-.Lfunc_begin1 # starting offset + .uleb128 .Ltmp3-.Lfunc_begin1 # ending offset + .byte 4 # DW_RLE_offset_pair + .uleb128 .Ltmp4-.Lfunc_begin1 # starting offset + .uleb128 .Ltmp5-.Lfunc_begin1 # ending offset + .byte 0 # DW_RLE_end_of_list +.Ldebug_list_header_end2: + .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 + .quad .Lfunc_begin1 + .quad .Ltmp7 + .quad .Ltmp8 + .quad .Ltmp9 +.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 84 # DIE offset + .byte 48 # Attributes: FUNCTION, EXTERNAL + .asciz "main" # External Name + .long 53 # DIE offset + .byte 48 # Attributes: FUNCTION, EXTERNAL + .asciz "use" # 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 80 # DIE offset + .byte 144 # Attributes: TYPE, STATIC + .asciz "int" # External Name + .long 238 # DIE offset + .byte 144 # Attributes: TYPE, STATIC + .asciz "char" # External Name + .long 0 # End Mark +.LpubTypes_end0: + .ident "clang version 15.0.0" + .section ".note.GNU-stack","",@progbits + .addrsig + .section .debug_line,"",@progbits +.Lline_table_start0: diff --git a/bolt/test/X86/dwarf5-dwarf4-monolithic.test b/bolt/test/X86/dwarf5-dwarf4-monolithic.test new file mode 100644 --- /dev/null +++ b/bolt/test/X86/dwarf5-dwarf4-monolithic.test @@ -0,0 +1,341 @@ +# REQUIRES: system-linux + +# RUN: llvm-mc -dwarf-version=5 -filetype=obj -triple x86_64-unknown-linux %p/Inputs/dwarf5-dwarf4-monolithic-main.s -o %tmain.o +# RUN: llvm-mc -dwarf-version=4 -filetype=obj -triple x86_64-unknown-linux %p/Inputs/dwarf5-dwarf4-monolithic-helper0.s -o %t0.o +# RUN: llvm-mc -dwarf-version=5 -filetype=obj -triple x86_64-unknown-linux %p/Inputs/dwarf5-dwarf4-monolithic-helper1.s -o %t1.o +# RUN: llvm-mc -dwarf-version=4 -filetype=obj -triple x86_64-unknown-linux %p/Inputs/dwarf5-dwarf4-monolithic-helper2.s -o %t2.o +# RUN: %clang %cflags -dwarf-5 %tmain.o %t0.o %t1.o %t2.o -o %t.exe -Wl,-q +# RUN: llvm-bolt %t.exe -o %t.bolt -update-debug-sections +# RUN: llvm-dwarfdump --show-form --verbose --debug-info %t.exe | FileCheck --check-prefix=PRECHECK %s +# RUN: llvm-dwarfdump --show-form --verbose --debug-line %t.exe | FileCheck --check-prefix=PRECHECK-LINE %s +# RUN: llvm-dwarfdump --show-form --verbose --debug-addr %t.bolt > %t.txt +# RUN: llvm-dwarfdump --show-form --verbose --debug-info %t.bolt >> %t.txt +# RUN: cat %t.txt | FileCheck --check-prefix=POSTCHECK %s +# RUN: llvm-dwarfdump --show-form --verbose --debug-line %t.bolt | FileCheck --check-prefix=POSTCHECK-LINE %s + + +# Check BOLT handles monolithic mix of DWARF4 and DWARF5. + +# main.cpp +# PRECHECK: version = 0x0005 +# PRECHECK: DW_TAG_compile_unit [1] * +# PRECHECK-NEXT: DW_AT_producer [DW_FORM_strx1] (indexed (00000000) +# PRECHECK-NEXT: DW_AT_language +# PRECHECK-NEXT: DW_AT_name +# PRECHECK-NEXT: DW_AT_str_offsets_base [DW_FORM_sec_offset] (0x00000008) +# PRECHECK-NEXT: DW_AT_stmt_list [DW_FORM_sec_offset] (0x00000000) +# PRECHECK-NEXT: DW_AT_comp_dir +# PRECHECK-NEXT: DW_AT_low_pc +# PRECHECK: DW_AT_ranges [DW_FORM_rnglistx] (indexed (0x1) +# PRECHECK-NEXT: [0x +# PRECHECK-NEXT: [0x +# PRECHECK-NEXT: DW_AT_addr_base [DW_FORM_sec_offset] (0x00000008) +# PRECHECK-NEXT: DW_AT_rnglists_base [DW_FORM_sec_offset] (0x0000000c) +# PRECHECK-NEXT: DW_AT_loclists_base [DW_FORM_sec_offset] (0x0000000c) +# PRECHECK: DW_TAG_subprogram [2] * (0x0000000c) +# PRECHECK-NEXT: DW_AT_low_pc [DW_FORM_addrx] (indexed (00000000) +# PRECHECK-NEXT: DW_AT_high_pc [DW_FORM_data4] +# PRECHECK: DW_TAG_subprogram [8] +# PRECHECK-NEXT: DW_AT_low_pc [DW_FORM_addrx] (indexed (00000001) +# PRECHECK-NEXT: DW_AT_high_pc [DW_FORM_data4] +# PRECHECK: DW_TAG_formal_parameter [9] +# PRECHECK-NEXT: DW_AT_location [DW_FORM_loclistx] (indexed (0x0) loclist = 0x00000018 +# PRECHECK: DW_TAG_formal_parameter [9] +# PRECHECK-NEXT: DW_AT_location [DW_FORM_loclistx] (indexed (0x1) loclist = 0x00000028 +# PRECHECK: DW_TAG_variable +# PRECHECK-NEXT: DW_AT_location [DW_FORM_loclistx] (indexed (0x2) loclist = 0x00000038 +# PRECHECK: DW_TAG_inlined_subroutine [12] +# PRECHECK-NEXT: DW_AT_abstract_origin +# PRECHECK-NEXT: DW_AT_ranges [DW_FORM_rnglistx] (indexed (0x0) rangelist = 0x00000014 + +# helper0.cpp +# PRECHECK: version = 0x0004 +# PRECHECK: DW_TAG_compile_unit +# PRECHECK-NEXT: DW_AT_producer +# PRECHECK-NEXT: DW_AT_language +# PRECHECK-NEXT: DW_AT_name +# PRECHECK-NEXT: DW_AT_stmt_list +# PRECHECK-NEXT: DW_AT_comp_dir +# PRECHECK-NEXT: DW_AT_low_pc [DW_FORM_addr] +# PRECHECK-NEXT: DW_AT_high_pc +# PRECHECK: DW_TAG_subprogram [7] +# PRECHECK-NEXT: DW_AT_low_pc [DW_FORM_addr] +# PRECHECK-NEXT: DW_AT_high_pc +# PRECHECK: DW_TAG_variable [9] +# PRECHECK-NEXT: DW_AT_location [DW_FORM_sec_offset] (0x00000000: +# PRECHECK: DW_TAG_inlined_subroutine [10] +# PRECHECK-NEXT: DW_AT_abstract_origin +# PRECHECK-NEXT: DW_AT_low_pc [DW_FORM_addr] +# PRECHECK-NEXT: DW_AT_high_pc + +# helper1.cpp +# PRECHECK: version = 0x0005 +# PRECHECK: DW_TAG_compile_unit [1] * +# PRECHECK-NEXT: DW_AT_producer +# PRECHECK-NEXT: DW_AT_language +# PRECHECK-NEXT: DW_AT_name +# PRECHECK-NEXT: DW_AT_str_offsets_base [DW_FORM_sec_offset] (0x00000058) +# PRECHECK-NEXT: DW_AT_stmt_list +# PRECHECK-NEXT: DW_AT_comp_dir +# PRECHECK-NEXT: DW_AT_low_pc [DW_FORM_addrx] (indexed (00000001) +# PRECHECK-NEXT: DW_AT_high_pc [DW_FORM_data4] +# PRECHECK-NEXT: DW_AT_addr_base [DW_FORM_sec_offset] (0x00000038) +# PRECHECK-NEXT: DW_AT_loclists_base [DW_FORM_sec_offset] (0x00000051) +# PRECHECK: DW_TAG_variable [2] +# PRECHECK-NEXT: DW_AT_name +# PRECHECK-NEXT: DW_AT_type +# PRECHECK-NEXT: DW_AT_external +# PRECHECK-NEXT: DW_AT_decl_file +# PRECHECK-NEXT: DW_AT_decl_line +# PRECHECK: DW_AT_location [DW_FORM_exprloc] (DW_OP_addrx 0x0) +# PRECHECK: DW_TAG_subprogram [7] +# PRECHECK-NEXT: DW_AT_low_pc [DW_FORM_addrx] (indexed (00000001) +# PRECHECK-NEXT: DW_AT_high_pc [DW_FORM_data4] +# PRECHECK: DW_TAG_variable [9] +# PRECHECK-NEXT: DW_AT_location [DW_FORM_loclistx] (indexed (0x0) +# PRECHECK: DW_TAG_inlined_subroutine [10] +# PRECHECK-NEXT: DW_AT_abstract_origin +# PRECHECK-NEXT: DW_AT_low_pc [DW_FORM_addrx] (indexed (00000001) +# PRECHECK-NEXT: DW_AT_high_pc [DW_FORM_data4] + +# helper2.cpp +# PRECHECK: version = 0x0004 +# PRECHECK: DW_TAG_compile_unit [1] * +# PRECHECK-NEXT: DW_AT_producer +# PRECHECK-NEXT: DW_AT_language +# PRECHECK-NEXT: DW_AT_name +# PRECHECK-NEXT: DW_AT_stmt_list +# PRECHECK-NEXT: DW_AT_comp_dir +# PRECHECK-NEXT: DW_AT_low_pc [DW_FORM_addr] +# PRECHECK-NEXT: DW_AT_high_pc [DW_FORM_data4] +# PRECHECK: DW_TAG_subprogram [7] +# PRECHECK-NEXT: DW_AT_low_pc [DW_FORM_addr] +# PRECHECK-NEXT: DW_AT_high_pc [DW_FORM_data4] +# PRECHECK: DW_TAG_variable [9] +# PRECHECK-NEXT: DW_AT_location [DW_FORM_sec_offset] +# PRECHECK: DW_TAG_inlined_subroutine [10] +# PRECHECK-NEXT: DW_AT_abstract_origin +# PRECHECK-NEXT: DW_AT_low_pc [DW_FORM_addr] +# PRECHECK-NEXT: DW_AT_high_pc + +# Checking debug line. + +# PRECHECK-LINE: debug_line[ +# PRECHECK-LINE: version: 5 +# PRECHECK-LINE: include_directories[ 0] = .debug_line_str[0x00000009] = "/test" +# PRECHECK-LINE-NEXT: file_names[ 0]: +# PRECHECK-LINE-NEXT: name: .debug_line_str[0x00000000] = "main.cpp" +# PRECHECK-LINE-NEXT: dir_index: 0 +# PRECHECK-LINE-NEXT: md5_checksum: e3a18fae8565a087d09d6076b542cdab + +# PRECHECK-LINE: debug_line[ +# PRECHECK-LINE: version: 4 +# PRECHECK-LINE: include_directories[ 1] = "/test" +# PRECHECK-LINE-NEXT: file_names[ 1]: +# PRECHECK-LINE-NEXT: name: "helper0.cpp" +# PRECHECK-LINE-NEXT: dir_index: 1 +# PRECHECK-LINE-NEXT: mod_time: +# PRECHECK-LINE-NEXT: length: + +# PRECHECK-LINE: debug_line[ +# PRECHECK-LINE: version: 5 +# PRECHECK-LINE: include_directories[ 0] = .debug_line_str[0x00000009] = "/test" +# PRECHECK-LINE-NEXT: file_names[ 0]: +# PRECHECK-LINE-NEXT: name: .debug_line_str[0x0000000f] = "helper1.cpp" +# PRECHECK-LINE-NEXT: dir_index: 0 +# PRECHECK-LINE-NEXT: md5_checksum: e6dbd773fdf80bfea332cdf8284cddce + +# PRECHECK-LINE: debug_line[ +# PRECHECK-LINE: version: 4 +# PRECHECK-LINE: include_directories[ 1] = "/test" +# PRECHECK-LINE-NEXT: file_names[ 1]: +# PRECHECK-LINE-NEXT: name: "helper2.cpp" +# PRECHECK-LINE-NEXT: dir_index: 1 +# PRECHECK-LINE-NEXT: mod_time: +# PRECHECK-LINE-NEXT: length: + + +# POST BOLT. + +# POSTCHECK: Addrs: [ +# POSTCHECK-NEXT: 0x[[#%.16x,ADDR:]] +# POSTCHECK-NEXT: 0x[[#%.16x,ADDR1:]] +# POSTCHECK-NEXT: 0x[[#%.16x,ADDR2:]] +# POSTCHECK-NEXT: 0x[[#%.16x,ADDR3:]] +# POSTCHECK-NEXT: 0x[[#%.16x,ADDR4:]] +# POSTCHECK-NEXT: 0x[[#%.16x,ADDR5:]] +# POSTCHECK-NEXT: 0x[[#%.16x,ADDR6:]] +# POSTCHECK-NEXT: 0x[[#%.16x,ADDR7:]] +# POSTCHECK-NEXT: 0x[[#%.16x,ADDR8:]] + +# POSTCHECK: Addrs: [ +# POSTCHECK-NEXT: 0x[[#%.16x,ADDRB:]] +# POSTCHECK-NEXT: 0x[[#%.16x,ADDRB1:]] +# POSTCHECK-NEXT: 0x[[#%.16x,ADDRB2:]] +# POSTCHECK-NEXT: 0x[[#%.16x,ADDRB3:]] + + +# main.cpp +# POSTCHECK: version = 0x0005 +# POSTCHECK: DW_TAG_compile_unit [1] * +# POSTCHECK-NEXT: DW_AT_producer [DW_FORM_strx1] (indexed (00000000) +# POSTCHECK-NEXT: DW_AT_language +# POSTCHECK-NEXT: DW_AT_name +# POSTCHECK-NEXT: DW_AT_str_offsets_base [DW_FORM_sec_offset] (0x00000008) +# POSTCHECK-NEXT: DW_AT_stmt_list [DW_FORM_sec_offset] (0x00000000) +# POSTCHECK-NEXT: DW_AT_comp_dir +# POSTCHECK-NEXT: DW_AT_low_pc +# POSTCHECK: DW_AT_ranges [DW_FORM_rnglistx] (indexed (0x0) +# POSTCHECK-NEXT: [0x[[#ADDR]], 0x[[#ADDR + 0x7]] +# POSTCHECK-NEXT: [0x[[#ADDR1]], 0x[[#ADDR1 + 0x51]] +# POSTCHECK-NEXT: DW_AT_addr_base [DW_FORM_sec_offset] (0x00000008) +# POSTCHECK-NEXT: DW_AT_rnglists_base [DW_FORM_sec_offset] (0x0000000c) +# POSTCHECK-NEXT: DW_AT_loclists_base [DW_FORM_sec_offset] (0x0000000c) +# POSTCHECK: DW_TAG_subprogram [2] +# POSTCHECK: DW_AT_low_pc [DW_FORM_addrx] (indexed (00000002) address = 0x0000000000000000) +# POSTCHECK-NEXT: DW_AT_ranges [DW_FORM_rnglistx] (indexed (0x1) rangelist +# POSTCHECK-NEXT: [0x[[#ADDR]], 0x[[#ADDR + 0x7]] +# POSTCHECK: DW_TAG_subprogram [8] +# POSTCHECK-NEXT: DW_AT_low_pc [DW_FORM_addrx] (indexed (00000002) address = 0x0000000000000000) +# POSTCHECK-NEXT: DW_AT_ranges [DW_FORM_rnglistx] (indexed (0x2) rangelist = 0x00000027 +# POSTCHECK-NEXT: [0x[[#ADDR1]], 0x[[#ADDR1 + 0x51]] +# POSTCHECK: DW_TAG_formal_parameter [9] +# POSTCHECK-NEXT: DW_AT_location [DW_FORM_loclistx] (indexed (0x0) loclist = 0x00000018 +# POSTCHECK-NEXT: [0x[[#ADDR1]], 0x[[#ADDR3]] +# POSTCHECK-NEXT: [0x[[#ADDR3]], 0x[[#ADDR3 + 0x2f]] +# POSTCHECK: DW_TAG_formal_parameter [9] +# POSTCHECK-NEXT: DW_AT_location [DW_FORM_loclistx] (indexed (0x1) loclist = 0x00000026 +# POSTCHECK-NEXT: [0x[[#ADDR1]], 0x[[#ADDR4]] +# POSTCHECK-NEXT: [0x[[#ADDR4]], 0x[[#ADDR4 + 0x2a]] +# POSTCHECK: DW_TAG_variable +# POSTCHECK-NEXT: DW_AT_location [DW_FORM_loclistx] (indexed (0x2) loclist = 0x00000034 +# POSTCHECK-NEXT: [0x[[#ADDR5]], 0x[[#ADDR6]] +# POSTCHECK-NEXT: [0x[[#ADDR6]], 0x[[#ADDR6 + 0x40]] +# POSTCHECK: DW_TAG_inlined_subroutine [12] +# POSTCHECK-NEXT: DW_AT_abstract_origin +# POSTCHECK-NEXT: DW_AT_ranges [DW_FORM_rnglistx] (indexed (0x3) rangelist = 0x0000002b +# POSTCHECK-NEXT: [0x[[#ADDR7]], 0x[[#ADDR6]] +# POSTCHECK-NEXT: [0x[[#ADDR8]], 0x[[#ADDR8 + 0x6]] + +# helper0.cpp +# POSTCHECK: version = 0x0004 +# POSTCHECK: DW_TAG_compile_unit +# POSTCHECK-NEXT: DW_AT_producer +# POSTCHECK-NEXT: DW_AT_language +# POSTCHECK-NEXT: DW_AT_name +# POSTCHECK-NEXT: DW_AT_stmt_list +# POSTCHECK-NEXT: DW_AT_comp_dir +# POSTCHECK-NEXT: DW_AT_low_pc [DW_FORM_addr] (0x0000000000000000) +# POSTCHECK-NEXT: DW_AT_ranges [DW_FORM_sec_offset] +# POSTCHECK-NEXT: [0x +# POSTCHECK: DW_TAG_subprogram [7] +# POSTCHECK-NEXT: DW_AT_low_pc [DW_FORM_addr] (0x0000000000000000) +# POSTCHECK-NEXT: DW_AT_ranges [DW_FORM_sec_offset] +# POSTCHECK-NEXT: [0x +# POSTCHECK: DW_TAG_variable [9] +# POSTCHECK-NEXT: DW_AT_location [DW_FORM_sec_offset] +# POSTCHECK-NEXT: [0x +# POSTCHECK-NEXT: [0x +# POSTCHECK: DW_TAG_inlined_subroutine [10] +# POSTCHECK-NEXT: DW_AT_abstract_origin +# POSTCHECK-NEXT: DW_AT_low_pc [DW_FORM_addr] (0x0000000000000000) +# POSTCHECK-NEXT: DW_AT_ranges [DW_FORM_sec_offset] +# POSTCHECK-NEXT: [0x + +# helper1.cpp +# POSTCHECK: version = 0x0005 +# POSTCHECK: DW_TAG_compile_unit [1] * +# POSTCHECK-NEXT: DW_AT_producer +# POSTCHECK-NEXT: DW_AT_language +# POSTCHECK-NEXT: DW_AT_name +# POSTCHECK-NEXT: DW_AT_str_offsets_base [DW_FORM_sec_offset] (0x00000058) +# POSTCHECK-NEXT: DW_AT_stmt_list +# POSTCHECK-NEXT: DW_AT_comp_dir +# POSTCHECK-NEXT: DW_AT_low_pc [DW_FORM_addrx] (indexed (00000001) +# POSTCHECK-NEXT: DW_AT_ranges [DW_FORM_rnglistx] (indexed (0x0) +# POSTCHECK-NEXT: [0x[[#ADDRB]], 0x[[#ADDRB + 0x4]] +# POSTCHECK-NEXT: DW_AT_addr_base [DW_FORM_sec_offset] +# POSTCHECK-NEXT: DW_AT_loclists_base [DW_FORM_sec_offset] +# POSTCHECK-NEXT: DW_AT_rnglists_base [DW_FORM_sec_offset] +# POSTCHECK: DW_TAG_variable [2] +# POSTCHECK-NEXT: DW_AT_name +# POSTCHECK-NEXT: DW_AT_type +# POSTCHECK-NEXT: DW_AT_external +# POSTCHECK-NEXT: DW_AT_decl_file +# POSTCHECK-NEXT: DW_AT_decl_line +# POSTCHECK: DW_AT_location [DW_FORM_exprloc] (DW_OP_addrx 0x2) +# POSTCHECK: DW_TAG_subprogram [7] +# POSTCHECK-NEXT: DW_AT_low_pc [DW_FORM_addrx] (indexed (00000001) +# POSTCHECK-NEXT: DW_AT_ranges [DW_FORM_rnglistx] (indexed (0x1) +# POSTCHECK-NEXT: [0x[[#ADDRB]], 0x[[#ADDRB + 0x4]] +# POSTCHECK: DW_TAG_variable [9] +# POSTCHECK-NEXT: DW_AT_location [DW_FORM_loclistx] (indexed (0x0) +# POSTCHECK-NEXT: [0x[[#ADDRB]], 0x[[#ADDRB + 0x3]] +# POSTCHECK-NEXT: [0x[[#ADDRB3]], 0x[[#ADDRB3 + 0x1]] +# POSTCHECK: DW_TAG_inlined_subroutine [10] +# POSTCHECK-NEXT: DW_AT_abstract_origin +# POSTCHECK-NEXT: DW_AT_low_pc [DW_FORM_addrx] (indexed (00000001) +# POSTCHECK-NEXT: DW_AT_ranges [DW_FORM_rnglistx] (indexed (0x2) rangelist +# POSTCHECK-NEXT: [0x[[#ADDRB]], 0x[[#ADDRB + 0x3]] + +# helper2.cpp +# POSTCHECK: version = 0x0004 +# POSTCHECK: DW_TAG_compile_unit [1] * +# POSTCHECK-NEXT: DW_AT_producer +# POSTCHECK-NEXT: DW_AT_language +# POSTCHECK-NEXT: DW_AT_name +# POSTCHECK-NEXT: DW_AT_stmt_list +# POSTCHECK-NEXT: DW_AT_comp_dir +# POSTCHECK-NEXT: DW_AT_low_pc [DW_FORM_addr] (0x0000000000000000) +# POSTCHECK-NEXT: DW_AT_ranges [DW_FORM_sec_offset] +# POSTCHECK-NEXT: [0x +# POSTCHECK: DW_TAG_subprogram [7] +# POSTCHECK-NEXT: DW_AT_low_pc [DW_FORM_addr] (0x0000000000000000) +# POSTCHECK-NEXT: DW_AT_ranges [DW_FORM_sec_offset] +# POSTCHECK-NEXT: [0x +# POSTCHECK: DW_TAG_variable [9] +# POSTCHECK-NEXT: DW_AT_location [DW_FORM_sec_offset] +# POSTCHECK-NEXT: [0x +# POSTCHECK-NEXT: [0x +# POSTCHECK: DW_TAG_inlined_subroutine [10] +# POSTCHECK-NEXT: DW_AT_abstract_origin +# POSTCHECK-NEXT: DW_AT_low_pc [DW_FORM_addr] (0x0000000000000000) +# POSTCHECK-NEXT: DW_AT_ranges [DW_FORM_sec_offset] +# POSTCHECK-NEXT: [0x + + +# Checking debug line. + +# POSTCHECK-LINE: debug_line[ +# POSTCHECK-LINE: version: 5 +# POSTCHECK-LINE: include_directories[ 0] = .debug_line_str[0x00000009] = "/test" +# POSTCHECK-LINE-NEXT: file_names[ 0]: +# POSTCHECK-LINE-NEXT: name: .debug_line_str[0x00000000] = "main.cpp" +# POSTCHECK-LINE-NEXT: dir_index: 0 +# POSTCHECK-LINE-NEXT: md5_checksum: e3a18fae8565a087d09d6076b542cdab + +# POSTCHECK-LINE: debug_line[ +# POSTCHECK-LINE: version: 4 +# POSTCHECK-LINE: include_directories[ 1] = "/test" +# POSTCHECK-LINE-NEXT: file_names[ 1]: +# POSTCHECK-LINE-NEXT: name: "helper0.cpp" +# POSTCHECK-LINE-NEXT: dir_index: 1 +# POSTCHECK-LINE-NEXT: mod_time: +# POSTCHECK-LINE-NEXT: length: + +# POSTCHECK-LINE: debug_line[ +# POSTCHECK-LINE: version: 5 +# POSTCHECK-LINE: include_directories[ 0] = .debug_line_str[0x00000009] = "/test" +# POSTCHECK-LINE-NEXT: file_names[ 0]: +# POSTCHECK-LINE-NEXT: name: .debug_line_str[0x0000000f] = "helper1.cpp" +# POSTCHECK-LINE-NEXT: dir_index: 0 +# POSTCHECK-LINE-NEXT: md5_checksum: e6dbd773fdf80bfea332cdf8284cddce + +# POSTCHECK-LINE: debug_line[ +# POSTCHECK-LINE: version: 4 +# POSTCHECK-LINE: include_directories[ 1] = "/test" +# POSTCHECK-LINE-NEXT: file_names[ 1]: +# POSTCHECK-LINE-NEXT: name: "helper2.cpp" +# POSTCHECK-LINE-NEXT: dir_index: 1 +# POSTCHECK-LINE-NEXT: mod_time: +# POSTCHECK-LINE-NEXT: length: diff --git a/bolt/test/X86/dwarf5-split-dwarf4-monolithic.test b/bolt/test/X86/dwarf5-split-dwarf4-monolithic.test new file mode 100644 --- /dev/null +++ b/bolt/test/X86/dwarf5-split-dwarf4-monolithic.test @@ -0,0 +1,307 @@ +# REQUIRES: system-linux + +; RUN: rm -rf %t +; RUN: mkdir %t +; RUN: cd %t + +# RUN: llvm-mc -dwarf-version=5 -filetype=obj -triple x86_64-unknown-linux -split-dwarf-file=main.dwo %p/Inputs/dwarf5-split-dwarf4-monolithic-main.s -o main.o +# RUN: llvm-mc -dwarf-version=4 -filetype=obj -triple x86_64-unknown-linux %p/Inputs/dwarf5-dwarf4-monolithic-helper0.s -o helper0.o +# RUN: llvm-mc -dwarf-version=5 -filetype=obj -triple x86_64-unknown-linux -split-dwarf-file=helper1.dwo %p/Inputs/dwarf5-split-dwarf4-monolithic-helper1.s -o helper1.o +# RUN: llvm-mc -dwarf-version=4 -filetype=obj -triple x86_64-unknown-linux %p/Inputs/dwarf5-dwarf4-monolithic-helper2.s -o helper2.o +# RUN: %clang %cflags -dwarf-5 main.o helper0.o helper1.o helper2.o -o main.exe -Wl,-q +# RUN: llvm-bolt main.exe -o main.bolt -update-debug-sections +# RUN: llvm-dwarfdump --show-form --verbose --debug-info main.exe | FileCheck --check-prefix=PRECHECK %s +# RUN: llvm-dwarfdump --show-form --verbose --debug-line main.exe | FileCheck --check-prefix=PRECHECK-LINE %s +# RUN: llvm-dwarfdump --show-form --verbose --debug-addr main.bolt > boltout.txt +# RUN: llvm-dwarfdump --show-form --verbose --debug-info main.bolt >> boltout.txt +# RUN: cat boltout.txt | FileCheck --check-prefix=POSTCHECK %s +# RUN: llvm-dwarfdump --show-form --verbose --debug-info main.dwo.dwo | FileCheck --check-prefix=POSTCHECK-DWO-MAIN %s +# RUN: llvm-dwarfdump --show-form --verbose --debug-info helper1.dwo.dwo | FileCheck --check-prefix=POSTCHECK-DWO-HELPER1 %s +# RUN: llvm-dwarfdump --show-form --verbose --debug-line main.bolt | FileCheck --check-prefix=POSTCHECK-LINE %s + + +# Check BOLT handles monolithic mix of DWARF4 and DWARF5. + +# main.cpp +# PRECHECK: version = 0x0005 +# PRECHECK: DW_TAG_skeleton_unit +# PRECHECK-NEXT: DW_AT_stmt_list +# PRECHECK-NEXT: DW_AT_str_offsets_base +# PRECHECK-NEXT: DW_AT_comp_dir +# PRECHECK-NEXT: DW_AT_GNU_pubnames [DW_FORM_flag_present] (true) +# PRECHECK-NEXT: DW_AT_dwo_name [DW_FORM_strx1] (indexed (00000001) string = "main.dwo") +# PRECHECK-NEXT: DW_AT_low_pc +# PRECHECK-NEXT: DW_AT_ranges [DW_FORM_rnglistx] (indexed (0x0) rangelist = 0x00000010 +# PRECHECK-NEXT: [0x +# PRECHECK-NEXT: [0x +# PRECHECK-NEXT: DW_AT_addr_base +# PRECHECK-NEXT: DW_AT_rnglists_base + +# helper0.cpp +# PRECHECK: version = 0x0004 +# PRECHECK: DW_TAG_compile_unit +# PRECHECK-NEXT: DW_AT_producer +# PRECHECK-NEXT: DW_AT_language +# PRECHECK-NEXT: DW_AT_name +# PRECHECK-NEXT: DW_AT_stmt_list +# PRECHECK-NEXT: DW_AT_comp_dir +# PRECHECK-NEXT: DW_AT_low_pc [DW_FORM_addr] +# PRECHECK-NEXT: DW_AT_high_pc +# PRECHECK: DW_TAG_subprogram [7] +# PRECHECK-NEXT: DW_AT_low_pc [DW_FORM_addr] +# PRECHECK-NEXT: DW_AT_high_pc +# PRECHECK: DW_TAG_variable [9] +# PRECHECK-NEXT: DW_AT_location [DW_FORM_sec_offset] (0x00000000: +# PRECHECK: DW_TAG_inlined_subroutine [10] +# PRECHECK-NEXT: DW_AT_abstract_origin +# PRECHECK-NEXT: DW_AT_low_pc [DW_FORM_addr] +# PRECHECK-NEXT: DW_AT_high_pc + +# helper1.cpp +# PRECHECK: version = 0x0005 +# PRECHECK: DW_TAG_skeleton_unit [1] +# PRECHECK-NEXT: DW_AT_stmt_list +# PRECHECK-NEXT: DW_AT_str_offsets_base +# PRECHECK-NEXT: DW_AT_comp_dir +# PRECHECK-NEXT: DW_AT_GNU_pubnames +# PRECHECK-NEXT: DW_AT_dwo_name [DW_FORM_strx1] (indexed (00000001) string = "helper1.dwo") +# PRECHECK-NEXT: DW_AT_low_pc [DW_FORM_addrx] (indexed (00000001) address +# PRECHECK-NEXT: DW_AT_high_pc [DW_FORM_data4] +# PRECHECK-NEXT: DW_AT_addr_base + +# helper2.cpp +# PRECHECK: version = 0x0004 +# PRECHECK: DW_TAG_compile_unit [1] * +# PRECHECK-NEXT: DW_AT_producer +# PRECHECK-NEXT: DW_AT_language +# PRECHECK-NEXT: DW_AT_name +# PRECHECK-NEXT: DW_AT_stmt_list +# PRECHECK-NEXT: DW_AT_comp_dir +# PRECHECK-NEXT: DW_AT_low_pc [DW_FORM_addr] +# PRECHECK-NEXT: DW_AT_high_pc [DW_FORM_data4] +# PRECHECK: DW_TAG_subprogram [7] +# PRECHECK-NEXT: DW_AT_low_pc [DW_FORM_addr] +# PRECHECK-NEXT: DW_AT_high_pc [DW_FORM_data4] +# PRECHECK: DW_TAG_variable [9] +# PRECHECK-NEXT: DW_AT_location [DW_FORM_sec_offset] +# PRECHECK: DW_TAG_inlined_subroutine [10] +# PRECHECK-NEXT: DW_AT_abstract_origin +# PRECHECK-NEXT: DW_AT_low_pc [DW_FORM_addr] +# PRECHECK-NEXT: DW_AT_high_pc + +# Checking debug line. + +# PRECHECK-LINE: debug_line[ +# PRECHECK-LINE: version: 5 +# PRECHECK-LINE: include_directories[ 0] = .debug_line_str[0x[[#%.8x,LINE:]]] = "." +# PRECHECK-LINE-NEXT: file_names[ 0]: +# PRECHECK-LINE-NEXT: name: .debug_line_str[0x[[#%.8x,LINE:]]] = "main.cpp" +# PRECHECK-LINE-NEXT: dir_index: 0 +# PRECHECK-LINE-NEXT: md5_checksum: e3a18fae8565a087d09d6076b542cdab + +# PRECHECK-LINE: debug_line[ +# PRECHECK-LINE: version: 4 +# PRECHECK-LINE: include_directories[ 1] = "/test" +# PRECHECK-LINE-NEXT: file_names[ 1]: +# PRECHECK-LINE-NEXT: name: "helper0.cpp" +# PRECHECK-LINE-NEXT: dir_index: 1 +# PRECHECK-LINE-NEXT: mod_time: +# PRECHECK-LINE-NEXT: length: + +# PRECHECK-LINE: debug_line[ +# PRECHECK-LINE: version: 5 +# PRECHECK-LINE: include_directories[ 0] = .debug_line_str[0x[[#%.8x,LINE:]]] = "." +# PRECHECK-LINE-NEXT: file_names[ 0]: +# PRECHECK-LINE-NEXT: name: .debug_line_str[0x[[#%.8x,LINE:]]] = "helper1.cpp" +# PRECHECK-LINE-NEXT: dir_index: 0 +# PRECHECK-LINE-NEXT: md5_checksum: e6dbd773fdf80bfea332cdf8284cddce + + +# PRECHECK-LINE: debug_line[ +# PRECHECK-LINE: version: 4 +# PRECHECK-LINE: include_directories[ 1] = "/test" +# PRECHECK-LINE-NEXT: file_names[ 1]: +# PRECHECK-LINE-NEXT: name: "helper2.cpp" +# PRECHECK-LINE-NEXT: dir_index: 1 +# PRECHECK-LINE-NEXT: mod_time: +# PRECHECK-LINE-NEXT: length: + + +# POST BOLT. + +# POSTCHECK: Addrs: [ +# POSTCHECK-NEXT: 0x[[#%.16x,ADDR:]] +# POSTCHECK-NEXT: 0x[[#%.16x,ADDR1:]] +# POSTCHECK-NEXT: 0x[[#%.16x,ADDR2:]] +# POSTCHECK-NEXT: 0x[[#%.16x,ADDR3:]] +# POSTCHECK-NEXT: 0x[[#%.16x,ADDR4:]] +# POSTCHECK-NEXT: 0x[[#%.16x,ADDR5:]] +# POSTCHECK-NEXT: 0x[[#%.16x,ADDR6:]] +# POSTCHECK-NEXT: 0x[[#%.16x,ADDR7:]] +# POSTCHECK-NEXT: 0x[[#%.16x,ADDR8:]] + +# POSTCHECK: Addrs: [ +# POSTCHECK-NEXT: 0x[[#%.16x,ADDRB:]] +# POSTCHECK-NEXT: 0x[[#%.16x,ADDRB1:]] +# POSTCHECK-NEXT: 0x[[#%.16x,ADDRB2:]] +# POSTCHECK-NEXT: 0x[[#%.16x,ADDRB3:]] + + +# main.cpp +# POSTCHECK: version = 0x0005 +# POSTCHECK: DW_AT_stmt_list [DW_FORM_sec_offset] (0x00000000) +# POSTCHECK-NEXT: DW_AT_str_offsets_base [DW_FORM_sec_offset] (0x00000008) +# POSTCHECK-NEXT: DW_AT_comp_dir [DW_FORM_strx1] (indexed (00000000) string = ".") +# POSTCHECK-NEXT: DW_AT_GNU_pubnames [DW_FORM_flag_present] (true) +# POSTCHECK-NEXT: DW_AT_dwo_name [DW_FORM_strx1] (indexed (00000001) string = "main.dwo.dwo") +# POSTCHECK-NEXT: DW_AT_low_pc +# POSTCHECK-NEXT: DW_AT_ranges [DW_FORM_rnglistx] (indexed (0x0) +# POSTCHECK-NEXT: [0x[[#ADDR]], 0x[[#ADDR + 0x7]] +# POSTCHECK-NEXT: [0x[[#ADDR2]], 0x[[#ADDR2 + 0x51]] +# POSTCHECK-NEXT: DW_AT_addr_base [DW_FORM_sec_offset] +# POSTCHECK-NEXT: DW_AT_rnglists_base [DW_FORM_sec_offset] + +# helper0.cpp +# POSTCHECK: version = 0x0004 +# POSTCHECK: DW_TAG_compile_unit +# POSTCHECK-NEXT: DW_AT_producer +# POSTCHECK-NEXT: DW_AT_language +# POSTCHECK-NEXT: DW_AT_name +# POSTCHECK-NEXT: DW_AT_stmt_list +# POSTCHECK-NEXT: DW_AT_comp_dir +# POSTCHECK-NEXT: DW_AT_low_pc [DW_FORM_addr] (0x0000000000000000) +# POSTCHECK-NEXT: DW_AT_ranges [DW_FORM_sec_offset] +# POSTCHECK-NEXT: [0x +# POSTCHECK: DW_TAG_subprogram [7] +# POSTCHECK-NEXT: DW_AT_low_pc [DW_FORM_addr] (0x0000000000000000) +# POSTCHECK-NEXT: DW_AT_ranges [DW_FORM_sec_offset] +# POSTCHECK-NEXT: [0x +# POSTCHECK: DW_TAG_variable [9] +# POSTCHECK-NEXT: DW_AT_location [DW_FORM_sec_offset] +# POSTCHECK-NEXT: [0x +# POSTCHECK-NEXT: [0x +# POSTCHECK: DW_TAG_inlined_subroutine [10] +# POSTCHECK-NEXT: DW_AT_abstract_origin +# POSTCHECK-NEXT: DW_AT_low_pc [DW_FORM_addr] (0x0000000000000000) +# POSTCHECK-NEXT: DW_AT_ranges [DW_FORM_sec_offset] +# POSTCHECK-NEXT: [0x + +# helper1.cpp +# POSTCHECK: version = 0x0005 +# POSTCHECK: DW_TAG_skeleton_unit [1] +# POSTCHECK-NEXT: DW_AT_stmt_list [DW_FORM_sec_offset] (0x000000fe) +# POSTCHECK-NEXT: DW_AT_str_offsets_base [DW_FORM_sec_offset] (0x00000018) +# POSTCHECK-NEXT: DW_AT_comp_dir [DW_FORM_strx1] (indexed (00000000) string = ".") +# POSTCHECK-NEXT: DW_AT_GNU_pubnames [DW_FORM_flag_present] (true) +# POSTCHECK-NEXT: DW_AT_dwo_name [DW_FORM_strx1] (indexed (00000001) string = "helper1.dwo.dwo") +# POSTCHECK-NEXT: DW_AT_low_pc [DW_FORM_addrx] (indexed (00000002) +# POSTCHECK-NEXT: DW_AT_ranges [DW_FORM_rnglistx] (indexed (0x0) +# POSTCHECK-NEXT: [0x[[#ADDRB1]], 0x[[#ADDRB1 + 0x4]] +# POSTCHECK-NEXT: DW_AT_addr_base [DW_FORM_sec_offset] +# POSTCHECK-NEXT: DW_AT_rnglists_base [DW_FORM_sec_offset] + +# helper2.cpp +# POSTCHECK: version = 0x0004 +# POSTCHECK: DW_TAG_compile_unit [1] * +# POSTCHECK-NEXT: DW_AT_producer +# POSTCHECK-NEXT: DW_AT_language +# POSTCHECK-NEXT: DW_AT_name +# POSTCHECK-NEXT: DW_AT_stmt_list +# POSTCHECK-NEXT: DW_AT_comp_dir +# POSTCHECK-NEXT: DW_AT_low_pc [DW_FORM_addr] (0x0000000000000000) +# POSTCHECK-NEXT: DW_AT_ranges [DW_FORM_sec_offset] +# POSTCHECK-NEXT: [0x +# POSTCHECK: DW_TAG_subprogram [7] +# POSTCHECK-NEXT: DW_AT_low_pc [DW_FORM_addr] (0x0000000000000000) +# POSTCHECK-NEXT: DW_AT_ranges [DW_FORM_sec_offset] +# POSTCHECK-NEXT: [0x +# POSTCHECK: DW_TAG_variable [9] +# POSTCHECK-NEXT: DW_AT_location [DW_FORM_sec_offset] +# POSTCHECK-NEXT: [0x +# POSTCHECK-NEXT: [0x +# POSTCHECK: DW_TAG_inlined_subroutine [10] +# POSTCHECK-NEXT: DW_AT_abstract_origin +# POSTCHECK-NEXT: DW_AT_low_pc [DW_FORM_addr] (0x0000000000000000) +# POSTCHECK-NEXT: DW_AT_ranges [DW_FORM_sec_offset] +# POSTCHECK-NEXT: [0x + +# POSTCHECK-DWO-MAIN: version = 0x0005 +# POSTCHECK-DWO-MAIN: DW_TAG_compile_unit +# POSTCHECK-DWO-MAIN: DW_TAG_subprogram [2] +# POSTCHECK-DWO-MAIN-NEXT: DW_AT_low_pc [DW_FORM_addrx] (indexed (00000001) +# POSTCHECK-DWO-MAIN-NEXT: DW_AT_ranges [DW_FORM_rnglistx] (indexed (0x0) rangelist = 0x00000018 +# POSTCHECK-DWO-MAIN-NEXT: [0x0000000000000000, 0x0000000000000007)) +# POSTCHECK-DWO-MAIN: DW_TAG_subprogram [8] +# POSTCHECK-DWO-MAIN-NEXT: DW_AT_low_pc [DW_FORM_addrx] (indexed (00000001) +# POSTCHECK-DWO-MAIN-NEXT: DW_AT_ranges [DW_FORM_rnglistx] (indexed (0x1) rangelist = 0x0000001c +# POSTCHECK-DWO-MAIN-NEXT: [0x0000000000000000, 0x0000000000000051)) +# POSTCHECK-DWO-MAIN: DW_TAG_formal_parameter [9] +# POSTCHECK-DWO-MAIN-NEXT: DW_AT_location [DW_FORM_loclistx] (indexed (0x0) loclist = 0x00000018: +# POSTCHECK-DWO-MAIN-NEXT: DW_LLE_startx_length (0x0000000000000002, 0x0000000000000022): DW_OP_reg5 RDI +# POSTCHECK-DWO-MAIN-NEXT: DW_LLE_startx_length (0x0000000000000003, 0x000000000000002f): DW_OP_entry_value(DW_OP_reg5 RDI), DW_OP_stack_value) +# POSTCHECK-DWO-MAIN: DW_TAG_formal_parameter [9] +# POSTCHECK-DWO-MAIN-NEXT: DW_AT_location [DW_FORM_loclistx] (indexed (0x1) loclist = 0x00000026: +# POSTCHECK-DWO-MAIN-NEXT: DW_LLE_startx_length (0x0000000000000002, 0x0000000000000027): DW_OP_reg4 RSI +# POSTCHECK-DWO-MAIN-NEXT: DW_LLE_startx_length (0x0000000000000004, 0x000000000000002a): DW_OP_entry_value(DW_OP_reg4 RSI), DW_OP_stack_value) +# POSTCHECK-DWO-MAIN: DW_TAG_variable [10] +# POSTCHECK-DWO-MAIN-NEXT: DW_AT_location [DW_FORM_loclistx] (indexed (0x2) loclist = 0x00000034: +# POSTCHECK-DWO-MAIN-NEXT: DW_LLE_startx_length (0x0000000000000005, 0x0000000000000006): DW_OP_reg5 RDI +# POSTCHECK-DWO-MAIN-NEXT: DW_LLE_startx_length (0x0000000000000006, 0x0000000000000040): DW_OP_reg14 R14) +# POSTCHECK-DWO-MAIN: DW_TAG_inlined_subroutine [12] +# POSTCHECK-DWO-MAIN-NEXT: DW_AT_abstract_origin [DW_FORM_ref4] +# POSTCHECK-DWO-MAIN-NEXT: DW_AT_ranges [DW_FORM_rnglistx] (indexed (0x2) rangelist = 0x00000020 +# BOLT uses DW_RLE_startx_length encoding. Wit this encoding llvm-dwarfdump tries to lookup the actual address. +# Since .debug_addr is in the binary low_pc is set to 0. +# POSTCHECK-DWO-MAIN-NEXT: [0x0000000000000000, 0x0000000000000004) +# POSTCHECK-DWO-MAIN-NEXT: [0x0000000000000000, 0x0000000000000006)) + +# POSTCHECK-DWO-HELPER1: version = 0x0005 +# POSTCHECK-DWO-HELPER1: DW_TAG_subprogram [7] +# POSTCHECK-DWO-HELPER1-NEXT: DW_AT_low_pc [DW_FORM_addrx] (indexed (00000002) address +# POSTCHECK-DWO-HELPER1-NEXT: DW_AT_ranges [DW_FORM_rnglistx] (indexed (0x0) rangelist = 0x00000014 +# POSTCHECK-DWO-HELPER1-NEXT: [0x0000000000000000, 0x0000000000000004)) +# POSTCHECK-DWO-HELPER1: DW_TAG_variable [9] +# POSTCHECK-DWO-HELPER1-NEXT: DW_AT_location [DW_FORM_loclistx] (indexed (0x0) loclist = 0x00000010: +# POSTCHECK-DWO-HELPER1-NEXT: DW_LLE_startx_length (0x0000000000000001, 0x0000000000000003): DW_OP_reg5 RDI +# POSTCHECK-DWO-HELPER1-NEXT: DW_LLE_startx_length (0x0000000000000003, 0x0000000000000001): DW_OP_reg0 RAX) +# POSTCHECK-DWO-HELPER1: DW_TAG_inlined_subroutine [10] +# POSTCHECK-DWO-HELPER1-NEXT: DW_AT_abstract_origin +# POSTCHECK-DWO-HELPER1-NEXT: DW_AT_low_pc [DW_FORM_addrx] (indexed (00000002) address +# POSTCHECK-DWO-HELPER1-NEXT: DW_AT_ranges [DW_FORM_rnglistx] (indexed (0x1) rangelist = 0x00000018 +# POSTCHECK-DWO-HELPER1-NEXT: [0x0000000000000000, 0x0000000000000003)) + +# Checking debug line. + +# POSTCHECK-LINE: debug_line[ +# POSTCHECK-LINE: version: 5 +# POSTCHECK-LINE: include_directories[ 0] = .debug_line_str[0x[[#%.8x,LINE:]]] = "." +# POSTCHECK-LINE-NEXT: file_names[ 0]: +# POSTCHECK-LINE-NEXT: name: .debug_line_str[0x[[#%.8x,LINE:]]] = "main.cpp" +# POSTCHECK-LINE-NEXT: dir_index: 0 +# POSTCHECK-LINE-NEXT: md5_checksum: e3a18fae8565a087d09d6076b542cdab + +# POSTCHECK-LINE: debug_line[ +# POSTCHECK-LINE: version: 4 +# POSTCHECK-LINE: include_directories[ 1] = "/test" +# POSTCHECK-LINE-NEXT: file_names[ 1]: +# POSTCHECK-LINE-NEXT: name: "helper0.cpp" +# POSTCHECK-LINE-NEXT: dir_index: 1 +# POSTCHECK-LINE-NEXT: mod_time: +# POSTCHECK-LINE-NEXT: length: + +# POSTCHECK-LINE: debug_line[ +# POSTCHECK-LINE: version: 5 +# POSTCHECK-LINE: include_directories[ 0] = .debug_line_str[0x[[#%.8x,LINE:]]] = "." +# POSTCHECK-LINE-NEXT: file_names[ 0]: +# POSTCHECK-LINE-NEXT: name: .debug_line_str[0x[[#%.8x,LINE:]]] = "helper1.cpp" +# POSTCHECK-LINE-NEXT: dir_index: 0 +# POSTCHECK-LINE-NEXT: md5_checksum: e6dbd773fdf80bfea332cdf8284cddce + +# POSTCHECK-LINE: debug_line[ +# POSTCHECK-LINE: version: 4 +# POSTCHECK-LINE: include_directories[ 1] = "/test" +# POSTCHECK-LINE-NEXT: file_names[ 1]: +# POSTCHECK-LINE-NEXT: name: "helper2.cpp" +# POSTCHECK-LINE-NEXT: dir_index: 1 +# POSTCHECK-LINE-NEXT: mod_time: +# POSTCHECK-LINE-NEXT: length: