]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/blob - contrib/llvm/include/llvm/DebugInfo/DWARF/DWARFGdbIndex.h
Merge llvm, clang, compiler-rt, libc++, libunwind, lld, lldb and openmp
[FreeBSD/FreeBSD.git] / contrib / llvm / include / llvm / DebugInfo / DWARF / DWARFGdbIndex.h
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 TuListOffset;
28   uint32_t AddressAreaOffset;
29   uint32_t SymbolTableOffset;
30   uint32_t ConstantPoolOffset;
31
32   struct CompUnitEntry {
33     uint64_t Offset; /// Offset of a CU in the .debug_info section.
34     uint64_t Length; /// Length of that CU.
35   };
36   SmallVector<CompUnitEntry, 0> CuList;
37
38   struct TypeUnitEntry {
39     uint64_t Offset;
40     uint64_t TypeOffset;
41     uint64_t TypeSignature;
42   };
43   SmallVector<TypeUnitEntry, 0> TuList;
44
45   struct AddressEntry {
46     uint64_t LowAddress;  /// The low address.
47     uint64_t HighAddress; /// The high address.
48     uint32_t CuIndex;     /// The CU index.
49   };
50   SmallVector<AddressEntry, 0> AddressArea;
51
52   struct SymTableEntry {
53     uint32_t NameOffset; /// Offset of the symbol's name in the constant pool.
54     uint32_t VecOffset;  /// Offset of the CU vector in the constant pool.
55   };
56   SmallVector<SymTableEntry, 0> SymbolTable;
57
58   /// Each value is CU index + attributes.
59   SmallVector<std::pair<uint32_t, SmallVector<uint32_t, 0>>, 0>
60       ConstantPoolVectors;
61
62   StringRef ConstantPoolStrings;
63   uint32_t StringPoolOffset;
64
65   void dumpCUList(raw_ostream &OS) const;
66   void dumpTUList(raw_ostream &OS) const;
67   void dumpAddressArea(raw_ostream &OS) const;
68   void dumpSymbolTable(raw_ostream &OS) const;
69   void dumpConstantPool(raw_ostream &OS) const;
70
71   bool parseImpl(DataExtractor Data);
72
73 public:
74   void dump(raw_ostream &OS);
75   void parse(DataExtractor Data);
76
77   bool HasContent = false;
78   bool HasError = false;
79 };
80
81 } // end namespace llvm
82
83 #endif // LLVM_DEBUGINFO_DWARF_DWARFGDBINDEX_H