1 //===- DWARFDebugPubTable.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_DWARFDEBUGPUBTABLE_H 11 #define LLVM_DEBUGINFO_DWARF_DWARFDEBUGPUBTABLE_H 12 13 #include "llvm/ADT/ArrayRef.h" 14 #include "llvm/ADT/StringRef.h" 15 #include "llvm/BinaryFormat/Dwarf.h" 16 #include "llvm/DebugInfo/DWARF/DWARFObject.h" 17 #include <cstdint> 18 #include <vector> 19 20 namespace llvm { 21 22 class raw_ostream; 23 24 /// Represents structure for holding and parsing .debug_pub* tables. 25 class DWARFDebugPubTable { 26 public: 27 struct Entry { 28 /// Section offset from the beginning of the compilation unit. 29 uint32_t SecOffset; 30 31 /// An entry of the various gnu_pub* debug sections. 32 dwarf::PubIndexEntryDescriptor Descriptor; 33 34 /// The name of the object as given by the DW_AT_name attribute of the 35 /// referenced DIE. 36 StringRef Name; 37 }; 38 39 /// Each table consists of sets of variable length entries. Each set describes 40 /// the names of global objects and functions, or global types, respectively, 41 /// whose definitions are represented by debugging information entries owned 42 /// by a single compilation unit. 43 struct Set { 44 /// The total length of the entries for that set, not including the length 45 /// field itself. 46 uint32_t Length; 47 48 /// This number is specific to the name lookup table and is independent of 49 /// the DWARF version number. 50 uint16_t Version; 51 52 /// The offset from the beginning of the .debug_info section of the 53 /// compilation unit header referenced by the set. 54 uint32_t Offset; 55 56 /// The size in bytes of the contents of the .debug_info section generated 57 /// to represent that compilation unit. 58 uint32_t Size; 59 60 std::vector<Entry> Entries; 61 }; 62 63 private: 64 std::vector<Set> Sets; 65 66 /// gnu styled tables contains additional information. 67 /// This flag determines whether or not section we parse is debug_gnu* table. 68 bool GnuStyle; 69 70 public: 71 DWARFDebugPubTable(const DWARFObject &Obj, const DWARFSection &Sec, 72 bool LittleEndian, bool GnuStyle); 73 74 void dump(raw_ostream &OS) const; 75 getData()76 ArrayRef<Set> getData() { return Sets; } 77 }; 78 79 } // end namespace llvm 80 81 #endif // LLVM_DEBUGINFO_DWARF_DWARFDEBUGPUBTABLE_H 82