1 //===- DWARFUnitIndex.h -----------------------------------------*- C++ -*-===//
3 // The LLVM Compiler Infrastructure
5 // This file is distributed under the University of Illinois Open Source
6 // License. See LICENSE.TXT for details.
8 //===----------------------------------------------------------------------===//
10 #ifndef LLVM_DEBUGINFO_DWARF_DWARFUNITINDEX_H
11 #define LLVM_DEBUGINFO_DWARF_DWARFUNITINDEX_H
13 #include "llvm/ADT/ArrayRef.h"
14 #include "llvm/ADT/StringRef.h"
15 #include "llvm/Support/DataExtractor.h"
23 enum DWARFSectionKind {
34 class DWARFUnitIndex {
39 uint32_t NumBuckets = 0;
41 bool parse(DataExtractor IndexData, uint32_t *OffsetPtr);
42 void dump(raw_ostream &OS) const;
48 struct SectionContribution {
54 const DWARFUnitIndex *Index;
56 std::unique_ptr<SectionContribution[]> Contributions;
57 friend class DWARFUnitIndex;
60 const SectionContribution *getOffset(DWARFSectionKind Sec) const;
61 const SectionContribution *getOffset() const;
63 const SectionContribution *getOffsets() const {
64 return Contributions.get();
67 uint64_t getSignature() const { return Signature; }
73 DWARFSectionKind InfoColumnKind;
75 std::unique_ptr<DWARFSectionKind[]> ColumnKinds;
76 std::unique_ptr<Entry[]> Rows;
77 mutable std::vector<Entry *> OffsetLookup;
79 static StringRef getColumnHeader(DWARFSectionKind DS);
81 bool parseImpl(DataExtractor IndexData);
84 DWARFUnitIndex(DWARFSectionKind InfoColumnKind)
85 : InfoColumnKind(InfoColumnKind) {}
87 explicit operator bool() const { return Header.NumBuckets; }
89 bool parse(DataExtractor IndexData);
90 void dump(raw_ostream &OS) const;
92 const Entry *getFromOffset(uint32_t Offset) const;
93 const Entry *getFromHash(uint64_t Offset) const;
95 ArrayRef<DWARFSectionKind> getColumnKinds() const {
96 return makeArrayRef(ColumnKinds.get(), Header.NumColumns);
99 ArrayRef<Entry> getRows() const {
100 return makeArrayRef(Rows.get(), Header.NumBuckets);
104 } // end namespace llvm
106 #endif // LLVM_DEBUGINFO_DWARF_DWARFUNITINDEX_H