54 for (
unsigned i = 0,
N = Data.size(); i <
N; ++i)
68 for (
unsigned i = 0,
N = Data.size(); i <
N; ++i) {
95 for (
unsigned i = 0,
N = Data.size(); i <
N; ++i) {
111 for (
unsigned i = 0,
N =
Children.size(); i <
N; ++i)
119 assert(Cu &&
"We should not have orphaned DIEs.");
128 if (p->
getTag() == dwarf::DW_TAG_compile_unit)
141 for (
size_t i = 0; i < Values.
size(); ++i)
142 if (Abbrevs.
getData()[i].getAttribute() == Attribute)
149 const std::string Indent(IndentCount,
' ');
157 <<
", Size: " <<
Size <<
"\n";
164 O <<
"Size: " <<
Size <<
"\n";
170 for (
unsigned i = 0,
N = Data.
size(); i <
N; ++i) {
176 O <<
"Blk[" << i <<
"]";
186 for (
unsigned j = 0, M =
Children.size(); j < M; ++j) {
187 Children[j]->print(O, IndentCount+4);
190 if (!isBlock) O <<
"\n";
198 void DIEValue::anchor() { }
215 case dwarf::DW_FORM_flag_present:
221 case dwarf::DW_FORM_flag:
222 case dwarf::DW_FORM_ref1:
223 case dwarf::DW_FORM_data1: Size = 1;
break;
224 case dwarf::DW_FORM_ref2:
225 case dwarf::DW_FORM_data2: Size = 2;
break;
226 case dwarf::DW_FORM_sec_offset:
227 case dwarf::DW_FORM_ref4:
228 case dwarf::DW_FORM_data4: Size = 4;
break;
229 case dwarf::DW_FORM_ref8:
230 case dwarf::DW_FORM_data8: Size = 8;
break;
231 case dwarf::DW_FORM_GNU_str_index: Asm->
EmitULEB128(Integer);
return;
232 case dwarf::DW_FORM_GNU_addr_index: Asm->
EmitULEB128(Integer);
return;
233 case dwarf::DW_FORM_udata: Asm->
EmitULEB128(Integer);
return;
234 case dwarf::DW_FORM_sdata: Asm->
EmitSLEB128(Integer);
return;
235 case dwarf::DW_FORM_addr:
246 case dwarf::DW_FORM_flag_present:
return 0;
247 case dwarf::DW_FORM_flag:
248 case dwarf::DW_FORM_ref1:
249 case dwarf::DW_FORM_data1:
return sizeof(int8_t);
250 case dwarf::DW_FORM_ref2:
251 case dwarf::DW_FORM_data2:
return sizeof(int16_t);
252 case dwarf::DW_FORM_sec_offset:
253 case dwarf::DW_FORM_ref4:
254 case dwarf::DW_FORM_data4:
return sizeof(int32_t);
255 case dwarf::DW_FORM_ref8:
256 case dwarf::DW_FORM_data8:
return sizeof(int64_t);
268 O <<
"Int: " << (int64_t)Integer <<
" 0x";
286 if (Form == dwarf::DW_FORM_data4)
return 4;
287 if (Form == dwarf::DW_FORM_sec_offset)
return 4;
288 if (Form == dwarf::DW_FORM_strp)
return 4;
307 Form == dwarf::DW_FORM_strp ||
308 Form == dwarf::DW_FORM_sec_offset ||
309 Form == dwarf::DW_FORM_ref_addr);
315 if (Form == dwarf::DW_FORM_data4)
return 4;
316 if (Form == dwarf::DW_FORM_sec_offset)
return 4;
317 if (Form == dwarf::DW_FORM_strp)
return 4;
323 O <<
"Lbl: " << Label->
getName();
340 if (Form == dwarf::DW_FORM_data4)
return 4;
341 if (Form == dwarf::DW_FORM_strp)
return 4;
364 return Access->
SizeOf(AP, Form);
369 O <<
"String: " << Str <<
"\tSymbol: ";
391 return sizeof(int32_t);
409 for (
unsigned i = 0,
N =
Values.size(); i <
N; ++i)
421 case dwarf::DW_FORM_block1: Asm->
EmitInt8(Size);
break;
422 case dwarf::DW_FORM_block2: Asm->
EmitInt16(Size);
break;
423 case dwarf::DW_FORM_block4: Asm->
EmitInt32(Size);
break;
424 case dwarf::DW_FORM_block: Asm->
EmitULEB128(Size);
break;
428 for (
unsigned i = 0,
N =
Values.size(); i <
N; ++i)
436 case dwarf::DW_FORM_block1:
return Size +
sizeof(int8_t);
437 case dwarf::DW_FORM_block2:
return Size +
sizeof(int16_t);
438 case dwarf::DW_FORM_block4:
return Size +
sizeof(int32_t);
std::vector< DIE * > Children
const char * FormEncodingString(unsigned Encoding)
void EmitRawText(const Twine &String)
virtual void print(raw_ostream &O) const
const DataLayout & getDataLayout() const
getDataLayout - Return information about data layout.
void EmitInt8(int Value) const
virtual void print(raw_ostream &O) const
virtual unsigned SizeOf(AsmPrinter *AP, dwarf::Form Form) const
unsigned getPointerSize(unsigned AS=0) const
void EmitLabelDifference(const MCSymbol *Hi, const MCSymbol *Lo, unsigned Size) const
virtual bool hasRawTextSupport() const
DIEValue * findAttribute(uint16_t Attribute)
void EmitInt32(int Value) const
void EmitLabelReference(const MCSymbol *Label, unsigned Size, bool IsSectionRelative=false) const
const DIE * getCompileUnitOrNull() const
virtual unsigned SizeOf(AsmPrinter *AP, dwarf::Form Form) const
virtual void EmitValue(AsmPrinter *AP, dwarf::Form Form) const
void print(raw_ostream &O, unsigned IndentCount=0) const
void Profile(FoldingSetNodeID &ID) const
virtual void EmitValue(AsmPrinter *AP, dwarf::Form Form) const
dwarf::Form getForm() const
static unsigned getSLEB128Size(int64_t Value)
#define llvm_unreachable(msg)
void AddInteger(signed I)
ID
LLVM Calling Convention Representation.
format_object1< T > format(const char *Fmt, const T &Val)
virtual void EmitValue(AsmPrinter *AP, dwarf::Form Form) const
virtual void print(raw_ostream &O) const
raw_ostream & write_hex(unsigned long long N)
write_hex - Output N in hexadecimal, without any prefix or padding.
void EmitInt16(int Value) const
virtual void EmitValue(AsmPrinter *AP, dwarf::Form Form) const
dwarf::Tag getTag() const
virtual void EmitIntValue(uint64_t Value, unsigned Size)
void EmitValue(const MCExpr *Value, unsigned Size)
virtual unsigned SizeOf(AsmPrinter *AP, dwarf::Form Form) const =0
virtual void EmitValue(AsmPrinter *AP, dwarf::Form Form) const =0
virtual void print(raw_ostream &O) const
void EmitSLEB128(int64_t Value, const char *Desc=0) const
EmitSLEB128 - emit the specified signed leb128 value.
const DwarfDebug * getDwarfDebug() const
dwarf::Attribute getAttribute() const
virtual unsigned SizeOf(AsmPrinter *AP, dwarf::Form Form) const
const DIE * getCompileUnit() const
virtual void EmitValue(AsmPrinter *AP, dwarf::Form Form) const
const char * TagString(unsigned Tag)
unsigned getOffset() const
virtual void print(raw_ostream &O) const
const SmallVectorImpl< DIEValue * > & getValues() const
SmallVector< DIEValue *, 12 > Values
void Profile(FoldingSetNodeID &ID) const
raw_ostream & dbgs()
dbgs - Return a circular-buffered debug stream.
virtual void EmitValue(AsmPrinter *AP, dwarf::Form Form) const
const char * AttributeString(unsigned Attribute)
void print(raw_ostream &OS) const
StringRef getName() const
getName - Get the symbol name.
void EmitULEB128(uint64_t Value, const char *Desc=0, unsigned PadTo=0) const
EmitULEB128 - emit the specified unsigned leb128 value.
virtual unsigned SizeOf(AsmPrinter *AP, dwarf::Form Form) const
virtual void print(raw_ostream &O) const
virtual void print(raw_ostream &O) const =0
void print(raw_ostream &O)
const SmallVectorImpl< DIEAbbrevData > & getData() const
virtual void EmitValue(AsmPrinter *AP, dwarf::Form Form) const
virtual unsigned SizeOf(AsmPrinter *AP, dwarf::Form Form) const
unsigned ComputeSize(AsmPrinter *AP)
dwarf::Tag getTag() const
static unsigned getULEB128Size(uint64_t Value)
uint16_t getChildrenFlag() const
void Emit(AsmPrinter *AP) const
static unsigned getRefAddrSize(AsmPrinter *AP)
Returns size of a ref_addr entry.
const char * ChildrenString(unsigned Children)
unsigned getDwarfVersion() const
Returns the Dwarf Version.
virtual void print(raw_ostream &O) const
virtual unsigned SizeOf(AsmPrinter *AP, dwarf::Form Form) const