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 }
static void dumpNamedStream(ScopedPrinter &P, PDBFile &File, StringRef Stream) { InfoStream &IS = File.getPDBInfoStream(); uint32_t NameStreamIndex = IS.getNamedStreamIndex(Stream); if (NameStreamIndex != 0) { std::string Name("Stream '"); Name += Stream; Name += "'"; DictScope D(P, Name); P.printNumber("Index", NameStreamIndex); MappedBlockStream NameStream(NameStreamIndex, File); StreamReader Reader(NameStream); NameHashTable NameTable; NameTable.load(Reader); P.printHex("Signature", NameTable.getSignature()); P.printNumber("Version", NameTable.getHashVersion()); P.printNumber("Name Count", NameTable.getNameCount()); ListScope L(P, "Names"); for (uint32_t ID : NameTable.name_ids()) { StringRef Str = NameTable.getStringForID(ID); if (!Str.empty()) P.printString(Str); } } }
static void dumpDbiStream(ScopedPrinter &P, PDBFile &File) { DbiStream &DS = File.getPDBDbiStream(); DictScope D(P, "DBI Stream"); P.printNumber("Dbi Version", DS.getDbiVersion()); P.printNumber("Age", DS.getAge()); P.printBoolean("Incremental Linking", DS.isIncrementallyLinked()); P.printBoolean("Has CTypes", DS.hasCTypes()); P.printBoolean("Is Stripped", DS.isStripped()); P.printObject("Machine Type", DS.getMachineType()); P.printNumber("Number of Symbols", DS.getNumberOfSymbols()); uint16_t Major = DS.getBuildMajorVersion(); uint16_t Minor = DS.getBuildMinorVersion(); P.printVersion("Toolchain Version", Major, Minor); std::string DllName; raw_string_ostream DllStream(DllName); DllStream << "mspdb" << Major << Minor << ".dll version"; DllStream.flush(); P.printVersion(DllName, Major, Minor, DS.getPdbDllVersion()); ListScope L(P, "Modules"); for (auto &Modi : DS.modules()) { DictScope DD(P); P.printString("Name", Modi.Info.getModuleName()); P.printNumber("Debug Stream Index", Modi.Info.getModuleStreamIndex()); P.printString("Object File Name", Modi.Info.getObjFileName()); P.printNumber("Num Files", Modi.Info.getNumberOfFiles()); P.printNumber("Source File Name Idx", Modi.Info.getSourceFileNameIndex()); P.printNumber("Pdb File Name Idx", Modi.Info.getPdbFilePathNameIndex()); P.printNumber("Line Info Byte Size", Modi.Info.getLineInfoByteSize()); P.printNumber("C13 Line Info Byte Size", Modi.Info.getC13LineInfoByteSize()); P.printNumber("Symbol Byte Size", Modi.Info.getSymbolDebugInfoByteSize()); P.printNumber("Type Server Index", Modi.Info.getTypeServerIndex()); P.printBoolean("Has EC Info", Modi.Info.hasECInfo()); std::string FileListName = to_string(Modi.SourceFiles.size()) + " Contributing Source Files"; ListScope LL(P, FileListName); for (auto File : Modi.SourceFiles) P.printString(File); } }
void DWARFDebugNames::NameIndex::dumpBucket(ScopedPrinter &W, uint32_t Bucket) const { ListScope BucketScope(W, ("Bucket " + Twine(Bucket)).str()); uint32_t Index = getBucketArrayEntry(Bucket); if (Index == 0) { W.printString("EMPTY"); return; } if (Index > Hdr.NameCount) { W.printString("Name index is invalid"); return; } for (; Index <= Hdr.NameCount; ++Index) { uint32_t Hash = getHashArrayEntry(Index); if (Hash % Hdr.BucketCount != Bucket) break; dumpName(W, Index, Hash); } }
/// Dumps the specified object file. static void dumpObject(const ObjectFile *Obj, ScopedPrinter &Writer) { std::unique_ptr<ObjDumper> Dumper; if (std::error_code EC = createDumper(Obj, Writer, Dumper)) reportError(Obj->getFileName(), EC); if (opts::Output == opts::LLVM) { Writer.startLine() << "\n"; Writer.printString("File", Obj->getFileName()); Writer.printString("Format", Obj->getFileFormatName()); Writer.printString("Arch", Triple::getArchTypeName( (llvm::Triple::ArchType)Obj->getArch())); Writer.printString("AddressSize", formatv("{0}bit", 8 * Obj->getBytesInAddress())); Dumper->printLoadName(); } if (opts::FileHeaders) Dumper->printFileHeaders(); if (opts::SectionHeaders) Dumper->printSectionHeaders(); if (opts::Relocations) Dumper->printRelocations(); if (opts::DynRelocs) Dumper->printDynamicRelocations(); if (opts::Symbols || opts::DynamicSymbols) Dumper->printSymbols(opts::Symbols, opts::DynamicSymbols); if (opts::HashSymbols) Dumper->printHashSymbols(); if (opts::UnwindInfo) Dumper->printUnwindInfo(); if (opts::DynamicTable) Dumper->printDynamicTable(); if (opts::NeededLibraries) Dumper->printNeededLibraries(); if (opts::ProgramHeaders || opts::SectionMapping == cl::BOU_TRUE) Dumper->printProgramHeaders(opts::ProgramHeaders, opts::SectionMapping); if (!opts::StringDump.empty()) llvm::for_each(opts::StringDump, [&Dumper, Obj](StringRef SectionName) { Dumper->printSectionAsString(Obj, SectionName); }); if (!opts::HexDump.empty()) llvm::for_each(opts::HexDump, [&Dumper, Obj](StringRef SectionName) { Dumper->printSectionAsHex(Obj, SectionName); }); if (opts::HashTable) Dumper->printHashTable(); if (opts::GnuHashTable) Dumper->printGnuHashTable(); if (opts::VersionInfo) Dumper->printVersionInfo(); if (Obj->isELF()) { if (opts::ELFLinkerOptions) Dumper->printELFLinkerOptions(); if (Obj->getArch() == llvm::Triple::arm) if (opts::ARMAttributes) Dumper->printAttributes(); if (isMipsArch(Obj->getArch())) { if (opts::MipsPLTGOT) Dumper->printMipsPLTGOT(); if (opts::MipsABIFlags) Dumper->printMipsABIFlags(); if (opts::MipsReginfo) Dumper->printMipsReginfo(); if (opts::MipsOptions) Dumper->printMipsOptions(); } if (opts::SectionGroups) Dumper->printGroupSections(); if (opts::HashHistogram) Dumper->printHashHistogram(); if (opts::CGProfile) Dumper->printCGProfile(); if (opts::Addrsig) Dumper->printAddrsig(); if (opts::Notes) Dumper->printNotes(); } if (Obj->isCOFF()) { if (opts::COFFImports) Dumper->printCOFFImports(); if (opts::COFFExports) Dumper->printCOFFExports(); if (opts::COFFDirectives) Dumper->printCOFFDirectives(); if (opts::COFFBaseRelocs) Dumper->printCOFFBaseReloc(); if (opts::COFFDebugDirectory) Dumper->printCOFFDebugDirectory(); if (opts::COFFResources) Dumper->printCOFFResources(); if (opts::COFFLoadConfig) Dumper->printCOFFLoadConfig(); if (opts::Addrsig) Dumper->printAddrsig(); if (opts::CodeView) Dumper->printCodeViewDebugInfo(); if (opts::CodeViewMergedTypes) Dumper->mergeCodeViewTypes(CVTypes.IDTable, CVTypes.TypeTable, CVTypes.GlobalIDTable, CVTypes.GlobalTypeTable, opts::CodeViewEnableGHash); } if (Obj->isMachO()) { if (opts::MachODataInCode) Dumper->printMachODataInCode(); if (opts::MachOIndirectSymbols) Dumper->printMachOIndirectSymbols(); if (opts::MachOLinkerOptions) Dumper->printMachOLinkerOptions(); if (opts::MachOSegment) Dumper->printMachOSegment(); if (opts::MachOVersionMin) Dumper->printMachOVersionMin(); if (opts::MachODysymtab) Dumper->printMachODysymtab(); } if (opts::PrintStackMap) Dumper->printStackMap(); }