bool AppleAcceleratorTable::dumpName(ScopedPrinter &W, SmallVectorImpl<DWARFFormValue> &AtomForms, uint32_t *DataOffset) const { DWARFFormParams FormParams = {Hdr.Version, 0, dwarf::DwarfFormat::DWARF32}; uint32_t NameOffset = *DataOffset; if (!AccelSection.isValidOffsetForDataOfSize(*DataOffset, 4)) { W.printString("Incorrectly terminated list."); return false; } unsigned StringOffset = AccelSection.getRelocatedValue(4, DataOffset); if (!StringOffset) return false; // End of list DictScope NameScope(W, ("Name@0x" + Twine::utohexstr(NameOffset)).str()); W.startLine() << format("String: 0x%08x", StringOffset); W.getOStream() << " \"" << StringSection.getCStr(&StringOffset) << "\"\n"; unsigned NumData = AccelSection.getU32(DataOffset); for (unsigned Data = 0; Data < NumData; ++Data) { ListScope DataScope(W, ("Data " + Twine(Data)).str()); unsigned i = 0; for (auto &Atom : AtomForms) { W.startLine() << format("Atom[%d]: ", i++); if (Atom.extractValue(AccelSection, DataOffset, FormParams)) Atom.dump(W.getOStream()); else W.getOStream() << "Error extracting the value"; W.getOStream() << "\n"; } } return true; // more entries follow }
void DWARFDebugNames::Entry::dump(ScopedPrinter &W) const { W.printHex("Abbrev", Abbr->Code); W.startLine() << formatv("Tag: {0}\n", Abbr->Tag); assert(Abbr->Attributes.size() == Values.size()); for (const auto &Tuple : zip_first(Abbr->Attributes, Values)) { W.startLine() << formatv("{0}: ", std::get<0>(Tuple).Index); std::get<1>(Tuple).dump(W.getOStream()); W.getOStream() << '\n'; } }
void DWARFDebugNames::NameIndex::dumpName(ScopedPrinter &W, const NameTableEntry &NTE, Optional<uint32_t> Hash) const { DictScope NameScope(W, ("Name " + Twine(NTE.getIndex())).str()); if (Hash) W.printHex("Hash", *Hash); W.startLine() << format("String: 0x%08x", NTE.getStringOffset()); W.getOStream() << " \"" << NTE.getString() << "\"\n"; uint32_t EntryOffset = NTE.getEntryOffset(); while (dumpEntry(W, &EntryOffset)) /*empty*/; }
void DWARFDebugNames::NameIndex::dumpName(ScopedPrinter &W, uint32_t Index, Optional<uint32_t> Hash) const { const DataExtractor &SS = Section.StringSection; NameTableEntry NTE = getNameTableEntry(Index); DictScope NameScope(W, ("Name " + Twine(Index)).str()); if (Hash) W.printHex("Hash", *Hash); W.startLine() << format("String: 0x%08x", NTE.StringOffset); W.getOStream() << " \"" << SS.getCStr(&NTE.StringOffset) << "\"\n"; while (dumpEntry(W, &NTE.EntryOffset)) /*empty*/; }