<html><head><meta http-equiv="Content-Type" content="text/html charset=utf-8"></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space;" class=""><br class=""><div><blockquote type="cite" class=""><div class="">On 04 Sep 2014, at 15:18, David Blaikie <<a href="mailto:dblaikie@gmail.com" class="">dblaikie@gmail.com</a>> wrote:</div><div class=""><p dir="ltr" class="">
On Sep 3, 2014 11:27 PM, "Frederic Riss" <<a href="mailto:friss@apple.com" class="">friss@apple.com</a>> wrote:<br class="">
><br class="">
> Author: friss<br class="">
> Date: Thu Sep  4 01:14:28 2014<br class="">
> New Revision: 217128<br class="">
><br class="">
> URL: <a href="http://llvm.org/viewvc/llvm-project?rev=217128&view=rev" class="">http://llvm.org/viewvc/llvm-project?rev=217128&view=rev</a><br class="">
> Log:<br class="">
> Add a DWARFContext& member in DWARFUnit.<br class="">
><br class="">
> The DWARFContext will be used to pass global 'context' down, like<br class="">
> pointers to related debug info sections or command line options.<br class="">
> The first use will be for the debug_info dumper to be able to access<br class="">
> other debug info section to dump eg. Location Expression inline<br class="">
> in the debug_info dump.</p><p dir="ltr" class="">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.</p></div></blockquote><div>For location expression dumping, it allows you to access the DebugLoc object for the file being processed. 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.</div><div><br class=""></div><div>The context will also be the natural place to put things like dumping options if we and up adding some.</div><blockquote type="cite" class=""><div class=""><p dir="ltr" class="">(I was expecting this to be used for stuff like low_pc rendering for example)</p></div></blockquote><div><br class=""></div>I have nothing planned for low_pc. What do you have in mind? Putting line information on these attributes?<br class=""><blockquote type="cite" class=""><div class=""><p dir="ltr" class="">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?</p><div class=""><br class=""></div></div></blockquote><div><br class=""></div><div>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.</div><div><br class=""></div><div>Fred</div><blockquote type="cite" class=""><div class=""><p dir="ltr" class="">
> Modified:<br class="">
>     llvm/trunk/lib/DebugInfo/DWARFCompileUnit.h<br class="">
>     llvm/trunk/lib/DebugInfo/DWARFContext.cpp<br class="">
>     llvm/trunk/lib/DebugInfo/DWARFTypeUnit.h<br class="">
>     llvm/trunk/lib/DebugInfo/DWARFUnit.cpp<br class="">
>     llvm/trunk/lib/DebugInfo/DWARFUnit.h<br class="">
><br class="">
> Modified: llvm/trunk/lib/DebugInfo/DWARFCompileUnit.h<br class="">
> URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/DebugInfo/DWARFCompileUnit.h?rev=217128&r1=217127&r2=217128&view=diff" class="">http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/DebugInfo/DWARFCompileUnit.h?rev=217128&r1=217127&r2=217128&view=diff</a><br class="">

> ==============================================================================<br class="">
> --- llvm/trunk/lib/DebugInfo/DWARFCompileUnit.h (original)<br class="">
> +++ llvm/trunk/lib/DebugInfo/DWARFCompileUnit.h Thu Sep  4 01:14:28 2014<br class="">
> @@ -16,10 +16,10 @@ namespace llvm {<br class="">
><br class="">
>  class DWARFCompileUnit : public DWARFUnit {<br class="">
>  public:<br class="">
> -  DWARFCompileUnit(const DWARFDebugAbbrev *DA, StringRef IS, StringRef RS,<br class="">
> -                   StringRef SS, StringRef SOS, StringRef AOS,<br class="">
> -                   const RelocAddrMap *M, bool LE)<br class="">
> -      : DWARFUnit(DA, IS, RS, SS, SOS, AOS, M, LE) {}<br class="">
> +  DWARFCompileUnit(DWARFContext& Context, const DWARFDebugAbbrev *DA,<br class="">
> +                   StringRef IS, StringRef RS, StringRef SS, StringRef SOS,<br class="">
> +                   StringRef AOS, const RelocAddrMap *M, bool LE)<br class="">
> +    : DWARFUnit(Context, DA, IS, RS, SS, SOS, AOS, M, LE) {}<br class="">
>    void dump(raw_ostream &OS);<br class="">
>    // VTable anchor.<br class="">
>    ~DWARFCompileUnit() override;<br class="">
><br class="">
> Modified: llvm/trunk/lib/DebugInfo/DWARFContext.cpp<br class="">
> URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/DebugInfo/DWARFContext.cpp?rev=217128&r1=217127&r2=217128&view=diff" class="">http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/DebugInfo/DWARFContext.cpp?rev=217128&r1=217127&r2=217128&view=diff</a><br class="">

> ==============================================================================<br class="">
> --- llvm/trunk/lib/DebugInfo/DWARFContext.cpp (original)<br class="">
> +++ llvm/trunk/lib/DebugInfo/DWARFContext.cpp Thu Sep  4 01:14:28 2014<br class="">
> @@ -318,7 +318,7 @@ void DWARFContext::parseCompileUnits() {<br class="">
>    const DataExtractor &DIData = DataExtractor(getInfoSection().Data,<br class="">
>                                                isLittleEndian(), 0);<br class="">
>    while (DIData.isValidOffset(offset)) {<br class="">
> -    std::unique_ptr<DWARFCompileUnit> CU(new DWARFCompileUnit(<br class="">
> +    std::unique_ptr<DWARFCompileUnit> CU(new DWARFCompileUnit(*this,<br class="">
>          getDebugAbbrev(), getInfoSection().Data, getRangeSection(),<br class="">
>          getStringSection(), StringRef(), getAddrSection(),<br class="">
>          &getInfoSection().Relocs, isLittleEndian()));<br class="">
> @@ -338,10 +338,10 @@ void DWARFContext::parseTypeUnits() {<br class="">
>      const DataExtractor &DIData =<br class="">
>          DataExtractor(I.second.Data, isLittleEndian(), 0);<br class="">
>      while (DIData.isValidOffset(offset)) {<br class="">
> -      std::unique_ptr<DWARFTypeUnit> TU(<br class="">
> -          new DWARFTypeUnit(getDebugAbbrev(), I.second.Data, getRangeSection(),<br class="">
> -                            getStringSection(), StringRef(), getAddrSection(),<br class="">
> -                            &I.second.Relocs, isLittleEndian()));<br class="">
> +      std::unique_ptr<DWARFTypeUnit> TU(new DWARFTypeUnit(*this,<br class="">
> +           getDebugAbbrev(), I.second.Data, getRangeSection(),<br class="">
> +           getStringSection(), StringRef(), getAddrSection(),<br class="">
> +           &I.second.Relocs, isLittleEndian()));<br class="">
>        if (!TU->extract(DIData, &offset))<br class="">
>          break;<br class="">
>        TUs.push_back(std::move(TU));<br class="">
> @@ -357,7 +357,7 @@ void DWARFContext::parseDWOCompileUnits(<br class="">
>    const DataExtractor &DIData =<br class="">
>        DataExtractor(getInfoDWOSection().Data, isLittleEndian(), 0);<br class="">
>    while (DIData.isValidOffset(offset)) {<br class="">
> -    std::unique_ptr<DWARFCompileUnit> DWOCU(new DWARFCompileUnit(<br class="">
> +    std::unique_ptr<DWARFCompileUnit> DWOCU(new DWARFCompileUnit(*this,<br class="">
>          getDebugAbbrevDWO(), getInfoDWOSection().Data, getRangeDWOSection(),<br class="">
>          getStringDWOSection(), getStringOffsetDWOSection(), getAddrSection(),<br class="">
>          &getInfoDWOSection().Relocs, isLittleEndian()));<br class="">
> @@ -377,7 +377,7 @@ void DWARFContext::parseDWOTypeUnits() {<br class="">
>      const DataExtractor &DIData =<br class="">
>          DataExtractor(I.second.Data, isLittleEndian(), 0);<br class="">
>      while (DIData.isValidOffset(offset)) {<br class="">
> -      std::unique_ptr<DWARFTypeUnit> TU(new DWARFTypeUnit(<br class="">
> +      std::unique_ptr<DWARFTypeUnit> TU(new DWARFTypeUnit(*this,<br class="">
>            getDebugAbbrevDWO(), I.second.Data, getRangeDWOSection(),<br class="">
>            getStringDWOSection(), getStringOffsetDWOSection(), getAddrSection(),<br class="">
>            &I.second.Relocs, isLittleEndian()));<br class="">
><br class="">
> Modified: llvm/trunk/lib/DebugInfo/DWARFTypeUnit.h<br class="">
> URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/DebugInfo/DWARFTypeUnit.h?rev=217128&r1=217127&r2=217128&view=diff" class="">http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/DebugInfo/DWARFTypeUnit.h?rev=217128&r1=217127&r2=217128&view=diff</a><br class="">

> ==============================================================================<br class="">
> --- llvm/trunk/lib/DebugInfo/DWARFTypeUnit.h (original)<br class="">
> +++ llvm/trunk/lib/DebugInfo/DWARFTypeUnit.h Thu Sep  4 01:14:28 2014<br class="">
> @@ -19,10 +19,10 @@ private:<br class="">
>    uint64_t TypeHash;<br class="">
>    uint32_t TypeOffset;<br class="">
>  public:<br class="">
> -  DWARFTypeUnit(const DWARFDebugAbbrev *DA, StringRef IS, StringRef RS,<br class="">
> -                StringRef SS, StringRef SOS, StringRef AOS,<br class="">
> -                const RelocAddrMap *M, bool LE)<br class="">
> -      : DWARFUnit(DA, IS, RS, SS, SOS, AOS, M, LE) {}<br class="">
> +  DWARFTypeUnit(DWARFContext &Context, const DWARFDebugAbbrev *DA,<br class="">
> +                StringRef IS, StringRef RS, StringRef SS, StringRef SOS,<br class="">
> +                StringRef AOS, const RelocAddrMap *M, bool LE)<br class="">
> +    : DWARFUnit(Context, DA, IS, RS, SS, SOS, AOS, M, LE) {}<br class="">
>    uint32_t getHeaderSize() const override {<br class="">
>      return DWARFUnit::getHeaderSize() + 12;<br class="">
>    }<br class="">
><br class="">
> Modified: llvm/trunk/lib/DebugInfo/DWARFUnit.cpp<br class="">
> URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/DebugInfo/DWARFUnit.cpp?rev=217128&r1=217127&r2=217128&view=diff" class="">http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/DebugInfo/DWARFUnit.cpp?rev=217128&r1=217127&r2=217128&view=diff</a><br class="">

> ==============================================================================<br class="">
> --- llvm/trunk/lib/DebugInfo/DWARFUnit.cpp (original)<br class="">
> +++ llvm/trunk/lib/DebugInfo/DWARFUnit.cpp Thu Sep  4 01:14:28 2014<br class="">
> @@ -17,12 +17,12 @@<br class="">
>  using namespace llvm;<br class="">
>  using namespace dwarf;<br class="">
><br class="">
> -DWARFUnit::DWARFUnit(const DWARFDebugAbbrev *DA, StringRef IS, StringRef RS,<br class="">
> -                     StringRef SS, StringRef SOS, StringRef AOS,<br class="">
> -                     const RelocAddrMap *M, bool LE)<br class="">
> -    : Abbrev(DA), InfoSection(IS), RangeSection(RS), StringSection(SS),<br class="">
> -      StringOffsetSection(SOS), AddrOffsetSection(AOS), RelocMap(M),<br class="">
> -      isLittleEndian(LE) {<br class="">
> +DWARFUnit::DWARFUnit(DWARFContext &DC, const DWARFDebugAbbrev *DA,<br class="">
> +                     StringRef IS, StringRef RS, StringRef SS, StringRef SOS,<br class="">
> +                     StringRef AOS, const RelocAddrMap *M, bool LE)<br class="">
> +  : Context(DC), Abbrev(DA), InfoSection(IS), RangeSection(RS),<br class="">
> +    StringSection(SS), StringOffsetSection(SOS), AddrOffsetSection(AOS),<br class="">
> +    RelocMap(M), isLittleEndian(LE) {<br class="">
>    clear();<br class="">
>  }<br class="">
><br class="">
><br class="">
> Modified: llvm/trunk/lib/DebugInfo/DWARFUnit.h<br class="">
> URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/DebugInfo/DWARFUnit.h?rev=217128&r1=217127&r2=217128&view=diff" class="">http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/DebugInfo/DWARFUnit.h?rev=217128&r1=217127&r2=217128&view=diff</a><br class="">

> ==============================================================================<br class="">
> --- llvm/trunk/lib/DebugInfo/DWARFUnit.h (original)<br class="">
> +++ llvm/trunk/lib/DebugInfo/DWARFUnit.h Thu Sep  4 01:14:28 2014<br class="">
> @@ -22,11 +22,14 @@ namespace object {<br class="">
>  class ObjectFile;<br class="">
>  }<br class="">
><br class="">
> +class DWARFContext;<br class="">
>  class DWARFDebugAbbrev;<br class="">
>  class StringRef;<br class="">
>  class raw_ostream;<br class="">
><br class="">
>  class DWARFUnit {<br class="">
> +  DWARFContext &Context;<br class="">
> +<br class="">
>    const DWARFDebugAbbrev *Abbrev;<br class="">
>    StringRef InfoSection;<br class="">
>    StringRef RangeSection;<br class="">
> @@ -63,12 +66,14 @@ protected:<br class="">
>    virtual uint32_t getHeaderSize() const { return 11; }<br class="">
><br class="">
>  public:<br class="">
> -  DWARFUnit(const DWARFDebugAbbrev *DA, StringRef IS, StringRef RS,<br class="">
> -            StringRef SS, StringRef SOS, StringRef AOS, const RelocAddrMap *M,<br class="">
> -            bool LE);<br class="">
> +  DWARFUnit(DWARFContext& Context, const DWARFDebugAbbrev *DA, StringRef IS,<br class="">
> +            StringRef RS, StringRef SS, StringRef SOS, StringRef AOS,<br class="">
> +            const RelocAddrMap *M, bool LE);<br class="">
><br class="">
>    virtual ~DWARFUnit();<br class="">
><br class="">
> +  DWARFContext& getContext() const { return Context; }<br class="">
> +<br class="">
>    StringRef getStringSection() const { return StringSection; }<br class="">
>    StringRef getStringOffsetSection() const { return StringOffsetSection; }<br class="">
>    void setAddrOffsetSection(StringRef AOS, uint32_t Base) {<br class="">
><br class="">
><br class="">
> _______________________________________________<br class="">
> llvm-commits mailing list<br class="">
> <a href="mailto:llvm-commits@cs.uiuc.edu" class="">llvm-commits@cs.uiuc.edu</a><br class="">
> <a href="http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits" class="">http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits</a><br class="">
</p>
</div></blockquote></div><br class=""></body></html>