diff --git a/bolt/include/bolt/Core/DebugData.h b/bolt/include/bolt/Core/DebugData.h --- a/bolt/include/bolt/Core/DebugData.h +++ b/bolt/include/bolt/Core/DebugData.h @@ -170,7 +170,7 @@ std::map &CachedRanges); /// Add ranges and return offset into section. - virtual uint64_t addRanges(const DebugAddressRangesVector &Ranges); + virtual uint64_t addRanges(DebugAddressRangesVector &Ranges); /// Returns an offset of an empty address ranges list that is always written /// to .debug_ranges @@ -232,7 +232,7 @@ std::map &CachedRanges) override; /// Add ranges and return offset into section. - uint64_t addRanges(const DebugAddressRangesVector &Ranges) override; + uint64_t addRanges(DebugAddressRangesVector &Ranges) override; std::unique_ptr releaseBuffer() override { return std::move(RangesBuffer); diff --git a/bolt/lib/Core/DebugData.cpp b/bolt/lib/Core/DebugData.cpp --- a/bolt/lib/Core/DebugData.cpp +++ b/bolt/lib/Core/DebugData.cpp @@ -149,7 +149,7 @@ } uint64_t -DebugRangesSectionWriter::addRanges(const DebugAddressRangesVector &Ranges) { +DebugRangesSectionWriter::addRanges(DebugAddressRangesVector &Ranges) { if (Ranges.empty()) return getEmptyRangesOffset(); @@ -207,22 +207,77 @@ return HeaderBuffer; } +static bool emitWithBase(raw_ostream &OS, + const DebugAddressRangesVector &Ranges, + DebugAddrWriter &AddrWriter, DWARFUnit &CU, + uint32_t &Index) { + if (Ranges.size() < 2) + return false; + uint64_t Base = Ranges[Index].LowPC; + std::vector> RangeOffsets; + uint8_t TempBuffer[64]; + while (Index < Ranges.size()) { + const DebugAddressRange &Range = Ranges[Index]; + if (Range.LowPC == 0) + break; + assert(Base <= Range.LowPC && "Range base is higher than low PC"); + uint32_t StartOffset = Range.LowPC - Base; + uint32_t EndOffset = Range.HighPC - Base; + if (encodeULEB128(EndOffset, TempBuffer) > 2) + break; + RangeOffsets.emplace_back(StartOffset, EndOffset); + ++Index; + } + + if (RangeOffsets.size() < 2) { + Index -= RangeOffsets.size(); + return false; + } + + support::endian::write(OS, static_cast(dwarf::DW_RLE_base_addressx), + support::little); + uint32_t BaseIndex = AddrWriter.getIndexFromAddress(Base, CU); + encodeULEB128(BaseIndex, OS); + for (auto &Offset : RangeOffsets) { + support::endian::write(OS, static_cast(dwarf::DW_RLE_offset_pair), + support::little); + encodeULEB128(Offset.first, OS); + encodeULEB128(Offset.second, OS); + } + support::endian::write(OS, static_cast(dwarf::DW_RLE_end_of_list), + support::little); + return true; +} + uint64_t DebugRangeListsSectionWriter::addRanges( - const DebugAddressRangesVector &Ranges) { + DebugAddressRangesVector &Ranges) { std::lock_guard Lock(WriterMutex); RangeEntries.push_back(CurrentOffset); - for (const DebugAddressRange &Range : Ranges) { + bool WrittenStartxLength = false; + std::sort( + Ranges.begin(), Ranges.end(), + [](const DebugAddressRange &R1, const DebugAddressRange &R2) -> bool { + return R1.LowPC < R2.LowPC; + }); + for (unsigned I = 0; I < Ranges.size();) { + WrittenStartxLength = false; + if (emitWithBase(*CUBodyStream, Ranges, *AddrWriter, *CU, I)) + continue; + const DebugAddressRange &Range = Ranges[I]; support::endian::write(*CUBodyStream, static_cast(dwarf::DW_RLE_startx_length), support::little); uint32_t Index = AddrWriter->getIndexFromAddress(Range.LowPC, *CU); encodeULEB128(Index, *CUBodyStream); encodeULEB128(Range.HighPC - Range.LowPC, *CUBodyStream); + ++I; + WrittenStartxLength = true; } - support::endian::write(*CUBodyStream, - static_cast(dwarf::DW_RLE_end_of_list), - support::little); + if (WrittenStartxLength) + support::endian::write(*CUBodyStream, + static_cast(dwarf::DW_RLE_end_of_list), + support::little); CurrentOffset = CUBodyBuffer->size(); return RangeEntries.size() - 1; } diff --git a/bolt/test/X86/dwarf5-debug-loclists.s b/bolt/test/X86/dwarf5-debug-loclists.s --- a/bolt/test/X86/dwarf5-debug-loclists.s +++ b/bolt/test/X86/dwarf5-debug-loclists.s @@ -20,8 +20,8 @@ # POSTCHECK: Addrs: [ # POSTCHECK-NEXT: 0x -# POSTCHECK-NEXT: 0x[[#%.16x,ADDR:]] # POSTCHECK-NEXT: 0x +# POSTCHECK-NEXT: 0x[[#%.16x,ADDR:]] # POSTCHECK-NEXT: 0x[[#%.16x,ADDR2:]] # POSTCHECK: version = 0x0005 # POSTCHECK: DW_AT_loclists_base [DW_FORM_sec_offset] (0x0000000c) diff --git a/bolt/test/X86/dwarf5-df-dualcu.test b/bolt/test/X86/dwarf5-df-dualcu.test --- a/bolt/test/X86/dwarf5-df-dualcu.test +++ b/bolt/test/X86/dwarf5-df-dualcu.test @@ -48,11 +48,11 @@ ; BOLT: DW_TAG_skeleton_unit ; BOLT: DW_AT_dwo_name [DW_FORM_strx1] (indexed (00000001) string = "helper.dwo.dwo") ; BOLT-NEXT: DW_AT_low_pc [DW_FORM_addrx] (indexed (00000003) address = 0x0000000000000000) -; BOLT-NEXT: DW_AT_ranges [DW_FORM_rnglistx] (indexed (0x0) rangelist = 0x00000027 +; BOLT-NEXT: DW_AT_ranges [DW_FORM_rnglistx] (indexed (0x0) rangelist = 0x0000002a ; BOLT-NEXT: [0x[[#ADDR3]] ; BOLT-SAME: 0x[[#ADDR3 + 0x3D]] ; BOLT-NEXT: DW_AT_addr_base [DW_FORM_sec_offset] (0x00000038) -; BOLT-NEXT: DW_AT_rnglists_base [DW_FORM_sec_offset] (0x00000023) +; BOLT-NEXT: DW_AT_rnglists_base [DW_FORM_sec_offset] (0x00000026) ; PRE-BOLT-DWO-MAIN: version = 0x0005 ; PRE-BOLT-DWO-MAIN: DW_TAG_compile_unit diff --git a/bolt/test/X86/dwarf5-df-mono-dualcu.test b/bolt/test/X86/dwarf5-df-mono-dualcu.test --- a/bolt/test/X86/dwarf5-df-mono-dualcu.test +++ b/bolt/test/X86/dwarf5-df-mono-dualcu.test @@ -47,11 +47,11 @@ ; BOLT: DW_TAG_compile_unit ; BOLT: DW_AT_name [DW_FORM_strx1] (indexed (00000001) string = "helper.cpp") ; BOLT: DW_AT_low_pc [DW_FORM_addrx] (indexed (00000001) address = 0x0000000000000000) -; BOLT-NEXT: DW_AT_ranges [DW_FORM_rnglistx] (indexed (0x0) rangelist = 0x0000002b +; BOLT-NEXT: DW_AT_ranges [DW_FORM_rnglistx] (indexed (0x0) rangelist = 0x0000002e ; BOLT-NEXT: [0x[[#ADDR3]] ; BOLT-SAME: 0x[[#ADDR3 + 0x3D]] ; BOLT-NEXT: DW_AT_addr_base [DW_FORM_sec_offset] (0x00000038) -; BOLT-NEXT: DW_AT_rnglists_base [DW_FORM_sec_offset] (0x00000023) +; BOLT-NEXT: DW_AT_rnglists_base [DW_FORM_sec_offset] (0x00000026) ; BOLT: DW_TAG_variable ; BOLT-NEXT: DW_AT_name [DW_FORM_strx1] (indexed (00000003) string = "z") ; BOLT-NEXT: DW_AT_type @@ -68,7 +68,7 @@ ; BOLT-NEXT: DW_AT_location [DW_FORM_exprloc] (DW_OP_addrx 0x3) ; BOLT: DW_TAG_subprogram ; BOLT-NEXT: DW_AT_low_pc [DW_FORM_addrx] (indexed (00000001) address = 0x0000000000000000) -; BOLT-NEXT: DW_AT_ranges [DW_FORM_rnglistx] (indexed (0x1) rangelist = 0x0000002f +; BOLT-NEXT: DW_AT_ranges [DW_FORM_rnglistx] (indexed (0x1) rangelist = 0x00000032 ; BOLT-NEXT: [0x[[#ADDR3]] ; BOLT-SAME: 0x[[#ADDR3 + 0x3D]] diff --git a/bolt/test/X86/dwarf5-dwarf4-monolithic.test b/bolt/test/X86/dwarf5-dwarf4-monolithic.test --- a/bolt/test/X86/dwarf5-dwarf4-monolithic.test +++ b/bolt/test/X86/dwarf5-dwarf4-monolithic.test @@ -187,35 +187,35 @@ # 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: [0x[[#ADDR2]], 0x[[#ADDR2 + 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: DW_AT_low_pc [DW_FORM_addrx] (indexed (00000001) 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-NEXT: DW_AT_low_pc [DW_FORM_addrx] (indexed (00000001) address = 0x0000000000000000) +# POSTCHECK-NEXT: DW_AT_ranges [DW_FORM_rnglistx] (indexed (0x2) rangelist = 0x00000029 +# POSTCHECK-NEXT: [0x[[#ADDR2]], 0x[[#ADDR2 + 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[[#ADDR2]], 0x[[#ADDR2 + 0x22]] # 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[[#ADDR2]], 0x[[#ADDR2 + 0x27]] # 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[[#ADDR5]], 0x[[#ADDR5 + 0x6]] # 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]] +# POSTCHECK-NEXT: DW_AT_ranges [DW_FORM_rnglistx] (indexed (0x3) rangelist = 0x0000002d +# POSTCHECK-NEXT: [0x[[#ADDR7]], 0x[[#ADDR7 + 0x4]] +# POSTCHECK-NEXT: [0x[[#ADDR7 + 0x10]], 0x[[#ADDR7 + 0x16]] # helper0.cpp # POSTCHECK: version = 0x0004 diff --git a/bolt/test/X86/dwarf5-locexpr-addrx.s b/bolt/test/X86/dwarf5-locexpr-addrx.s --- a/bolt/test/X86/dwarf5-locexpr-addrx.s +++ b/bolt/test/X86/dwarf5-locexpr-addrx.s @@ -18,10 +18,10 @@ # POSTCHECK: version = 0x0005 # POSTCHECK: DW_TAG_variable -# POSTCHECK: DW_AT_location [DW_FORM_exprloc] (DW_OP_addrx 0x3) +# POSTCHECK: DW_AT_location [DW_FORM_exprloc] (DW_OP_addrx 0x2) # POSTCHECK-EMPTY: # POSTCHECK: DW_TAG_variable -# POSTCHECK: DW_AT_location [DW_FORM_exprloc] (DW_OP_addrx 0x4) +# POSTCHECK: DW_AT_location [DW_FORM_exprloc] (DW_OP_addrx 0x3) # POSTCHECK-EMPTY: # clang++ main.cpp -g -O2 diff --git a/bolt/test/X86/dwarf5-loclist-offset-form.test b/bolt/test/X86/dwarf5-loclist-offset-form.test --- a/bolt/test/X86/dwarf5-loclist-offset-form.test +++ b/bolt/test/X86/dwarf5-loclist-offset-form.test @@ -37,8 +37,8 @@ # POSTCHECK: DW_AT_loclists_base [DW_FORM_sec_offset] (0x0000000c) # POSTCHECK: DW_TAG_variable [5] # POSTCHECK-NEXT: DW_AT_location [DW_FORM_loclistx] (indexed (0x0) -# POSTCHECK-NEXT: [0x[[#ADDR1]] -# POSTCHECK-SAME: 0x[[#ADDR1 + 9]] +# POSTCHECK-NEXT: [0x[[#ADDR2]] +# POSTCHECK-SAME: 0x[[#ADDR2 + 9]] # POSTCHECK-NEXT: [0x[[#ADDR3]] # POSTCHECK-SAME: 0x[[#ADDR3 + 6]] # POSTCHECK: DW_TAG_variable [5] @@ -50,7 +50,7 @@ # POSTCHECK: DW_AT_loclists_base [DW_FORM_sec_offset] (0x00000043) # POSTCHECK: DW_TAG_variable [11] # POSTCHECK-NEXT: DW_AT_location [DW_FORM_loclistx] (indexed (0x0) -# POSTCHECK-NEXT: [0x[[#ADDR5]] -# POSTCHECK-SAME: 0x[[#ADDR5 + 3]] +# POSTCHECK-NEXT: [0x[[#ADDR7]] +# POSTCHECK-SAME: 0x[[#ADDR7 + 3]] # POSTCHECK-NEXT: [0x[[#ADDR8]] # POSTCHECK-SAME: 0x[[#ADDR8 + 1]] diff --git a/bolt/test/X86/dwarf5-multiple-dw-op-addrx-locexpr.s b/bolt/test/X86/dwarf5-multiple-dw-op-addrx-locexpr.s --- a/bolt/test/X86/dwarf5-multiple-dw-op-addrx-locexpr.s +++ b/bolt/test/X86/dwarf5-multiple-dw-op-addrx-locexpr.s @@ -19,7 +19,7 @@ # CHECK: DW_AT_type [DW_FORM_ref4] # CHECK: DW_AT_decl_file [DW_FORM_data1] # CHECK: DW_AT_decl_line [DW_FORM_data1] -# CHECK: DW_AT_location [DW_FORM_exprloc] (DW_OP_addrx 0x4, DW_OP_piece 0x4, DW_OP_addrx 0x5, DW_OP_piece 0x4) +# CHECK: DW_AT_location [DW_FORM_exprloc] (DW_OP_addrx 0x2, DW_OP_piece 0x4, DW_OP_addrx 0x3, DW_OP_piece 0x4) # This test checks that we update DW_AT_location [DW_FORM_exprloc] with multiple DW_OP_addrx. diff --git a/bolt/test/X86/dwarf5-split-dwarf4-monolithic.test b/bolt/test/X86/dwarf5-split-dwarf4-monolithic.test --- a/bolt/test/X86/dwarf5-split-dwarf4-monolithic.test +++ b/bolt/test/X86/dwarf5-split-dwarf4-monolithic.test @@ -250,10 +250,9 @@ # 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)) +# Encded as a pair. So it's offset from base address. +# POSTCHECK-DWO-MAIN-NEXT: [0x0000000000000007, 0x000000000000000b) +# POSTCHECK-DWO-MAIN-NEXT: [0x0000000000000017, 0x000000000000001d)) # POSTCHECK-DWO-HELPER1: version = 0x0005 # POSTCHECK-DWO-HELPER1: DW_TAG_subprogram [7] diff --git a/bolt/test/X86/dwarf5-two-loclists.test b/bolt/test/X86/dwarf5-two-loclists.test --- a/bolt/test/X86/dwarf5-two-loclists.test +++ b/bolt/test/X86/dwarf5-two-loclists.test @@ -32,15 +32,15 @@ # POSTCHECK: Addrs: [ # POSTCHECK-NEXT: 0x -# POSTCHECK-NEXT: 0x[[#%.16x,ADDR:]] # POSTCHECK-NEXT: 0x +# POSTCHECK-NEXT: 0x[[#%.16x,ADDR:]] # POSTCHECK-NEXT: 0x[[#%.16x,ADDR2:]] # For second CU. # POSTCHECK: Addrs: [ # POSTCHECK-NEXT: 0x -# POSTCHECK-NEXT: 0x[[#%.16x,ADDR3:]] # POSTCHECK-NEXT: 0x # POSTCHECK-NEXT: 0x +# POSTCHECK-NEXT: 0x[[#%.16x,ADDR3:]] # POSTCHECK-NEXT: 0x[[#%.16x,ADDR4:]] # POSTCHECK: version = 0x0005 @@ -65,7 +65,7 @@ # Checking second CU # POSTCHECK: version = 0x0005 # POSTCHECK: DW_AT_loclists_base [DW_FORM_sec_offset] (0x00000043) -# POSTCHECK: DW_AT_rnglists_base [DW_FORM_sec_offset] (0x00000033) +# POSTCHECK: DW_AT_rnglists_base [DW_FORM_sec_offset] (0x00000035) # POSTCHECK-EMPTY: # POSTCHECK: DW_TAG_variable # POSTCHECK: DW_TAG_variable diff --git a/bolt/test/X86/dwarf5-two-rnglists.test b/bolt/test/X86/dwarf5-two-rnglists.test --- a/bolt/test/X86/dwarf5-two-rnglists.test +++ b/bolt/test/X86/dwarf5-two-rnglists.test @@ -29,12 +29,14 @@ # POSTCHECK: Addrs: [ # POSTCHECK-NEXT: 0x[[#%.16x,ADDR:]] -# POSTCHECK-NEXT: 0x[[#%.16x,ADDR1:]] # POSTCHECK-NEXT: 0x +# POSTCHECK-NEXT: 0x[[#%.16x,ADDR1:]] # POSTCHECK-NEXT: 0x[[#%.16x,ADDR2:]] # For second CU. # POSTCHECK: Addrs: [ # POSTCHECK-NEXT: 0x[[#%.16x,ADDR3:]] +# POSTCHECK-NEXT: 0x +# POSTCHECK-NEXT: 0x # POSTCHECK-NEXT: 0x[[#%.16x,ADDR4:]] # POSTCHECK: version = 0x0005 @@ -53,58 +55,58 @@ # POSTCHECK-EMPTY # POSTCHECK: DW_TAG_subprogram # POSTCHECK-NEXT: DW_AT_low_pc [DW_FORM_addrx] -# POSTCHECK-SAME: indexed (00000002) +# POSTCHECK-SAME: indexed (00000001) # POSTCHECK-SAME: address = 0x0000000000000000 # POSTCHECK-NEXT: DW_AT_ranges [DW_FORM_rnglistx] # POSTCHECK-SAME: indexed (0x1) -# POSTCHECK-SAME: rangelist = 0x0000001f +# POSTCHECK-SAME: rangelist = 0x00000021 # POSTCHECK-NEXT: [0x[[#ADDR]], 0x[[#ADDR + 7]]) # POSTCHECK: DW_TAG_subprogram # POSTCHECK-NEXT: DW_AT_low_pc [DW_FORM_addrx] -# POSTCHECK-SAME: indexed (00000002) +# POSTCHECK-SAME: indexed (00000001) # POSTCHECK-SAME: address = 0x0000000000000000 # POSTCHECK-NEXT: DW_AT_ranges [DW_FORM_rnglistx] # POSTCHECK-SAME: indexed (0x2) -# POSTCHECK-SAME: rangelist = 0x00000023 +# POSTCHECK-SAME: rangelist = 0x00000025 # POSTCHECK-NEXT: [0x[[#ADDR1]], 0x[[#ADDR1 + 12]]) # Checking second CU # POSTCHECK: version = 0x0005 # POSTCHECK: DW_AT_ranges [DW_FORM_rnglistx] # POSTCHECK-SAME: (indexed (0x0) -# POSTCHECK-SAME: rangelist = 0x00000043 +# POSTCHECK-SAME: rangelist = 0x00000045 # POSTCHECK-NEXT: [0x[[#ADDR3]], 0x[[#ADDR3 + 4]]) # POSTCHECK-NEXT: [0x[[#ADDR4]], 0x[[#ADDR4 + 4]]) # POSTCHECK-NEXT: DW_AT_addr_base [DW_FORM_sec_offset] (0x00000030) # POSTCHECK-NEXT: DW_AT_loclists_base [DW_FORM_sec_offset] (0x00000043) -# POSTCHECK-NEXT: DW_AT_rnglists_base [DW_FORM_sec_offset] (0x00000033) +# POSTCHECK-NEXT: DW_AT_rnglists_base [DW_FORM_sec_offset] (0x00000035) # POSTCHECK-EMPTY # POSTCHECK: DW_TAG_subprogram # POSTCHECK-NEXT: DW_AT_low_pc [DW_FORM_addrx] -# POSTCHECK-SAME: indexed (00000002) +# POSTCHECK-SAME: indexed (00000001) # POSTCHECK-SAME: address = 0x0000000000000000 # POSTCHECK-NEXT: DW_AT_ranges [DW_FORM_rnglistx] # POSTCHECK-SAME: indexed (0x1) -# POSTCHECK-SAME: rangelist = 0x0000004a +# POSTCHECK-SAME: rangelist = 0x0000004e # POSTCHECK-NEXT: [0x[[#ADDR3]], 0x[[#ADDR3 + 4]]) # POSTCHECK: DW_TAG_subprogram # POSTCHECK: DW_TAG_subprogram # POSTCHECK-NEXT: DW_AT_low_pc [DW_FORM_addrx] -# POSTCHECK-SAME: indexed (00000002) +# POSTCHECK-SAME: indexed (00000001) # POSTCHECK-SAME: address = 0x0000000000000000 # POSTCHECK-NEXT: DW_AT_ranges [DW_FORM_rnglistx] # POSTCHECK-SAME: indexed (0x2) -# POSTCHECK-SAME: rangelist = 0x0000004e +# POSTCHECK-SAME: rangelist = 0x00000052 # POSTCHECK-NEXT: [0x[[#ADDR4]], 0x[[#ADDR4 + 4]]) # POSTCHECK: DW_TAG_inlined_subroutine # POSTCHECK-NEXT: DW_AT_abstract_origin # POSTCHECK-NEXT: DW_AT_low_pc [DW_FORM_addrx] -# POSTCHECK-SAME: indexed (00000002) +# POSTCHECK-SAME: indexed (00000001) # POSTCHECK-SAME: address = 0x0000000000000000 # POSTCHECK-NEXT: DW_AT_ranges [DW_FORM_rnglistx] # POSTCHECK-SAME: indexed (0x3) -# POSTCHECK-SAME: rangelist = 0x00000052 +# POSTCHECK-SAME: rangelist = 0x00000056 # POSTCHECK-NEXT: [0x[[#ADDR4]], 0x[[#ADDR4 + 3]])