Home | History | Annotate | Download | only in DWARF
      1 //===- DWARFGdbIndex.h ------------------------------------------*- C++ -*-===//
      2 //
      3 //                     The LLVM Compiler Infrastructure
      4 //
      5 // This file is distributed under the University of Illinois Open Source
      6 // License. See LICENSE.TXT for details.
      7 //
      8 //===----------------------------------------------------------------------===//
      9 
     10 #ifndef LLVM_DEBUGINFO_DWARF_DWARFGDBINDEX_H
     11 #define LLVM_DEBUGINFO_DWARF_DWARFGDBINDEX_H
     12 
     13 #include "llvm/ADT/SmallVector.h"
     14 #include "llvm/ADT/StringRef.h"
     15 #include "llvm/Support/DataExtractor.h"
     16 #include <cstdint>
     17 #include <utility>
     18 
     19 namespace llvm {
     20 
     21 class raw_ostream;
     22 
     23 class DWARFGdbIndex {
     24   uint32_t Version;
     25 
     26   uint32_t CuListOffset;
     27   uint32_t AddressAreaOffset;
     28   uint32_t SymbolTableOffset;
     29   uint32_t ConstantPoolOffset;
     30 
     31   struct CompUnitEntry {
     32     uint64_t Offset; /// Offset of a CU in the .debug_info section.
     33     uint64_t Length; /// Length of that CU.
     34   };
     35   SmallVector<CompUnitEntry, 0> CuList;
     36 
     37   struct AddressEntry {
     38     uint64_t LowAddress;  /// The low address.
     39     uint64_t HighAddress; /// The high address.
     40     uint32_t CuIndex;     /// The CU index.
     41   };
     42   SmallVector<AddressEntry, 0> AddressArea;
     43 
     44   struct SymTableEntry {
     45     uint32_t NameOffset; /// Offset of the symbol's name in the constant pool.
     46     uint32_t VecOffset;  /// Offset of the CU vector in the constant pool.
     47   };
     48   SmallVector<SymTableEntry, 0> SymbolTable;
     49 
     50   /// Each value is CU index + attributes.
     51   SmallVector<std::pair<uint32_t, SmallVector<uint32_t, 0>>, 0>
     52       ConstantPoolVectors;
     53 
     54   StringRef ConstantPoolStrings;
     55   uint32_t StringPoolOffset;
     56 
     57   void dumpCUList(raw_ostream &OS) const;
     58   void dumpAddressArea(raw_ostream &OS) const;
     59   void dumpSymbolTable(raw_ostream &OS) const;
     60   void dumpConstantPool(raw_ostream &OS) const;
     61 
     62   bool parseImpl(DataExtractor Data);
     63 
     64 public:
     65   void dump(raw_ostream &OS);
     66   void parse(DataExtractor Data);
     67 
     68   bool HasContent = false;
     69   bool HasError = false;
     70 };
     71 
     72 } // end namespace llvm
     73 
     74 #endif // LLVM_DEBUGINFO_DWARF_DWARFGDBINDEX_H
     75