<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>