[PATCH] D27170: Abstract almost all DwarfDebug out of the classes in DIE.cpp.

David Blaikie via llvm-commits llvm-commits at lists.llvm.org
Mon Nov 28 13:14:54 PST 2016


On Mon, Nov 28, 2016 at 1:10 PM Greg Clayton via Phabricator <
reviews at reviews.llvm.org> wrote:

> clayborg added a comment.
>
> Will switch over to using PointerUnion to avoid the strict API contracts
> and fix the rest accordingly.
>
>
>
> ================
> Comment at: include/llvm/CodeGen/DIE.h:87-88
>    DIEAbbrev(dwarf::Tag T, bool C) : Tag(T), Children(C) {}
> -
> +  DIEAbbrev(const DIEAbbrev &RHS) = default;
> +  DIEAbbrev(DIEAbbrev &&RHS) = default;
>    /// Accessors.
> ----------------
> dblaikie wrote:
> > Aren't these already implicit?
> Yep, they are. There was code in DwarfLinker a while back that was
> manually copying a DIEAbbrev for no reason so I added these when I removed
> that redundant code. These aren't needed.
>
>
> ================
> Comment at: include/llvm/CodeGen/DIE.h:616
> +  /// pointer to it.
> +  bool OwnedByDIEUnit = false;
> +
> ----------------
> Yes it is subtle API contract in an effort to save space.
>
> This doesn't grow this class because dwarf::Tag in 16 bits (enum class
> uint16_t) and the next class will be 4 or 8 byte aligned so it will sit in
> the gap.
>
> > Could we instead change 'Parent' to be a PointerUnion<DIE, DIEUnit> &
> wouldn't need the offset tricks anyway?
>
> Great idea. That solves the problem without growing the size.
>

Great! Look forward to seeing how it turns out.


>
>
>
> ================
> Comment at: include/llvm/CodeGen/DIE.h:721
> +  DIEUnit(uint16_t Version, uint8_t AddrSize, dwarf::Tag UnitTag);
> +  DIEUnit(DIEUnit &&RHS) = default;
> +  /// Set the section that this DIEUnit will be emitted into.
> ----------------
> dblaikie wrote:
> > This is implicit/default, right? (but I suppose if this thing is
> movable, then having the DIE physically point to its DIEUnit could be
> tricky - equally, though, all the DIE's children parent pointers would be
> broken by such an API as well, right?)
> I will think about this as I am switching over to use a PointerUnion and
> make any needed modifications.
>
>
> ================
> Comment at: lib/CodeGen/AsmPrinter/DIE.cpp:480
> +      if (DD)
> +        assert(!DD->useSplitDwarf() && "TODO: dwo files can't have
> relocations.");
> +      MCSection *Section = Unit->getSection();
> ----------------
> This is leaving in he assert that used to be on line 448 to the right? Am
> I missing something?
>

I meant specifically the fact that the code moved/sunk into the
if(relocations) block - that change seems separate?


>
>
> ================
> Comment at: lib/CodeGen/AsmPrinter/DIE.cpp:489
>    } else
> -    AP->EmitInt32(Entry->getOffset());
> +    AP->OutStreamer->EmitIntValue(Entry->getOffset(), SizeOf(AP, Form));
>  }
> ----------------
> dblaikie wrote:
> > Is this an unrelated/orthogonal change?
> Intentional change that fixes emitting DW_FORM_ref_addr for DWARF version
> 2 which was broken. It would always emit 4 bytes regardless of the DWARF
> version.
>

Be good to separate that out into its own patch (with test). Sounds like it
could go before or after this change.


>
>
> ================
> Comment at: tools/dsymutil/DwarfLinker.cpp:232
> +  void setOutputUnitDIE(DIE &&Die) {
> +    NewUnit.setUnitDie(std::move(Die));
> +  }
> ----------------
> I will switch to DIE to use a PointerUnion and fix accordingly.
>
>
> https://reviews.llvm.org/D27170
>
>
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20161128/15bfbc8b/attachment.html>


More information about the llvm-commits mailing list