//===- GdbIndex.h --------------------------------------------*- C++ -*-===// // // The LLVM Linker // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===-------------------------------------------------------------------===// #ifndef LLD_ELF_GDB_INDEX_H #define LLD_ELF_GDB_INDEX_H #include "InputFiles.h" #include "llvm/DebugInfo/DWARF/DWARFContext.h" #include "llvm/Object/ELF.h" namespace lld { namespace elf { class InputSection; // Struct represents single entry of address area of gdb index. struct AddressEntry { InputSection *Section; uint64_t LowAddress; uint64_t HighAddress; uint32_t CuIndex; }; // Struct represents single entry of compilation units list area of gdb index. // It consist of CU offset in .debug_info section and it's size. struct CompilationUnitEntry { uint64_t CuOffset; uint64_t CuLength; }; // Represents data about symbol and type names which are used // to build symbol table and constant pool area of gdb index. struct NameTypeEntry { StringRef Name; uint8_t Type; }; // We fill one GdbIndexDataChunk for each object where scan of // debug information performed. That information futher used // for filling gdb index section areas. struct GdbIndexChunk { InputSection *DebugInfoSec; std::vector AddressArea; std::vector CompilationUnits; std::vector NamesAndTypes; }; // Element of GdbHashTab hash table. struct GdbSymbol { GdbSymbol(uint32_t Hash, size_t Offset) : NameHash(Hash), NameOffset(Offset) {} uint32_t NameHash; size_t NameOffset; size_t CuVectorIndex; }; // This class manages the hashed symbol table for the .gdb_index section. // The hash value for a table entry is computed by applying an iterative hash // function to the symbol's name. class GdbHashTab final { public: std::pair add(uint32_t Hash, size_t Offset); void finalizeContents(); size_t getCapacity() { return Table.size(); } GdbSymbol *getSymbol(size_t I) { return Table[I]; } private: llvm::DenseMap Map; std::vector Table; }; } // namespace elf } // namespace lld #endif