Skip to content

Commit d295087

Browse files
committed
DebugInfo: Templatize rnglist header parsing to setup for reuse with loclist header parsing
1 parent 194d7ec commit d295087

File tree

3 files changed

+12
-11
lines changed

3 files changed

+12
-11
lines changed

llvm/lib/DebugInfo/DWARF/DWARFUnit.cpp

Lines changed: 10 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -317,21 +317,22 @@ bool DWARFUnitHeader::extract(DWARFContext &Context,
317317

318318
// Parse the rangelist table header, including the optional array of offsets
319319
// following it (DWARF v5 and later).
320-
static Expected<DWARFDebugRnglistTable>
321-
parseRngListTableHeader(DWARFDataExtractor &DA, uint64_t Offset,
320+
template<typename ListTableType>
321+
static Expected<ListTableType>
322+
parseListTableHeader(DWARFDataExtractor &DA, uint64_t Offset,
322323
DwarfFormat Format) {
323324
// We are expected to be called with Offset 0 or pointing just past the table
324325
// header. Correct Offset in the latter case so that it points to the start
325326
// of the header.
326327
if (Offset > 0) {
327328
uint64_t HeaderSize = DWARFListTableHeader::getHeaderSize(Format);
328329
if (Offset < HeaderSize)
329-
return createStringError(errc::invalid_argument, "Did not detect a valid"
330-
" range list table with base = 0x%" PRIx64 "\n",
330+
return createStringError(errc::invalid_argument, "did not detect a valid"
331+
" list table with base = 0x%" PRIx64 "\n",
331332
Offset);
332333
Offset -= HeaderSize;
333334
}
334-
llvm::DWARFDebugRnglistTable Table;
335+
ListTableType Table;
335336
if (Error E = Table.extractHeaderAndOffsets(DA, &Offset))
336337
return std::move(E);
337338
return Table;
@@ -483,8 +484,8 @@ Error DWARFUnit::tryExtractDIEsIfNeeded(bool CUDieOnly) {
483484
// extracted lazily.
484485
DWARFDataExtractor RangesDA(Context.getDWARFObj(), *RangeSection,
485486
isLittleEndian, 0);
486-
auto TableOrError = parseRngListTableHeader(RangesDA, RangeSectionBase,
487-
Header.getFormat());
487+
auto TableOrError = parseListTableHeader<DWARFDebugRnglistTable>(
488+
RangesDA, RangeSectionBase, Header.getFormat());
488489
if (!TableOrError)
489490
return createStringError(errc::invalid_argument,
490491
"parsing a range list table: " +
@@ -539,8 +540,8 @@ bool DWARFUnit::parseDWO() {
539540
DWO->setRangesSection(&Context.getDWARFObj().getRnglistsDWOSection(), 0);
540541
DWARFDataExtractor RangesDA(Context.getDWARFObj(), *RangeSection,
541542
isLittleEndian, 0);
542-
if (auto TableOrError = parseRngListTableHeader(RangesDA, RangeSectionBase,
543-
Header.getFormat()))
543+
if (auto TableOrError = parseListTableHeader<DWARFDebugRnglistTable>(
544+
RangesDA, RangeSectionBase, Header.getFormat()))
544545
DWO->RngListTable = TableOrError.get();
545546
else
546547
WithColor::error() << "parsing a range list table: "

llvm/test/DebugInfo/X86/dwarfdump-rnglists-dwarf64.s

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -206,6 +206,6 @@ Range1_end:
206206
# CHECK-NEXT: DW_AT_ranges [DW_FORM_rnglistx] (indexed (0x1) rangelist = 0x00000011
207207
# CHECK-NEXT: [0x0000002a, 0x00000034))
208208

209-
#ERR: error: parsing a range list table: Did not detect a valid range list table with base = 0x8
209+
#ERR: error: parsing a range list table: did not detect a valid list table with base = 0x8
210210
#ERR: error: decoding address ranges: missing or invalid range list table
211211
#ERR: error: decoding address ranges: invalid range list offset 0xfa0

llvm/test/DebugInfo/X86/dwarfdump-rnglists.s

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -202,6 +202,6 @@ Range1_end:
202202
# CHECK-NEXT: DW_AT_ranges [DW_FORM_rnglistx] (indexed (0x1) rangelist = 0x00000009
203203
# CHECK-NEXT: [0x0000002a, 0x00000034))
204204

205-
#ERR: error: parsing a range list table: Did not detect a valid range list table with base = 0x8
205+
#ERR: error: parsing a range list table: did not detect a valid list table with base = 0x8
206206
#ERR: error: decoding address ranges: missing or invalid range list table
207207
#ERR: error: decoding address ranges: invalid range list offset 0xfa0

0 commit comments

Comments
 (0)