aboutsummaryrefslogtreecommitdiff
path: root/llvm/tools/llvm-readobj/llvm-readobj.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'llvm/tools/llvm-readobj/llvm-readobj.cpp')
-rw-r--r--llvm/tools/llvm-readobj/llvm-readobj.cpp49
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());
}