void DwarfCompileUnit::addLocalLabelAddress(DIE &Die, dwarf::Attribute Attribute, const MCSymbol *Label) { if (Label) DD->addArangeLabel(SymbolCU(this, Label)); if (Label) Die.addValue(DIEValueAllocator, Attribute, dwarf::DW_FORM_addr, DIELabel(Label)); else Die.addValue(DIEValueAllocator, Attribute, dwarf::DW_FORM_addr, DIEInteger(0)); }
/// addLabelAddress - Add a dwarf label attribute data and value using /// DW_FORM_addr or DW_FORM_GNU_addr_index. void DwarfCompileUnit::addLabelAddress(DIE &Die, dwarf::Attribute Attribute, const MCSymbol *Label) { // Don't use the address pool in non-fission or in the skeleton unit itself. // FIXME: Once GDB supports this, it's probably worthwhile using the address // pool from the skeleton - maybe even in non-fission (possibly fewer // relocations by sharing them in the pool, but we have other ideas about how // to reduce the number of relocations as well/instead). if ((!DD->useSplitDwarf() || !Skeleton) && DD->getDwarfVersion() < 5) return addLocalLabelAddress(Die, Attribute, Label); if (Label) DD->addArangeLabel(SymbolCU(this, Label)); unsigned idx = DD->getAddressPool().getIndex(Label); Die.addValue(DIEValueAllocator, Attribute, DD->getDwarfVersion() >= 5 ? dwarf::DW_FORM_addrx : dwarf::DW_FORM_GNU_addr_index, DIEInteger(idx)); }
void DwarfCompileUnit::addAddressExpr(DIE &Die, dwarf::Attribute Attribute, const MCExpr *Expr) { Die.addValue(DIEValueAllocator, Attribute, dwarf::DW_FORM_addr, DIEExpr(Expr)); }
void DwarfCompileUnit::applyStmtList(DIE &D) { D.addValue(DIEValueAllocator, *StmtListValue); }
/// Add a Dwarf loclistptr attribute data and value. void DwarfCompileUnit::addLocationList(DIE &Die, dwarf::Attribute Attribute, unsigned Index) { dwarf::Form Form = DD->getDwarfVersion() >= 4 ? dwarf::DW_FORM_sec_offset : dwarf::DW_FORM_data4; Die.addValue(DIEValueAllocator, Attribute, Form, DIELocList(Index)); }