@@ -317,21 +317,22 @@ bool DWARFUnitHeader::extract(DWARFContext &Context,
317
317
318
318
// Parse the rangelist table header, including the optional array of offsets
319
319
// 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,
322
323
DwarfFormat Format) {
323
324
// We are expected to be called with Offset 0 or pointing just past the table
324
325
// header. Correct Offset in the latter case so that it points to the start
325
326
// of the header.
326
327
if (Offset > 0 ) {
327
328
uint64_t HeaderSize = DWARFListTableHeader::getHeaderSize (Format);
328
329
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 " ,
331
332
Offset);
332
333
Offset -= HeaderSize;
333
334
}
334
- llvm::DWARFDebugRnglistTable Table;
335
+ ListTableType Table;
335
336
if (Error E = Table.extractHeaderAndOffsets (DA, &Offset))
336
337
return std::move (E);
337
338
return Table;
@@ -483,8 +484,8 @@ Error DWARFUnit::tryExtractDIEsIfNeeded(bool CUDieOnly) {
483
484
// extracted lazily.
484
485
DWARFDataExtractor RangesDA (Context.getDWARFObj (), *RangeSection,
485
486
isLittleEndian, 0 );
486
- auto TableOrError = parseRngListTableHeader (RangesDA, RangeSectionBase,
487
- Header.getFormat ());
487
+ auto TableOrError = parseListTableHeader<DWARFDebugRnglistTable>(
488
+ RangesDA, RangeSectionBase, Header.getFormat ());
488
489
if (!TableOrError)
489
490
return createStringError (errc::invalid_argument,
490
491
" parsing a range list table: " +
@@ -539,8 +540,8 @@ bool DWARFUnit::parseDWO() {
539
540
DWO->setRangesSection (&Context.getDWARFObj ().getRnglistsDWOSection (), 0 );
540
541
DWARFDataExtractor RangesDA (Context.getDWARFObj (), *RangeSection,
541
542
isLittleEndian, 0 );
542
- if (auto TableOrError = parseRngListTableHeader (RangesDA, RangeSectionBase,
543
- Header.getFormat ()))
543
+ if (auto TableOrError = parseListTableHeader<DWARFDebugRnglistTable>(
544
+ RangesDA, RangeSectionBase, Header.getFormat ()))
544
545
DWO->RngListTable = TableOrError.get ();
545
546
else
546
547
WithColor::error () << " parsing a range list table: "
0 commit comments