| //===- DWARFDebugPubTable.h -------------------------------------*- C++ -*-===// |
| // |
| // The LLVM Compiler Infrastructure |
| // |
| // This file is distributed under the University of Illinois Open Source |
| // License. See LICENSE.TXT for details. |
| // |
| //===----------------------------------------------------------------------===// |
| |
| #ifndef LLVM_DEBUGINFO_DWARF_DWARFDEBUGPUBTABLE_H |
| #define LLVM_DEBUGINFO_DWARF_DWARFDEBUGPUBTABLE_H |
| |
| #include "llvm/ADT/ArrayRef.h" |
| #include "llvm/ADT/StringRef.h" |
| #include "llvm/BinaryFormat/Dwarf.h" |
| #include <cstdint> |
| #include <vector> |
| |
| namespace llvm { |
| |
| class raw_ostream; |
| |
| /// Represents structure for holding and parsing .debug_pub* tables. |
| class DWARFDebugPubTable { |
| public: |
| struct Entry { |
| /// Section offset from the beginning of the compilation unit. |
| uint32_t SecOffset; |
| |
| /// An entry of the various gnu_pub* debug sections. |
| dwarf::PubIndexEntryDescriptor Descriptor; |
| |
| /// The name of the object as given by the DW_AT_name attribute of the |
| /// referenced DIE. |
| const char *Name; |
| }; |
| |
| /// Each table consists of sets of variable length entries. Each set describes |
| /// the names of global objects and functions, or global types, respectively, |
| /// whose definitions are represented by debugging information entries owned |
| /// by a single compilation unit. |
| struct Set { |
| /// The total length of the entries for that set, not including the length |
| /// field itself. |
| uint32_t Length; |
| |
| /// This number is specific to the name lookup table and is independent of |
| /// the DWARF version number. |
| uint16_t Version; |
| |
| /// The offset from the beginning of the .debug_info section of the |
| /// compilation unit header referenced by the set. |
| uint32_t Offset; |
| |
| /// The size in bytes of the contents of the .debug_info section generated |
| /// to represent that compilation unit. |
| uint32_t Size; |
| |
| std::vector<Entry> Entries; |
| }; |
| |
| private: |
| std::vector<Set> Sets; |
| |
| /// gnu styled tables contains additional information. |
| /// This flag determines whether or not section we parse is debug_gnu* table. |
| bool GnuStyle; |
| |
| public: |
| DWARFDebugPubTable(StringRef Data, bool LittleEndian, bool GnuStyle); |
| |
| void dump(raw_ostream &OS) const; |
| |
| ArrayRef<Set> getData() { return Sets; } |
| }; |
| |
| } // end namespace llvm |
| |
| #endif // LLVM_DEBUGINFO_DWARF_DWARFDEBUGPUBTABLE_H |