Line data Source code
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 16 : 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
|