mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2025-01-07 03:40:35 +00:00
Split out DW_OP_addr for the split debug info DWARF5 proposal.
llvm-svn: 172857
This commit is contained in:
parent
198832d632
commit
0a652f09e1
@ -190,6 +190,22 @@ void CompileUnit::addLabelAddress(DIE *Die, unsigned Attribute,
|
||||
}
|
||||
}
|
||||
|
||||
/// addOpAddress - Add a dwarf op address data and value using the
|
||||
/// form given and an op of either DW_FORM_addr or DW_FORM_GNU_addr_index.
|
||||
///
|
||||
void CompileUnit::addOpAddress(DIE *Die, MCSymbol *Sym) {
|
||||
|
||||
if (!DD->useSplitDwarf()) {
|
||||
addUInt(Die, 0, dwarf::DW_FORM_data1, dwarf::DW_OP_addr);
|
||||
addLabel(Die, 0, dwarf::DW_FORM_udata, Sym);
|
||||
} else {
|
||||
unsigned idx = DU->getAddrPoolIndex(Sym);
|
||||
DIEValue *Value = new (DIEValueAllocator) DIEInteger(idx);
|
||||
addUInt(Die, 0, dwarf::DW_FORM_data1, dwarf::DW_OP_GNU_addr_index);
|
||||
Die->addValue(0, dwarf::DW_FORM_GNU_addr_index, Value);
|
||||
}
|
||||
}
|
||||
|
||||
/// addDelta - Add a label delta attribute data and value.
|
||||
///
|
||||
void CompileUnit::addDelta(DIE *Die, unsigned Attribute, unsigned Form,
|
||||
@ -1297,9 +1313,7 @@ void CompileUnit::createGlobalVariableDIE(const MDNode *N) {
|
||||
if (isGlobalVariable) {
|
||||
addToAccelTable = true;
|
||||
DIEBlock *Block = new (DIEValueAllocator) DIEBlock();
|
||||
addUInt(Block, 0, dwarf::DW_FORM_data1, dwarf::DW_OP_addr);
|
||||
addLabel(Block, 0, dwarf::DW_FORM_udata,
|
||||
Asm->Mang->getSymbol(GV.getGlobal()));
|
||||
addOpAddress(Block, Asm->Mang->getSymbol(GV.getGlobal()));
|
||||
// Do not create specification DIE if context is either compile unit
|
||||
// or a subprogram.
|
||||
if (GVContext && GV.isDefinition() && !GVContext.isCompileUnit() &&
|
||||
@ -1329,9 +1343,7 @@ void CompileUnit::createGlobalVariableDIE(const MDNode *N) {
|
||||
// GV is a merged global.
|
||||
DIEBlock *Block = new (DIEValueAllocator) DIEBlock();
|
||||
Value *Ptr = CE->getOperand(0);
|
||||
addUInt(Block, 0, dwarf::DW_FORM_data1, dwarf::DW_OP_addr);
|
||||
addLabel(Block, 0, dwarf::DW_FORM_udata,
|
||||
Asm->Mang->getSymbol(cast<GlobalValue>(Ptr)));
|
||||
addOpAddress(Block, Asm->Mang->getSymbol(cast<GlobalValue>(Ptr)));
|
||||
addUInt(Block, 0, dwarf::DW_FORM_data1, dwarf::DW_OP_constu);
|
||||
SmallVector<Value*, 3> Idx(CE->op_begin()+1, CE->op_end());
|
||||
addUInt(Block, 0, dwarf::DW_FORM_udata,
|
||||
|
@ -215,6 +215,11 @@ public:
|
||||
///
|
||||
void addLabelAddress(DIE *Die, unsigned Attribute, MCSymbol *Label);
|
||||
|
||||
/// addOpAddress - Add a dwarf op address data and value using the
|
||||
/// form given and an op of either DW_FORM_addr or DW_FORM_GNU_addr_index.
|
||||
///
|
||||
void addOpAddress(DIE *Die, MCSymbol *Label);
|
||||
|
||||
/// addDelta - Add a label delta attribute data and value.
|
||||
///
|
||||
void addDelta(DIE *Die, unsigned Attribute, unsigned Form,
|
||||
|
@ -66,6 +66,12 @@
|
||||
; CHECK: DW_AT_name [DW_FORM_GNU_str_index] ( indexed (00000004) string = "int")
|
||||
; CHECK: DW_TAG_variable
|
||||
; CHECK: DW_AT_name [DW_FORM_GNU_str_index] ( indexed (00000003) string = "a")
|
||||
; CHECK: DW_AT_type [DW_FORM_ref4] (cu + 0x0016 => {0x00000016})
|
||||
; CHECK: DW_AT_external [DW_FORM_flag_present] (true)
|
||||
; CHECK: DW_AT_decl_file [DW_FORM_data1] (0x01)
|
||||
; CHECK: DW_AT_decl_line [DW_FORM_data1] (0x01)
|
||||
; CHECK: DW_AT_location [DW_FORM_block1] (<0x02> fb 01 )
|
||||
|
||||
|
||||
; CHECK: .debug_str.dwo contents:
|
||||
; CHECK: 0x00000000: "clang version 3.3 (trunk 169021) (llvm/trunk 169020)"
|
||||
|
Loading…
Reference in New Issue
Block a user