14 #ifndef CODEGEN_ASMPRINTER_DWARFACCELTABLE_H__
15 #define CODEGEN_ASMPRINTER_DWARFACCELTABLE_H__
21 #include "llvm/Support/DataTypes.h"
72 for (
unsigned i = 0, e = Str.
size(); i != e; ++i)
73 h = ((h << 5) + h) + Str[i];
79 void ComputeBucketCount(
void);
84 uint16_t hash_function;
85 uint32_t bucket_count;
86 uint32_t hashes_count;
88 uint32_t header_data_len;
92 static const uint32_t MagicHash = 0x48415348;
94 TableHeader(uint32_t data_len)
95 : magic(MagicHash), version(1),
97 hashes_count(0), header_data_len(data_len) {}
101 O <<
"Magic: " <<
format(
"0x%x", magic) <<
"\n"
102 <<
"Version: " << version <<
"\n"
103 <<
"Hash Function: " << hash_function <<
"\n"
104 <<
"Bucket Count: " << bucket_count <<
"\n"
105 <<
"Header Data Length: " << header_data_len <<
"\n";
141 struct TableHeaderData {
142 uint32_t die_offset_base;
146 : die_offset_base(offset), Atoms(AtomList.
begin(), AtomList.
end()) {}
149 void print(raw_ostream &O) {
150 O <<
"die_offset_base: " << die_offset_base <<
"\n";
151 for (
size_t i = 0; i < Atoms.size(); i++)
176 O <<
" Flags: " <<
Flags <<
"\n";
188 : Str(S), Data(Data) {
189 HashValue = DwarfAccelTable::HashDJB(S);
192 void print(raw_ostream &O) {
193 O <<
"Name: " << Str <<
"\n";
194 O <<
" Hash Value: " <<
format(
"0x%x", HashValue) <<
"\n";
201 for (
size_t i = 0; i < Data.size(); i++) {
202 O <<
" Offset: " << Data[i]->Die->getOffset() <<
"\n";
204 O <<
" Flags: " << Data[i]->Flags <<
"\n";
212 void operator=(const DwarfAccelTable &) LLVM_DELETED_FUNCTION;
215 void EmitHeader(AsmPrinter *);
216 void EmitBuckets(AsmPrinter *);
217 void EmitHashes(AsmPrinter *);
218 void EmitOffsets(AsmPrinter *, MCSymbol *);
219 void EmitData(AsmPrinter *, DwarfUnits *D);
222 BumpPtrAllocator Allocator;
226 TableHeaderData HeaderData;
227 std::vector<HashData *> Data;
230 typedef std::vector<HashDataContents *> DataArray;
231 typedef StringMap<DataArray, BumpPtrAllocator &> StringEntries;
232 StringEntries Entries;
235 typedef std::vector<HashData *> HashList;
236 typedef std::vector<HashList> BucketList;
242 DwarfAccelTable(ArrayRef<DwarfAccelTable::Atom>);
244 void AddName(StringRef, DIE *,
char = 0);
246 void Emit(AsmPrinter *, MCSymbol *, DwarfUnits *);
248 void print(raw_ostream &O);
const_iterator end(StringRef path)
Get end iterator over path.
const char * AtomTypeString(unsigned Atom)
AtomTypeString - Return the string for the specified Atom type.
const char * FormEncodingString(unsigned Encoding)
size_t size() const
size - Get the string size.
void print(raw_ostream &O) const
const_iterator begin(StringRef path)
Get begin iterator over path.
format_object1< T > format(const char *Fmt, const T &Val)
void AddName(StringRef, DIE *, char=0)
void FinalizeTable(AsmPrinter *, StringRef)
dwarf::Tag getTag() const
void Emit(AsmPrinter *, MCSymbol *, DwarfUnits *)
const char * TagString(unsigned Tag)
unsigned getOffset() const
void print(raw_ostream &O)
raw_ostream & dbgs()
dbgs - Return a circular-buffered debug stream.
#define LLVM_DELETED_FUNCTION
Atom(uint16_t type, uint16_t form)
HashDataContents(DIE *D, char Flags)
void print(raw_ostream &O)