1 //===- DWARFDebugPubTable.h -------------------------------------*- C++ -*-===// 2 // 3 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 4 // See https://llvm.org/LICENSE.txt for license information. 5 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 6 // 7 //===----------------------------------------------------------------------===// 8 9 #ifndef LLVM_DEBUGINFO_DWARF_DWARFDEBUGPUBTABLE_H 10 #define LLVM_DEBUGINFO_DWARF_DWARFDEBUGPUBTABLE_H 11 12 #include "llvm/ADT/ArrayRef.h" 13 #include "llvm/ADT/STLFunctionalExtras.h" 14 #include "llvm/ADT/StringRef.h" 15 #include "llvm/BinaryFormat/Dwarf.h" 16 #include "llvm/Support/Compiler.h" 17 #include <cstdint> 18 #include <vector> 19 20 namespace llvm { 21 22 class raw_ostream; 23 class DWARFDataExtractor; 24 class Error; 25 26 /// Represents structure for holding and parsing .debug_pub* tables. 27 class DWARFDebugPubTable { 28 public: 29 struct Entry { 30 /// Section offset from the beginning of the compilation unit. 31 uint64_t SecOffset; 32 33 /// An entry of the various gnu_pub* debug sections. 34 dwarf::PubIndexEntryDescriptor Descriptor; 35 36 /// The name of the object as given by the DW_AT_name attribute of the 37 /// referenced DIE. 38 StringRef Name; 39 }; 40 41 /// Each table consists of sets of variable length entries. Each set describes 42 /// the names of global objects and functions, or global types, respectively, 43 /// whose definitions are represented by debugging information entries owned 44 /// by a single compilation unit. 45 struct Set { 46 /// The total length of the entries for that set, not including the length 47 /// field itself. 48 uint64_t Length; 49 50 /// The DWARF format of the set. 51 dwarf::DwarfFormat Format; 52 53 /// This number is specific to the name lookup table and is independent of 54 /// the DWARF version number. 55 uint16_t Version; 56 57 /// The offset from the beginning of the .debug_info section of the 58 /// compilation unit header referenced by the set. 59 uint64_t Offset; 60 61 /// The size in bytes of the contents of the .debug_info section generated 62 /// to represent that compilation unit. 63 uint64_t Size; 64 65 std::vector<Entry> Entries; 66 }; 67 68 private: 69 std::vector<Set> Sets; 70 71 /// gnu styled tables contains additional information. 72 /// This flag determines whether or not section we parse is debug_gnu* table. 73 bool GnuStyle = false; 74 75 public: 76 DWARFDebugPubTable() = default; 77 78 LLVM_ABI void extract(DWARFDataExtractor Data, bool GnuStyle, 79 function_ref<void(Error)> RecoverableErrorHandler); 80 81 LLVM_ABI void dump(raw_ostream &OS) const; 82 getData()83 ArrayRef<Set> getData() { return Sets; } 84 }; 85 86 } // end namespace llvm 87 88 #endif // LLVM_DEBUGINFO_DWARF_DWARFDEBUGPUBTABLE_H 89