diff options
Diffstat (limited to 'llvm/tools/llvm-readobj/llvm-readobj.cpp')
-rw-r--r-- | llvm/tools/llvm-readobj/llvm-readobj.cpp | 49 |
1 files changed, 23 insertions, 26 deletions
diff --git a/llvm/tools/llvm-readobj/llvm-readobj.cpp b/llvm/tools/llvm-readobj/llvm-readobj.cpp index 46862bb..a598e2c 100644 --- a/llvm/tools/llvm-readobj/llvm-readobj.cpp +++ b/llvm/tools/llvm-readobj/llvm-readobj.cpp @@ -99,7 +99,6 @@ static bool DynamicSymbols; static bool FileHeaders; static bool Headers; static std::vector<std::string> HexDump; -static bool PrettyPrint; static bool PrintStackMap; static bool PrintStackSizes; static bool Relocations; @@ -231,17 +230,13 @@ static void parseOptions(const opt::InputArgList &Args) { opts::DynamicTable = Args.hasArg(OPT_dynamic_table); opts::ELFLinkerOptions = Args.hasArg(OPT_elf_linker_options); if (Arg *A = Args.getLastArg(OPT_elf_output_style_EQ)) { - std::string OutputStyleChoice = A->getValue(); - opts::Output = StringSwitch<opts::OutputStyleTy>(OutputStyleChoice) - .Case("LLVM", opts::OutputStyleTy::LLVM) - .Case("GNU", opts::OutputStyleTy::GNU) - .Case("JSON", opts::OutputStyleTy::JSON) - .Default(opts::OutputStyleTy::UNKNOWN); - if (opts::Output == opts::OutputStyleTy::UNKNOWN) { - error("--elf-output-style value should be either 'LLVM', 'GNU', or " - "'JSON', but was '" + - OutputStyleChoice + "'"); - } + StringRef V(A->getValue()); + if (V == "LLVM") + opts::Output = opts::OutputStyleTy::LLVM; + else if (V == "GNU") + opts::Output = opts::OutputStyleTy::GNU; + else + error("--elf-output-style value should be either 'LLVM' or 'GNU'"); } opts::GnuHashTable = Args.hasArg(OPT_gnu_hash_table); opts::HashSymbols = Args.hasArg(OPT_hash_symbols); @@ -249,7 +244,6 @@ static void parseOptions(const opt::InputArgList &Args) { opts::HashHistogram = Args.hasArg(OPT_histogram); opts::NeededLibraries = Args.hasArg(OPT_needed_libs); opts::Notes = Args.hasArg(OPT_notes); - opts::PrettyPrint = Args.hasArg(OPT_pretty_print); opts::ProgramHeaders = Args.hasArg(OPT_program_headers); opts::RawRelr = Args.hasArg(OPT_raw_relr); opts::SectionGroups = Args.hasArg(OPT_section_groups); @@ -339,7 +333,18 @@ static void dumpObject(ObjectFile &Obj, ScopedPrinter &Writer, reportError(DumperOrErr.takeError(), FileStr); Dumper = (*DumperOrErr).get(); - Dumper->printFileSummary(FileStr, Obj, opts::InputFilenames, A); + if (opts::Output == opts::LLVM || opts::InputFilenames.size() > 1 || A) { + Writer.startLine() << "\n"; + Writer.printString("File", FileStr); + } + if (opts::Output == opts::LLVM) { + Writer.printString("Format", Obj.getFileFormatName()); + Writer.printString("Arch", Triple::getArchTypeName(Obj.getArch())); + Writer.printString( + "AddressSize", + std::string(formatv("{0}bit", 8 * Obj.getBytesInAddress()))); + Dumper->printLoadName(); + } if (opts::FileHeaders) Dumper->printFileHeaders(); @@ -545,13 +550,6 @@ static void dumpInput(StringRef File, ScopedPrinter &Writer) { OwningBinary<Binary>(std::move(Bin), std::move(Buffer))); } -std::unique_ptr<ScopedPrinter> createWriter() { - if (opts::Output == opts::JSON) - return std::make_unique<JSONScopedPrinter>( - fouts(), opts::PrettyPrint ? 2 : 0, std::make_unique<ListScope>()); - return std::make_unique<ScopedPrinter>(fouts()); -} - int main(int argc, char *argv[]) { InitLLVM X(argc, argv); BumpPtrAllocator A; @@ -612,17 +610,16 @@ int main(int argc, char *argv[]) { opts::SectionHeaders = true; } - std::unique_ptr<ScopedPrinter> Writer = createWriter(); - + ScopedPrinter Writer(fouts()); for (const std::string &I : opts::InputFilenames) - dumpInput(I, *Writer.get()); + dumpInput(I, Writer); if (opts::CodeViewMergedTypes) { if (opts::CodeViewEnableGHash) - dumpCodeViewMergedTypes(*Writer.get(), CVTypes.GlobalIDTable.records(), + dumpCodeViewMergedTypes(Writer, CVTypes.GlobalIDTable.records(), CVTypes.GlobalTypeTable.records()); else - dumpCodeViewMergedTypes(*Writer.get(), CVTypes.IDTable.records(), + dumpCodeViewMergedTypes(Writer, CVTypes.IDTable.records(), CVTypes.TypeTable.records()); } |