diff options
author | David Blaikie <dblaikie@gmail.com> | 2019-11-15 15:48:31 -0800 |
---|---|---|
committer | David Blaikie <dblaikie@gmail.com> | 2019-11-15 16:23:02 -0800 |
commit | d295087639a824d1c0a29868bab1860afe657eaf (patch) | |
tree | 7023d55fedd73d81e6871ff1a9c0b7ef64bb058f /llvm/lib/DebugInfo/DWARF | |
parent | 194d7ec081c31ee4ed82bfa3cade4ef30afab912 (diff) | |
download | bcm5719-llvm-d295087639a824d1c0a29868bab1860afe657eaf.tar.gz bcm5719-llvm-d295087639a824d1c0a29868bab1860afe657eaf.zip |
DebugInfo: Templatize rnglist header parsing to setup for reuse with loclist header parsing
Diffstat (limited to 'llvm/lib/DebugInfo/DWARF')
-rw-r--r-- | llvm/lib/DebugInfo/DWARF/DWARFUnit.cpp | 19 |
1 files changed, 10 insertions, 9 deletions
diff --git a/llvm/lib/DebugInfo/DWARF/DWARFUnit.cpp b/llvm/lib/DebugInfo/DWARF/DWARFUnit.cpp index 7f0ee660cd0..e5cba5e50b3 100644 --- a/llvm/lib/DebugInfo/DWARF/DWARFUnit.cpp +++ b/llvm/lib/DebugInfo/DWARF/DWARFUnit.cpp @@ -317,8 +317,9 @@ bool DWARFUnitHeader::extract(DWARFContext &Context, // Parse the rangelist table header, including the optional array of offsets // following it (DWARF v5 and later). -static Expected<DWARFDebugRnglistTable> -parseRngListTableHeader(DWARFDataExtractor &DA, uint64_t Offset, +template<typename ListTableType> +static Expected<ListTableType> +parseListTableHeader(DWARFDataExtractor &DA, uint64_t Offset, DwarfFormat Format) { // We are expected to be called with Offset 0 or pointing just past the table // header. Correct Offset in the latter case so that it points to the start @@ -326,12 +327,12 @@ parseRngListTableHeader(DWARFDataExtractor &DA, uint64_t Offset, if (Offset > 0) { uint64_t HeaderSize = DWARFListTableHeader::getHeaderSize(Format); if (Offset < HeaderSize) - return createStringError(errc::invalid_argument, "Did not detect a valid" - " range list table with base = 0x%" PRIx64 "\n", + return createStringError(errc::invalid_argument, "did not detect a valid" + " list table with base = 0x%" PRIx64 "\n", Offset); Offset -= HeaderSize; } - llvm::DWARFDebugRnglistTable Table; + ListTableType Table; if (Error E = Table.extractHeaderAndOffsets(DA, &Offset)) return std::move(E); return Table; @@ -483,8 +484,8 @@ Error DWARFUnit::tryExtractDIEsIfNeeded(bool CUDieOnly) { // extracted lazily. DWARFDataExtractor RangesDA(Context.getDWARFObj(), *RangeSection, isLittleEndian, 0); - auto TableOrError = parseRngListTableHeader(RangesDA, RangeSectionBase, - Header.getFormat()); + auto TableOrError = parseListTableHeader<DWARFDebugRnglistTable>( + RangesDA, RangeSectionBase, Header.getFormat()); if (!TableOrError) return createStringError(errc::invalid_argument, "parsing a range list table: " + @@ -539,8 +540,8 @@ bool DWARFUnit::parseDWO() { DWO->setRangesSection(&Context.getDWARFObj().getRnglistsDWOSection(), 0); DWARFDataExtractor RangesDA(Context.getDWARFObj(), *RangeSection, isLittleEndian, 0); - if (auto TableOrError = parseRngListTableHeader(RangesDA, RangeSectionBase, - Header.getFormat())) + if (auto TableOrError = parseListTableHeader<DWARFDebugRnglistTable>( + RangesDA, RangeSectionBase, Header.getFormat())) DWO->RngListTable = TableOrError.get(); else WithColor::error() << "parsing a range list table: " |