Skip to content

Commit e22ff52

Browse files
committed
[BOLT][DWARF] Change rangelists to use DW_RLE_offset_pair
Before we always used DW_RLE_startx_length. This is not very efficient and leads to bigger .debug_addr section. Changed it to use DW_RLE_base_addressx/DW_RLE_offset_pair. clang-16 build in debug mode llvm-bolt ran on it with --update-debug-sections | section | before | after | diff | % decrease | | .debug_rnglists | 32732292 | 31986051 | -746241 | 2.3% | | .debug_addr | 14415808 | 14184128 | -231680 | 1.6% | Reviewed By: maksfb Differential Revision: https://reviews.llvm.org/D140439
1 parent 42b1d08 commit e22ff52

12 files changed

+109
-54
lines changed

bolt/include/bolt/Core/DebugData.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -170,7 +170,7 @@ class DebugRangesSectionWriter {
170170
std::map<DebugAddressRangesVector, uint64_t> &CachedRanges);
171171

172172
/// Add ranges and return offset into section.
173-
virtual uint64_t addRanges(const DebugAddressRangesVector &Ranges);
173+
virtual uint64_t addRanges(DebugAddressRangesVector &Ranges);
174174

175175
/// Returns an offset of an empty address ranges list that is always written
176176
/// to .debug_ranges
@@ -232,7 +232,7 @@ class DebugRangeListsSectionWriter : public DebugRangesSectionWriter {
232232
std::map<DebugAddressRangesVector, uint64_t> &CachedRanges) override;
233233

234234
/// Add ranges and return offset into section.
235-
uint64_t addRanges(const DebugAddressRangesVector &Ranges) override;
235+
uint64_t addRanges(DebugAddressRangesVector &Ranges) override;
236236

237237
std::unique_ptr<DebugBufferVector> releaseBuffer() override {
238238
return std::move(RangesBuffer);

bolt/lib/Core/DebugData.cpp

Lines changed: 62 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -148,8 +148,7 @@ uint64_t DebugRangesSectionWriter::addRanges(
148148
return EntryOffset;
149149
}
150150

151-
uint64_t
152-
DebugRangesSectionWriter::addRanges(const DebugAddressRangesVector &Ranges) {
151+
uint64_t DebugRangesSectionWriter::addRanges(DebugAddressRangesVector &Ranges) {
153152
if (Ranges.empty())
154153
return getEmptyRangesOffset();
155154

@@ -207,22 +206,77 @@ getDWARF5Header(const LocListsRangelistsHeader &Header) {
207206
return HeaderBuffer;
208207
}
209208

210-
uint64_t DebugRangeListsSectionWriter::addRanges(
211-
const DebugAddressRangesVector &Ranges) {
209+
static bool emitWithBase(raw_ostream &OS,
210+
const DebugAddressRangesVector &Ranges,
211+
DebugAddrWriter &AddrWriter, DWARFUnit &CU,
212+
uint32_t &Index) {
213+
if (Ranges.size() < 2)
214+
return false;
215+
uint64_t Base = Ranges[Index].LowPC;
216+
std::vector<std::pair<uint16_t, uint16_t>> RangeOffsets;
217+
uint8_t TempBuffer[64];
218+
while (Index < Ranges.size()) {
219+
const DebugAddressRange &Range = Ranges[Index];
220+
if (Range.LowPC == 0)
221+
break;
222+
assert(Base <= Range.LowPC && "Range base is higher than low PC");
223+
uint32_t StartOffset = Range.LowPC - Base;
224+
uint32_t EndOffset = Range.HighPC - Base;
225+
if (encodeULEB128(EndOffset, TempBuffer) > 2)
226+
break;
227+
RangeOffsets.emplace_back(StartOffset, EndOffset);
228+
++Index;
229+
}
230+
231+
if (RangeOffsets.size() < 2) {
232+
Index -= RangeOffsets.size();
233+
return false;
234+
}
235+
236+
support::endian::write(OS, static_cast<uint8_t>(dwarf::DW_RLE_base_addressx),
237+
support::little);
238+
uint32_t BaseIndex = AddrWriter.getIndexFromAddress(Base, CU);
239+
encodeULEB128(BaseIndex, OS);
240+
for (auto &Offset : RangeOffsets) {
241+
support::endian::write(OS, static_cast<uint8_t>(dwarf::DW_RLE_offset_pair),
242+
support::little);
243+
encodeULEB128(Offset.first, OS);
244+
encodeULEB128(Offset.second, OS);
245+
}
246+
support::endian::write(OS, static_cast<uint8_t>(dwarf::DW_RLE_end_of_list),
247+
support::little);
248+
return true;
249+
}
250+
251+
uint64_t
252+
DebugRangeListsSectionWriter::addRanges(DebugAddressRangesVector &Ranges) {
212253
std::lock_guard<std::mutex> Lock(WriterMutex);
213254

214255
RangeEntries.push_back(CurrentOffset);
215-
for (const DebugAddressRange &Range : Ranges) {
256+
bool WrittenStartxLength = false;
257+
std::sort(
258+
Ranges.begin(), Ranges.end(),
259+
[](const DebugAddressRange &R1, const DebugAddressRange &R2) -> bool {
260+
return R1.LowPC < R2.LowPC;
261+
});
262+
for (unsigned I = 0; I < Ranges.size();) {
263+
WrittenStartxLength = false;
264+
if (emitWithBase(*CUBodyStream, Ranges, *AddrWriter, *CU, I))
265+
continue;
266+
const DebugAddressRange &Range = Ranges[I];
216267
support::endian::write(*CUBodyStream,
217268
static_cast<uint8_t>(dwarf::DW_RLE_startx_length),
218269
support::little);
219270
uint32_t Index = AddrWriter->getIndexFromAddress(Range.LowPC, *CU);
220271
encodeULEB128(Index, *CUBodyStream);
221272
encodeULEB128(Range.HighPC - Range.LowPC, *CUBodyStream);
273+
++I;
274+
WrittenStartxLength = true;
222275
}
223-
support::endian::write(*CUBodyStream,
224-
static_cast<uint8_t>(dwarf::DW_RLE_end_of_list),
225-
support::little);
276+
if (WrittenStartxLength)
277+
support::endian::write(*CUBodyStream,
278+
static_cast<uint8_t>(dwarf::DW_RLE_end_of_list),
279+
support::little);
226280
CurrentOffset = CUBodyBuffer->size();
227281
return RangeEntries.size() - 1;
228282
}

bolt/test/X86/dwarf5-debug-loclists.s

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,8 +20,8 @@
2020

2121
# POSTCHECK: Addrs: [
2222
# POSTCHECK-NEXT: 0x
23-
# POSTCHECK-NEXT: 0x[[#%.16x,ADDR:]]
2423
# POSTCHECK-NEXT: 0x
24+
# POSTCHECK-NEXT: 0x[[#%.16x,ADDR:]]
2525
# POSTCHECK-NEXT: 0x[[#%.16x,ADDR2:]]
2626
# POSTCHECK: version = 0x0005
2727
# POSTCHECK: DW_AT_loclists_base [DW_FORM_sec_offset] (0x0000000c)

bolt/test/X86/dwarf5-df-dualcu.test

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -48,11 +48,11 @@
4848
; BOLT: DW_TAG_skeleton_unit
4949
; BOLT: DW_AT_dwo_name [DW_FORM_strx1] (indexed (00000001) string = "helper.dwo.dwo")
5050
; BOLT-NEXT: DW_AT_low_pc [DW_FORM_addrx] (indexed (00000003) address = 0x0000000000000000)
51-
; BOLT-NEXT: DW_AT_ranges [DW_FORM_rnglistx] (indexed (0x0) rangelist = 0x00000027
51+
; BOLT-NEXT: DW_AT_ranges [DW_FORM_rnglistx] (indexed (0x0) rangelist = 0x0000002a
5252
; BOLT-NEXT: [0x[[#ADDR3]]
5353
; BOLT-SAME: 0x[[#ADDR3 + 0x3D]]
5454
; BOLT-NEXT: DW_AT_addr_base [DW_FORM_sec_offset] (0x00000038)
55-
; BOLT-NEXT: DW_AT_rnglists_base [DW_FORM_sec_offset] (0x00000023)
55+
; BOLT-NEXT: DW_AT_rnglists_base [DW_FORM_sec_offset] (0x00000026)
5656

5757
; PRE-BOLT-DWO-MAIN: version = 0x0005
5858
; PRE-BOLT-DWO-MAIN: DW_TAG_compile_unit

bolt/test/X86/dwarf5-df-mono-dualcu.test

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -47,11 +47,11 @@
4747
; BOLT: DW_TAG_compile_unit
4848
; BOLT: DW_AT_name [DW_FORM_strx1] (indexed (00000001) string = "helper.cpp")
4949
; BOLT: DW_AT_low_pc [DW_FORM_addrx] (indexed (00000001) address = 0x0000000000000000)
50-
; BOLT-NEXT: DW_AT_ranges [DW_FORM_rnglistx] (indexed (0x0) rangelist = 0x0000002b
50+
; BOLT-NEXT: DW_AT_ranges [DW_FORM_rnglistx] (indexed (0x0) rangelist = 0x0000002e
5151
; BOLT-NEXT: [0x[[#ADDR3]]
5252
; BOLT-SAME: 0x[[#ADDR3 + 0x3D]]
5353
; BOLT-NEXT: DW_AT_addr_base [DW_FORM_sec_offset] (0x00000038)
54-
; BOLT-NEXT: DW_AT_rnglists_base [DW_FORM_sec_offset] (0x00000023)
54+
; BOLT-NEXT: DW_AT_rnglists_base [DW_FORM_sec_offset] (0x00000026)
5555
; BOLT: DW_TAG_variable
5656
; BOLT-NEXT: DW_AT_name [DW_FORM_strx1] (indexed (00000003) string = "z")
5757
; BOLT-NEXT: DW_AT_type
@@ -68,7 +68,7 @@
6868
; BOLT-NEXT: DW_AT_location [DW_FORM_exprloc] (DW_OP_addrx 0x3)
6969
; BOLT: DW_TAG_subprogram
7070
; BOLT-NEXT: DW_AT_low_pc [DW_FORM_addrx] (indexed (00000001) address = 0x0000000000000000)
71-
; BOLT-NEXT: DW_AT_ranges [DW_FORM_rnglistx] (indexed (0x1) rangelist = 0x0000002f
71+
; BOLT-NEXT: DW_AT_ranges [DW_FORM_rnglistx] (indexed (0x1) rangelist = 0x00000032
7272
; BOLT-NEXT: [0x[[#ADDR3]]
7373
; BOLT-SAME: 0x[[#ADDR3 + 0x3D]]
7474

bolt/test/X86/dwarf5-dwarf4-monolithic.test

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -187,35 +187,35 @@
187187
# POSTCHECK-NEXT: DW_AT_low_pc
188188
# POSTCHECK: DW_AT_ranges [DW_FORM_rnglistx] (indexed (0x0)
189189
# POSTCHECK-NEXT: [0x[[#ADDR]], 0x[[#ADDR + 0x7]]
190-
# POSTCHECK-NEXT: [0x[[#ADDR1]], 0x[[#ADDR1 + 0x51]]
190+
# POSTCHECK-NEXT: [0x[[#ADDR2]], 0x[[#ADDR2 + 0x51]]
191191
# POSTCHECK-NEXT: DW_AT_addr_base [DW_FORM_sec_offset] (0x00000008)
192192
# POSTCHECK-NEXT: DW_AT_rnglists_base [DW_FORM_sec_offset] (0x0000000c)
193193
# POSTCHECK-NEXT: DW_AT_loclists_base [DW_FORM_sec_offset] (0x0000000c)
194194
# POSTCHECK: DW_TAG_subprogram [2]
195-
# POSTCHECK: DW_AT_low_pc [DW_FORM_addrx] (indexed (00000002) address = 0x0000000000000000)
195+
# POSTCHECK: DW_AT_low_pc [DW_FORM_addrx] (indexed (00000001) address = 0x0000000000000000)
196196
# POSTCHECK-NEXT: DW_AT_ranges [DW_FORM_rnglistx] (indexed (0x1) rangelist
197197
# POSTCHECK-NEXT: [0x[[#ADDR]], 0x[[#ADDR + 0x7]]
198198
# POSTCHECK: DW_TAG_subprogram [8]
199-
# POSTCHECK-NEXT: DW_AT_low_pc [DW_FORM_addrx] (indexed (00000002) address = 0x0000000000000000)
200-
# POSTCHECK-NEXT: DW_AT_ranges [DW_FORM_rnglistx] (indexed (0x2) rangelist = 0x00000027
201-
# POSTCHECK-NEXT: [0x[[#ADDR1]], 0x[[#ADDR1 + 0x51]]
199+
# POSTCHECK-NEXT: DW_AT_low_pc [DW_FORM_addrx] (indexed (00000001) address = 0x0000000000000000)
200+
# POSTCHECK-NEXT: DW_AT_ranges [DW_FORM_rnglistx] (indexed (0x2) rangelist = 0x00000029
201+
# POSTCHECK-NEXT: [0x[[#ADDR2]], 0x[[#ADDR2 + 0x51]]
202202
# POSTCHECK: DW_TAG_formal_parameter [9]
203203
# POSTCHECK-NEXT: DW_AT_location [DW_FORM_loclistx] (indexed (0x0) loclist = 0x00000018
204-
# POSTCHECK-NEXT: [0x[[#ADDR1]], 0x[[#ADDR3]]
204+
# POSTCHECK-NEXT: [0x[[#ADDR2]], 0x[[#ADDR2 + 0x22]]
205205
# POSTCHECK-NEXT: [0x[[#ADDR3]], 0x[[#ADDR3 + 0x2f]]
206206
# POSTCHECK: DW_TAG_formal_parameter [9]
207207
# POSTCHECK-NEXT: DW_AT_location [DW_FORM_loclistx] (indexed (0x1) loclist = 0x00000026
208-
# POSTCHECK-NEXT: [0x[[#ADDR1]], 0x[[#ADDR4]]
208+
# POSTCHECK-NEXT: [0x[[#ADDR2]], 0x[[#ADDR2 + 0x27]]
209209
# POSTCHECK-NEXT: [0x[[#ADDR4]], 0x[[#ADDR4 + 0x2a]]
210210
# POSTCHECK: DW_TAG_variable
211211
# POSTCHECK-NEXT: DW_AT_location [DW_FORM_loclistx] (indexed (0x2) loclist = 0x00000034
212-
# POSTCHECK-NEXT: [0x[[#ADDR5]], 0x[[#ADDR6]]
212+
# POSTCHECK-NEXT: [0x[[#ADDR5]], 0x[[#ADDR5 + 0x6]]
213213
# POSTCHECK-NEXT: [0x[[#ADDR6]], 0x[[#ADDR6 + 0x40]]
214214
# POSTCHECK: DW_TAG_inlined_subroutine [12]
215215
# POSTCHECK-NEXT: DW_AT_abstract_origin
216-
# POSTCHECK-NEXT: DW_AT_ranges [DW_FORM_rnglistx] (indexed (0x3) rangelist = 0x0000002b
217-
# POSTCHECK-NEXT: [0x[[#ADDR7]], 0x[[#ADDR6]]
218-
# POSTCHECK-NEXT: [0x[[#ADDR8]], 0x[[#ADDR8 + 0x6]]
216+
# POSTCHECK-NEXT: DW_AT_ranges [DW_FORM_rnglistx] (indexed (0x3) rangelist = 0x0000002d
217+
# POSTCHECK-NEXT: [0x[[#ADDR7]], 0x[[#ADDR7 + 0x4]]
218+
# POSTCHECK-NEXT: [0x[[#ADDR7 + 0x10]], 0x[[#ADDR7 + 0x16]]
219219

220220
# helper0.cpp
221221
# POSTCHECK: version = 0x0004

bolt/test/X86/dwarf5-locexpr-addrx.s

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,10 +18,10 @@
1818

1919
# POSTCHECK: version = 0x0005
2020
# POSTCHECK: DW_TAG_variable
21-
# POSTCHECK: DW_AT_location [DW_FORM_exprloc] (DW_OP_addrx 0x3)
21+
# POSTCHECK: DW_AT_location [DW_FORM_exprloc] (DW_OP_addrx 0x2)
2222
# POSTCHECK-EMPTY:
2323
# POSTCHECK: DW_TAG_variable
24-
# POSTCHECK: DW_AT_location [DW_FORM_exprloc] (DW_OP_addrx 0x4)
24+
# POSTCHECK: DW_AT_location [DW_FORM_exprloc] (DW_OP_addrx 0x3)
2525
# POSTCHECK-EMPTY:
2626

2727
# clang++ main.cpp -g -O2

bolt/test/X86/dwarf5-loclist-offset-form.test

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -37,8 +37,8 @@
3737
# POSTCHECK: DW_AT_loclists_base [DW_FORM_sec_offset] (0x0000000c)
3838
# POSTCHECK: DW_TAG_variable [5]
3939
# POSTCHECK-NEXT: DW_AT_location [DW_FORM_loclistx] (indexed (0x0)
40-
# POSTCHECK-NEXT: [0x[[#ADDR1]]
41-
# POSTCHECK-SAME: 0x[[#ADDR1 + 9]]
40+
# POSTCHECK-NEXT: [0x[[#ADDR2]]
41+
# POSTCHECK-SAME: 0x[[#ADDR2 + 9]]
4242
# POSTCHECK-NEXT: [0x[[#ADDR3]]
4343
# POSTCHECK-SAME: 0x[[#ADDR3 + 6]]
4444
# POSTCHECK: DW_TAG_variable [5]
@@ -50,7 +50,7 @@
5050
# POSTCHECK: DW_AT_loclists_base [DW_FORM_sec_offset] (0x00000043)
5151
# POSTCHECK: DW_TAG_variable [11]
5252
# POSTCHECK-NEXT: DW_AT_location [DW_FORM_loclistx] (indexed (0x0)
53-
# POSTCHECK-NEXT: [0x[[#ADDR5]]
54-
# POSTCHECK-SAME: 0x[[#ADDR5 + 3]]
53+
# POSTCHECK-NEXT: [0x[[#ADDR7]]
54+
# POSTCHECK-SAME: 0x[[#ADDR7 + 3]]
5555
# POSTCHECK-NEXT: [0x[[#ADDR8]]
5656
# POSTCHECK-SAME: 0x[[#ADDR8 + 1]]

bolt/test/X86/dwarf5-multiple-dw-op-addrx-locexpr.s

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@
1919
# CHECK: DW_AT_type [DW_FORM_ref4]
2020
# CHECK: DW_AT_decl_file [DW_FORM_data1]
2121
# CHECK: DW_AT_decl_line [DW_FORM_data1]
22-
# CHECK: DW_AT_location [DW_FORM_exprloc] (DW_OP_addrx 0x4, DW_OP_piece 0x4, DW_OP_addrx 0x5, DW_OP_piece 0x4)
22+
# CHECK: DW_AT_location [DW_FORM_exprloc] (DW_OP_addrx 0x2, DW_OP_piece 0x4, DW_OP_addrx 0x3, DW_OP_piece 0x4)
2323

2424
# This test checks that we update DW_AT_location [DW_FORM_exprloc] with multiple DW_OP_addrx.
2525

bolt/test/X86/dwarf5-split-dwarf4-monolithic.test

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -250,10 +250,9 @@
250250
# POSTCHECK-DWO-MAIN: DW_TAG_inlined_subroutine [12]
251251
# POSTCHECK-DWO-MAIN-NEXT: DW_AT_abstract_origin [DW_FORM_ref4]
252252
# POSTCHECK-DWO-MAIN-NEXT: DW_AT_ranges [DW_FORM_rnglistx] (indexed (0x2) rangelist = 0x00000020
253-
# BOLT uses DW_RLE_startx_length encoding. Wit this encoding llvm-dwarfdump tries to lookup the actual address.
254-
# Since .debug_addr is in the binary low_pc is set to 0.
255-
# POSTCHECK-DWO-MAIN-NEXT: [0x0000000000000000, 0x0000000000000004)
256-
# POSTCHECK-DWO-MAIN-NEXT: [0x0000000000000000, 0x0000000000000006))
253+
# Encded as a pair. So it's offset from base address.
254+
# POSTCHECK-DWO-MAIN-NEXT: [0x0000000000000007, 0x000000000000000b)
255+
# POSTCHECK-DWO-MAIN-NEXT: [0x0000000000000017, 0x000000000000001d))
257256

258257
# POSTCHECK-DWO-HELPER1: version = 0x0005
259258
# POSTCHECK-DWO-HELPER1: DW_TAG_subprogram [7]

bolt/test/X86/dwarf5-two-loclists.test

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -32,15 +32,15 @@
3232

3333
# POSTCHECK: Addrs: [
3434
# POSTCHECK-NEXT: 0x
35-
# POSTCHECK-NEXT: 0x[[#%.16x,ADDR:]]
3635
# POSTCHECK-NEXT: 0x
36+
# POSTCHECK-NEXT: 0x[[#%.16x,ADDR:]]
3737
# POSTCHECK-NEXT: 0x[[#%.16x,ADDR2:]]
3838
# For second CU.
3939
# POSTCHECK: Addrs: [
4040
# POSTCHECK-NEXT: 0x
41-
# POSTCHECK-NEXT: 0x[[#%.16x,ADDR3:]]
4241
# POSTCHECK-NEXT: 0x
4342
# POSTCHECK-NEXT: 0x
43+
# POSTCHECK-NEXT: 0x[[#%.16x,ADDR3:]]
4444
# POSTCHECK-NEXT: 0x[[#%.16x,ADDR4:]]
4545

4646
# POSTCHECK: version = 0x0005
@@ -65,7 +65,7 @@
6565
# Checking second CU
6666
# POSTCHECK: version = 0x0005
6767
# POSTCHECK: DW_AT_loclists_base [DW_FORM_sec_offset] (0x00000043)
68-
# POSTCHECK: DW_AT_rnglists_base [DW_FORM_sec_offset] (0x00000033)
68+
# POSTCHECK: DW_AT_rnglists_base [DW_FORM_sec_offset] (0x00000035)
6969
# POSTCHECK-EMPTY:
7070
# POSTCHECK: DW_TAG_variable
7171
# POSTCHECK: DW_TAG_variable

bolt/test/X86/dwarf5-two-rnglists.test

Lines changed: 15 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -29,12 +29,14 @@
2929

3030
# POSTCHECK: Addrs: [
3131
# POSTCHECK-NEXT: 0x[[#%.16x,ADDR:]]
32-
# POSTCHECK-NEXT: 0x[[#%.16x,ADDR1:]]
3332
# POSTCHECK-NEXT: 0x
33+
# POSTCHECK-NEXT: 0x[[#%.16x,ADDR1:]]
3434
# POSTCHECK-NEXT: 0x[[#%.16x,ADDR2:]]
3535
# For second CU.
3636
# POSTCHECK: Addrs: [
3737
# POSTCHECK-NEXT: 0x[[#%.16x,ADDR3:]]
38+
# POSTCHECK-NEXT: 0x
39+
# POSTCHECK-NEXT: 0x
3840
# POSTCHECK-NEXT: 0x[[#%.16x,ADDR4:]]
3941

4042
# POSTCHECK: version = 0x0005
@@ -53,58 +55,58 @@
5355
# POSTCHECK-EMPTY
5456
# POSTCHECK: DW_TAG_subprogram
5557
# POSTCHECK-NEXT: DW_AT_low_pc [DW_FORM_addrx]
56-
# POSTCHECK-SAME: indexed (00000002)
58+
# POSTCHECK-SAME: indexed (00000001)
5759
# POSTCHECK-SAME: address = 0x0000000000000000
5860
# POSTCHECK-NEXT: DW_AT_ranges [DW_FORM_rnglistx]
5961
# POSTCHECK-SAME: indexed (0x1)
60-
# POSTCHECK-SAME: rangelist = 0x0000001f
62+
# POSTCHECK-SAME: rangelist = 0x00000021
6163
# POSTCHECK-NEXT: [0x[[#ADDR]], 0x[[#ADDR + 7]])
6264

6365
# POSTCHECK: DW_TAG_subprogram
6466
# POSTCHECK-NEXT: DW_AT_low_pc [DW_FORM_addrx]
65-
# POSTCHECK-SAME: indexed (00000002)
67+
# POSTCHECK-SAME: indexed (00000001)
6668
# POSTCHECK-SAME: address = 0x0000000000000000
6769
# POSTCHECK-NEXT: DW_AT_ranges [DW_FORM_rnglistx]
6870
# POSTCHECK-SAME: indexed (0x2)
69-
# POSTCHECK-SAME: rangelist = 0x00000023
71+
# POSTCHECK-SAME: rangelist = 0x00000025
7072
# POSTCHECK-NEXT: [0x[[#ADDR1]], 0x[[#ADDR1 + 12]])
7173

7274
# Checking second CU
7375
# POSTCHECK: version = 0x0005
7476
# POSTCHECK: DW_AT_ranges [DW_FORM_rnglistx]
7577
# POSTCHECK-SAME: (indexed (0x0)
76-
# POSTCHECK-SAME: rangelist = 0x00000043
78+
# POSTCHECK-SAME: rangelist = 0x00000045
7779
# POSTCHECK-NEXT: [0x[[#ADDR3]], 0x[[#ADDR3 + 4]])
7880
# POSTCHECK-NEXT: [0x[[#ADDR4]], 0x[[#ADDR4 + 4]])
7981
# POSTCHECK-NEXT: DW_AT_addr_base [DW_FORM_sec_offset] (0x00000030)
8082
# POSTCHECK-NEXT: DW_AT_loclists_base [DW_FORM_sec_offset] (0x00000043)
81-
# POSTCHECK-NEXT: DW_AT_rnglists_base [DW_FORM_sec_offset] (0x00000033)
83+
# POSTCHECK-NEXT: DW_AT_rnglists_base [DW_FORM_sec_offset] (0x00000035)
8284
# POSTCHECK-EMPTY
8385

8486
# POSTCHECK: DW_TAG_subprogram
8587
# POSTCHECK-NEXT: DW_AT_low_pc [DW_FORM_addrx]
86-
# POSTCHECK-SAME: indexed (00000002)
88+
# POSTCHECK-SAME: indexed (00000001)
8789
# POSTCHECK-SAME: address = 0x0000000000000000
8890
# POSTCHECK-NEXT: DW_AT_ranges [DW_FORM_rnglistx]
8991
# POSTCHECK-SAME: indexed (0x1)
90-
# POSTCHECK-SAME: rangelist = 0x0000004a
92+
# POSTCHECK-SAME: rangelist = 0x0000004e
9193
# POSTCHECK-NEXT: [0x[[#ADDR3]], 0x[[#ADDR3 + 4]])
9294
# POSTCHECK: DW_TAG_subprogram
9395
# POSTCHECK: DW_TAG_subprogram
9496
# POSTCHECK-NEXT: DW_AT_low_pc [DW_FORM_addrx]
95-
# POSTCHECK-SAME: indexed (00000002)
97+
# POSTCHECK-SAME: indexed (00000001)
9698
# POSTCHECK-SAME: address = 0x0000000000000000
9799
# POSTCHECK-NEXT: DW_AT_ranges [DW_FORM_rnglistx]
98100
# POSTCHECK-SAME: indexed (0x2)
99-
# POSTCHECK-SAME: rangelist = 0x0000004e
101+
# POSTCHECK-SAME: rangelist = 0x00000052
100102
# POSTCHECK-NEXT: [0x[[#ADDR4]], 0x[[#ADDR4 + 4]])
101103

102104
# POSTCHECK: DW_TAG_inlined_subroutine
103105
# POSTCHECK-NEXT: DW_AT_abstract_origin
104106
# POSTCHECK-NEXT: DW_AT_low_pc [DW_FORM_addrx]
105-
# POSTCHECK-SAME: indexed (00000002)
107+
# POSTCHECK-SAME: indexed (00000001)
106108
# POSTCHECK-SAME: address = 0x0000000000000000
107109
# POSTCHECK-NEXT: DW_AT_ranges [DW_FORM_rnglistx]
108110
# POSTCHECK-SAME: indexed (0x3)
109-
# POSTCHECK-SAME: rangelist = 0x00000052
111+
# POSTCHECK-SAME: rangelist = 0x00000056
110112
# POSTCHECK-NEXT: [0x[[#ADDR4]], 0x[[#ADDR4 + 3]])

0 commit comments

Comments
 (0)