[llvm] r217128 - Add a DWARFContext& member in DWARFUnit.

David Blaikie dblaikie at gmail.com
Thu Sep 4 10:43:32 PDT 2014


On Thu, Sep 4, 2014 at 6:37 AM, Frédéric Riss <friss at apple.com> wrote:

>
> On 04 Sep 2014, at 15:18, David Blaikie <dblaikie at gmail.com> wrote:
>
> On Sep 3, 2014 11:27 PM, "Frederic Riss" <friss at apple.com> wrote:
> >
> > Author: friss
> > Date: Thu Sep  4 01:14:28 2014
> > New Revision: 217128
> >
> > URL: http://llvm.org/viewvc/llvm-project?rev=217128&view=rev
> > Log:
> > Add a DWARFContext& member in DWARFUnit.
> >
> > The DWARFContext will be used to pass global 'context' down, like
> > pointers to related debug info sections or command line options.
> > The first use will be for the debug_info dumper to be able to access
> > other debug info section to dump eg. Location Expression inline
> > in the debug_info dump.
>
> Hmm, how is this useful for location expression dumping? What extra info
> do you need there? I guess I'll see when you get to those patches, but just
> curious.
>
> For location expression dumping, it allows you to access the DebugLoc
> object for the file being processed.
>

Oh, that's for debug_loc references? That's fair I suppose (in the same way
that referencing strings, filenames, etc does).


> I also use it in another patch to access to ‘search’ functions that only
> the Context provides (like DWARFContext::getLineTableForUnit()). It is also
> useful to resolve cross Unit references.
>

*nod*


>
> The context will also be the natural place to put things like dumping
> options if we and up adding some.
>
> (I was expecting this to be used for stuff like low_pc rendering for
> example)
>
>
> I have nothing planned for low_pc. What do you have in mind? Putting line
> information on these attributes?
>

Ah, no worries - in terms of unicorns/ponies/whatever, I was thinking we
could render addresses (low/high_pc, etc) in the same form as a debugger,
as symbol+offset. (so low_pc of a subprogram would simply be "<symbol()>"
and then low_pc of some scope within it might be "<symbol()+42>" etc... )

[As a side note: Eric and I were tossing around ideas for how we might
reduce the number of relocations in debug info further, possibly by
allowing low_pc to be relative to the low_pc of its enclosing scope - with
some interesting shenanigans for debug_ranges, etc]


>
> Hmm - and how did we do rendering of DW_form_strp without access to other
> sections via the unit? I guess we passed in the string table specifically?
> Can we remove that explicit passing notes that we have the whole unit?
>
>
> The Unit contains pointers to some interesting sections’ data, among which
> there is the string section data. We could certainly add a string getter to
> the context and remove the sections data from the Unit.
>
> Fred
>
> > Modified:
> >     llvm/trunk/lib/DebugInfo/DWARFCompileUnit.h
> >     llvm/trunk/lib/DebugInfo/DWARFContext.cpp
> >     llvm/trunk/lib/DebugInfo/DWARFTypeUnit.h
> >     llvm/trunk/lib/DebugInfo/DWARFUnit.cpp
> >     llvm/trunk/lib/DebugInfo/DWARFUnit.h
> >
> > Modified: llvm/trunk/lib/DebugInfo/DWARFCompileUnit.h
> > URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/DebugInfo/DWARFCompileUnit.h?rev=217128&r1=217127&r2=217128&view=diff
> >
> ==============================================================================
> > --- llvm/trunk/lib/DebugInfo/DWARFCompileUnit.h (original)
> > +++ llvm/trunk/lib/DebugInfo/DWARFCompileUnit.h Thu Sep  4 01:14:28 2014
> > @@ -16,10 +16,10 @@ namespace llvm {
> >
> >  class DWARFCompileUnit : public DWARFUnit {
> >  public:
> > -  DWARFCompileUnit(const DWARFDebugAbbrev *DA, StringRef IS, StringRef
> RS,
> > -                   StringRef SS, StringRef SOS, StringRef AOS,
> > -                   const RelocAddrMap *M, bool LE)
> > -      : DWARFUnit(DA, IS, RS, SS, SOS, AOS, M, LE) {}
> > +  DWARFCompileUnit(DWARFContext& Context, const DWARFDebugAbbrev *DA,
> > +                   StringRef IS, StringRef RS, StringRef SS, StringRef
> SOS,
> > +                   StringRef AOS, const RelocAddrMap *M, bool LE)
> > +    : DWARFUnit(Context, DA, IS, RS, SS, SOS, AOS, M, LE) {}
> >    void dump(raw_ostream &OS);
> >    // VTable anchor.
> >    ~DWARFCompileUnit() override;
> >
> > Modified: llvm/trunk/lib/DebugInfo/DWARFContext.cpp
> > URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/DebugInfo/DWARFContext.cpp?rev=217128&r1=217127&r2=217128&view=diff
> >
> ==============================================================================
> > --- llvm/trunk/lib/DebugInfo/DWARFContext.cpp (original)
> > +++ llvm/trunk/lib/DebugInfo/DWARFContext.cpp Thu Sep  4 01:14:28 2014
> > @@ -318,7 +318,7 @@ void DWARFContext::parseCompileUnits() {
> >    const DataExtractor &DIData = DataExtractor(getInfoSection().Data,
> >                                                isLittleEndian(), 0);
> >    while (DIData.isValidOffset(offset)) {
> > -    std::unique_ptr<DWARFCompileUnit> CU(new DWARFCompileUnit(
> > +    std::unique_ptr<DWARFCompileUnit> CU(new DWARFCompileUnit(*this,
> >          getDebugAbbrev(), getInfoSection().Data, getRangeSection(),
> >          getStringSection(), StringRef(), getAddrSection(),
> >          &getInfoSection().Relocs, isLittleEndian()));
> > @@ -338,10 +338,10 @@ void DWARFContext::parseTypeUnits() {
> >      const DataExtractor &DIData =
> >          DataExtractor(I.second.Data, isLittleEndian(), 0);
> >      while (DIData.isValidOffset(offset)) {
> > -      std::unique_ptr<DWARFTypeUnit> TU(
> > -          new DWARFTypeUnit(getDebugAbbrev(), I.second.Data,
> getRangeSection(),
> > -                            getStringSection(), StringRef(),
> getAddrSection(),
> > -                            &I.second.Relocs, isLittleEndian()));
> > +      std::unique_ptr<DWARFTypeUnit> TU(new DWARFTypeUnit(*this,
> > +           getDebugAbbrev(), I.second.Data, getRangeSection(),
> > +           getStringSection(), StringRef(), getAddrSection(),
> > +           &I.second.Relocs, isLittleEndian()));
> >        if (!TU->extract(DIData, &offset))
> >          break;
> >        TUs.push_back(std::move(TU));
> > @@ -357,7 +357,7 @@ void DWARFContext::parseDWOCompileUnits(
> >    const DataExtractor &DIData =
> >        DataExtractor(getInfoDWOSection().Data, isLittleEndian(), 0);
> >    while (DIData.isValidOffset(offset)) {
> > -    std::unique_ptr<DWARFCompileUnit> DWOCU(new DWARFCompileUnit(
> > +    std::unique_ptr<DWARFCompileUnit> DWOCU(new DWARFCompileUnit(*this,
> >          getDebugAbbrevDWO(), getInfoDWOSection().Data,
> getRangeDWOSection(),
> >          getStringDWOSection(), getStringOffsetDWOSection(),
> getAddrSection(),
> >          &getInfoDWOSection().Relocs, isLittleEndian()));
> > @@ -377,7 +377,7 @@ void DWARFContext::parseDWOTypeUnits() {
> >      const DataExtractor &DIData =
> >          DataExtractor(I.second.Data, isLittleEndian(), 0);
> >      while (DIData.isValidOffset(offset)) {
> > -      std::unique_ptr<DWARFTypeUnit> TU(new DWARFTypeUnit(
> > +      std::unique_ptr<DWARFTypeUnit> TU(new DWARFTypeUnit(*this,
> >            getDebugAbbrevDWO(), I.second.Data, getRangeDWOSection(),
> >            getStringDWOSection(), getStringOffsetDWOSection(),
> getAddrSection(),
> >            &I.second.Relocs, isLittleEndian()));
> >
> > Modified: llvm/trunk/lib/DebugInfo/DWARFTypeUnit.h
> > URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/DebugInfo/DWARFTypeUnit.h?rev=217128&r1=217127&r2=217128&view=diff
> >
> ==============================================================================
> > --- llvm/trunk/lib/DebugInfo/DWARFTypeUnit.h (original)
> > +++ llvm/trunk/lib/DebugInfo/DWARFTypeUnit.h Thu Sep  4 01:14:28 2014
> > @@ -19,10 +19,10 @@ private:
> >    uint64_t TypeHash;
> >    uint32_t TypeOffset;
> >  public:
> > -  DWARFTypeUnit(const DWARFDebugAbbrev *DA, StringRef IS, StringRef RS,
> > -                StringRef SS, StringRef SOS, StringRef AOS,
> > -                const RelocAddrMap *M, bool LE)
> > -      : DWARFUnit(DA, IS, RS, SS, SOS, AOS, M, LE) {}
> > +  DWARFTypeUnit(DWARFContext &Context, const DWARFDebugAbbrev *DA,
> > +                StringRef IS, StringRef RS, StringRef SS, StringRef SOS,
> > +                StringRef AOS, const RelocAddrMap *M, bool LE)
> > +    : DWARFUnit(Context, DA, IS, RS, SS, SOS, AOS, M, LE) {}
> >    uint32_t getHeaderSize() const override {
> >      return DWARFUnit::getHeaderSize() + 12;
> >    }
> >
> > Modified: llvm/trunk/lib/DebugInfo/DWARFUnit.cpp
> > URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/DebugInfo/DWARFUnit.cpp?rev=217128&r1=217127&r2=217128&view=diff
> >
> ==============================================================================
> > --- llvm/trunk/lib/DebugInfo/DWARFUnit.cpp (original)
> > +++ llvm/trunk/lib/DebugInfo/DWARFUnit.cpp Thu Sep  4 01:14:28 2014
> > @@ -17,12 +17,12 @@
> >  using namespace llvm;
> >  using namespace dwarf;
> >
> > -DWARFUnit::DWARFUnit(const DWARFDebugAbbrev *DA, StringRef IS,
> StringRef RS,
> > -                     StringRef SS, StringRef SOS, StringRef AOS,
> > -                     const RelocAddrMap *M, bool LE)
> > -    : Abbrev(DA), InfoSection(IS), RangeSection(RS), StringSection(SS),
> > -      StringOffsetSection(SOS), AddrOffsetSection(AOS), RelocMap(M),
> > -      isLittleEndian(LE) {
> > +DWARFUnit::DWARFUnit(DWARFContext &DC, const DWARFDebugAbbrev *DA,
> > +                     StringRef IS, StringRef RS, StringRef SS,
> StringRef SOS,
> > +                     StringRef AOS, const RelocAddrMap *M, bool LE)
> > +  : Context(DC), Abbrev(DA), InfoSection(IS), RangeSection(RS),
> > +    StringSection(SS), StringOffsetSection(SOS), AddrOffsetSection(AOS),
> > +    RelocMap(M), isLittleEndian(LE) {
> >    clear();
> >  }
> >
> >
> > Modified: llvm/trunk/lib/DebugInfo/DWARFUnit.h
> > URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/DebugInfo/DWARFUnit.h?rev=217128&r1=217127&r2=217128&view=diff
> >
> ==============================================================================
> > --- llvm/trunk/lib/DebugInfo/DWARFUnit.h (original)
> > +++ llvm/trunk/lib/DebugInfo/DWARFUnit.h Thu Sep  4 01:14:28 2014
> > @@ -22,11 +22,14 @@ namespace object {
> >  class ObjectFile;
> >  }
> >
> > +class DWARFContext;
> >  class DWARFDebugAbbrev;
> >  class StringRef;
> >  class raw_ostream;
> >
> >  class DWARFUnit {
> > +  DWARFContext &Context;
> > +
> >    const DWARFDebugAbbrev *Abbrev;
> >    StringRef InfoSection;
> >    StringRef RangeSection;
> > @@ -63,12 +66,14 @@ protected:
> >    virtual uint32_t getHeaderSize() const { return 11; }
> >
> >  public:
> > -  DWARFUnit(const DWARFDebugAbbrev *DA, StringRef IS, StringRef RS,
> > -            StringRef SS, StringRef SOS, StringRef AOS, const
> RelocAddrMap *M,
> > -            bool LE);
> > +  DWARFUnit(DWARFContext& Context, const DWARFDebugAbbrev *DA,
> StringRef IS,
> > +            StringRef RS, StringRef SS, StringRef SOS, StringRef AOS,
> > +            const RelocAddrMap *M, bool LE);
> >
> >    virtual ~DWARFUnit();
> >
> > +  DWARFContext& getContext() const { return Context; }
> > +
> >    StringRef getStringSection() const { return StringSection; }
> >    StringRef getStringOffsetSection() const { return
> StringOffsetSection; }
> >    void setAddrOffsetSection(StringRef AOS, uint32_t Base) {
> >
> >
> > _______________________________________________
> > llvm-commits mailing list
> > llvm-commits at cs.uiuc.edu
> > http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits
>
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20140904/1d73bccb/attachment.html>


More information about the llvm-commits mailing list