<html><head>
<meta http-equiv="Content-Type" content="text/html; charset=us-ascii"></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space; color: rgb(0, 0, 0); font-size: 14px; font-family: Calibri, sans-serif; "><div>I hit an infinite loop in DWARFDebugInfoEntry::FastExtract when consuming some of our sym files containing <span class="Apple-style-span" style="font-family: Calibri; ">DW_FORM_indirect attribute forms.  In fixing the problem, I saw DWARFDebugInfoEntry::Extract which does pretty much the same thing (and did not have the bug).  But looking at the call graph, it doesn't look like Extract is called, at least not by any functions that are called themselves (see call graph at the bottom).  It's basically used by Dump and Verify and helpers for those methods.</span></div><div><span class="Apple-style-span" style="font-family: Calibri; "><br></span></div><div><span class="Apple-style-span" style="font-family: Calibri; ">So the question is, should I get rid of Extract and change everything to use FastExtract, or just fix the problem in FastExtract and leave everything else be?</span></div><div><span class="Apple-style-span" style="font-family: Calibri; "><br></span></div><div><span class="Apple-style-span" style="font-family: Calibri; ">Thanks,</span></div><div><span class="Apple-style-span" style="font-family: Calibri; ">Warren</span></div><div><span class="Apple-style-span" style="font-family: Calibri; "><br></span></div><div><span class="Apple-style-span" style="font-family: Calibri; "><br></span></div><div><span class="Apple-style-span" style="font-family: Calibri; "><br></span></div><div><span class="Apple-style-span" style="font-family: Calibri; "><div><div>DWARFDebugInfoEntry::Extract(SymbolFileDWARF *, const DWARFCompileUnit *, dw_offset_t *)</div><div><span class="Apple-tab-span" style="white-space:pre">     </span>DWARFDebugInfo::Parse(SymbolFileDWARF *, Callback, void *)</div><div><span class="Apple-tab-span" style="white-space:pre">           </span>DWARFDebugInfo::Dump(lldb_private::Stream *, SymbolFileDWARF *, unsigned int, unsigned int)</div><div><span class="Apple-tab-span" style="white-space:pre">          </span>DWARFDebugInfo::Find(const char *, bool, std::vector<unsigned int,std::allocator<unsigned int>> &)</div><div><span class="Apple-tab-span" style="white-space:pre">           </span>DWARFDebugInfo::Find(lldb_private::RegularExpression &, std::vector<unsigned int,std::allocator<unsigned int>> &)</div><div><span class="Apple-tab-span" style="white-space:pre">                </span>DWARFDebugInfo::Verify(lldb_private::Stream *, SymbolFileDWARF *)</div><div><span class="Apple-tab-span" style="white-space:pre">    </span>DWARFDebugInfoEntry::AppendTypeName(SymbolFileDWARF *, const DWARFCompileUnit *, unsigned int, lldb_private::Stream *)</div><div><span class="Apple-tab-span" style="white-space:pre">               </span>DWARFDebugInfoEntry::AppendTypeName(SymbolFileDWARF *, const DWARFCompileUnit *, unsigned int, lldb_private::Stream *)</div><div><span class="Apple-tab-span" style="white-space:pre">               </span>DWARFDebugInfoEntry::DumpAttribute(SymbolFileDWARF *, const DWARFCompileUnit *, const lldb_private::DataExtractor &, uint32_t *, lldb_private::Stream *, dw_attr_t, dw_form_t)</div><div><span class="Apple-tab-span" style="white-space:pre">                   </span>DWARFDebugInfoEntry::Dump(SymbolFileDWARF *, const DWARFCompileUnit *, lldb_private::Stream *, uint32_t)</div><div><span class="Apple-tab-span" style="white-space:pre">                             </span>DumpCallback(SymbolFileDWARF *, DWARFCompileUnitSP &, DWARFDebugInfoEntry *, unsigned int, unsigned int, void *) (4 matches)</div><div><span class="Apple-tab-span" style="white-space:pre">                                     </span>DWARFDebugInfo::Dump(lldb_private::Stream *, SymbolFileDWARF *, unsigned int, unsigned int)</div><div><span class="Apple-tab-span" style="white-space:pre">                                  </span>DWARFDebugInfo::Dump(lldb_private::Stream *, unsigned int, unsigned int)</div><div><span class="Apple-tab-span" style="white-space:pre">                             </span>DWARFDebugInfo::Dump(lldb_private::Stream *, unsigned int, unsigned int)</div><div><span class="Apple-tab-span" style="white-space:pre">                             </span>DWARFDebugInfoEntry::Dump(SymbolFileDWARF *, const DWARFCompileUnit *, lldb_private::Stream *, uint32_t)</div><div><span class="Apple-tab-span" style="white-space:pre">                             </span>DWARFDebugInfoEntry::DumpAncestry(SymbolFileDWARF *, const DWARFCompileUnit *, const DWARFDebugInfoEntry *, lldb_private::Stream *, uint32_t)</div><div><span class="Apple-tab-span" style="white-space:pre">                                        </span>DWARFDebugInfoEntry::DumpAncestry(SymbolFileDWARF *, const DWARFCompileUnit *, const DWARFDebugInfoEntry *, lldb_private::Stream *, uint32_t)</div><div><span class="Apple-tab-span" style="white-space:pre">        </span>DWARFDebugInfoEntry::GetName(SymbolFileDWARF *, const DWARFCompileUnit *, unsigned int, lldb_private::Stream *)</div><div><span class="Apple-tab-span" style="white-space:pre">              </span>DWARFDebugInfoEntry::DumpAttribute(SymbolFileDWARF *, const DWARFCompileUnit *, const lldb_private::DataExtractor &, uint32_t *, lldb_private::Stream *, dw_attr_t, dw_form_t)</div><div><span class="Apple-tab-span" style="white-space:pre">                   </span>DWARFDebugInfoEntry::Dump(SymbolFileDWARF *, const DWARFCompileUnit *, lldb_private::Stream *, uint32_t)</div><div><span class="Apple-tab-span" style="white-space:pre">                             </span>DumpCallback(SymbolFileDWARF *, DWARFCompileUnitSP &, DWARFDebugInfoEntry *, unsigned int, unsigned int, void *) (4 matches)</div><div><span class="Apple-tab-span" style="white-space:pre">                                     </span>DWARFDebugInfo::Dump(lldb_private::Stream *, SymbolFileDWARF *, unsigned int, unsigned int)</div><div><span class="Apple-tab-span" style="white-space:pre">                                  </span>DWARFDebugInfo::Dump(lldb_private::Stream *, unsigned int, unsigned int)</div><div><span class="Apple-tab-span" style="white-space:pre">                             </span>DWARFDebugInfo::Dump(lldb_private::Stream *, unsigned int, unsigned int)</div><div><span class="Apple-tab-span" style="white-space:pre">                             </span>DWARFDebugInfoEntry::Dump(SymbolFileDWARF *, const DWARFCompileUnit *, lldb_private::Stream *, uint32_t)</div><div><span class="Apple-tab-span" style="white-space:pre">                             </span>DWARFDebugInfoEntry::DumpAncestry(SymbolFileDWARF *, const DWARFCompileUnit *, const DWARFDebugInfoEntry *, lldb_private::Stream *, uint32_t)</div><div><span class="Apple-tab-span" style="white-space:pre">                                        </span>DWARFDebugInfoEntry::DumpAncestry(SymbolFileDWARF *, const DWARFCompileUnit *, const DWARFDebugInfoEntry *, lldb_private::Stream *, uint32_t)</div></div></span></div></body></html>