File indexing completed on 2026-05-10 08:43:41
0001
0002
0003
0004
0005
0006
0007
0008
0009 #ifndef LLVM_DEBUGINFO_DWARF_DWARFDEBUGRNGLISTS_H
0010 #define LLVM_DEBUGINFO_DWARF_DWARFDEBUGRNGLISTS_H
0011
0012 #include "llvm/ADT/STLFunctionalExtras.h"
0013 #include "llvm/BinaryFormat/Dwarf.h"
0014 #include "llvm/DebugInfo/DWARF/DWARFAddressRange.h"
0015 #include "llvm/DebugInfo/DWARF/DWARFListTable.h"
0016 #include <cstdint>
0017
0018 namespace llvm {
0019
0020 class Error;
0021 class raw_ostream;
0022 class DWARFUnit;
0023 class DWARFDataExtractor;
0024 struct DIDumpOptions;
0025 namespace object {
0026 struct SectionedAddress;
0027 }
0028
0029
0030 struct RangeListEntry : public DWARFListEntryBase {
0031
0032
0033
0034
0035 uint64_t Value0;
0036 uint64_t Value1;
0037
0038 Error extract(DWARFDataExtractor Data, uint64_t *OffsetPtr);
0039 void
0040 dump(raw_ostream &OS, uint8_t AddrSize, uint8_t MaxEncodingStringLength,
0041 uint64_t &CurrentBase, DIDumpOptions DumpOpts,
0042 llvm::function_ref<std::optional<object::SectionedAddress>(uint32_t)>
0043 LookupPooledAddress) const;
0044 bool isSentinel() const { return EntryKind == dwarf::DW_RLE_end_of_list; }
0045 };
0046
0047
0048 class DWARFDebugRnglist : public DWARFListType<RangeListEntry> {
0049 public:
0050
0051 DWARFAddressRangesVector getAbsoluteRanges(
0052 std::optional<object::SectionedAddress> BaseAddr, uint8_t AddressByteSize,
0053 function_ref<std::optional<object::SectionedAddress>(uint32_t)>
0054 LookupPooledAddress) const;
0055
0056
0057 DWARFAddressRangesVector
0058 getAbsoluteRanges(std::optional<object::SectionedAddress> BaseAddr,
0059 DWARFUnit &U) const;
0060 };
0061
0062 class DWARFDebugRnglistTable : public DWARFListTableBase<DWARFDebugRnglist> {
0063 public:
0064 DWARFDebugRnglistTable()
0065 : DWARFListTableBase( ".debug_rnglists",
0066 "ranges:",
0067 "range") {}
0068 };
0069
0070 }
0071
0072 #endif