diff options
author | Fangrui Song <i@maskray.me> | 2023-07-14 12:44:41 -0700 |
---|---|---|
committer | Fangrui Song <i@maskray.me> | 2023-07-14 12:44:41 -0700 |
commit | 0af663f80da0009f6fd879cf4d41743d4c88a2db (patch) | |
tree | da617484204f75590d8fc2155d1959312f65c0b7 /llvm/tools/llvm-objdump/llvm-objdump.h | |
parent | 21ca892f698ac59e86ede6e4a2d4d747b0a36ae8 (diff) | |
download | llvm-0af663f80da0009f6fd879cf4d41743d4c88a2db.zip llvm-0af663f80da0009f6fd879cf4d41743d4c88a2db.tar.gz llvm-0af663f80da0009f6fd879cf4d41743d4c88a2db.tar.bz2 |
[llvm-objdump] Create ObjectFile specific dumpers
We pay the one-off boilerplate overhead to create `*Dumper` classes that derive
from objdump::Dumper a la llvm-readobj. This has two primary advantages.
First, a lot object file format specific code can be moved from
llvm-objdump.cpp to *Dump.cpp files. Refactor `printPrivateHeaders` as
an example.
Second, with the introduction of ELFDumper<ELFT>, we can simplify
a few dispatch functions in ELFDump.cpp.
In addition, the ObjectFile specific dumpers contains a ObjectFile specific
reference so that we can remove a lot of `cast<*ObjectFile>(Obj)`.
Reviewed By: mtrofin
Differential Revision: https://reviews.llvm.org/D155045
Diffstat (limited to 'llvm/tools/llvm-objdump/llvm-objdump.h')
-rw-r--r-- | llvm/tools/llvm-objdump/llvm-objdump.h | 15 |
1 files changed, 15 insertions, 0 deletions
diff --git a/llvm/tools/llvm-objdump/llvm-objdump.h b/llvm/tools/llvm-objdump/llvm-objdump.h index ffc1361..fd75f55 100644 --- a/llvm/tools/llvm-objdump/llvm-objdump.h +++ b/llvm/tools/llvm-objdump/llvm-objdump.h @@ -18,6 +18,7 @@ #include "llvm/Support/Compiler.h" #include "llvm/Support/DataTypes.h" #include "llvm/Support/FormattedStream.h" +#include <memory> namespace llvm { class StringRef; @@ -30,6 +31,12 @@ class Arg; namespace object { class RelocationRef; struct VersionEntry; + +class COFFObjectFile; +class ELFObjectFileBase; +class MachOObjectFile; +class WasmObjectFile; +class XCOFFObjectFile; } // namespace object namespace objdump { @@ -71,10 +78,12 @@ class Dumper { public: Dumper(const object::ObjectFile &O) : O(O) {} + virtual ~Dumper() {} void reportUniqueWarning(Error Err); void reportUniqueWarning(const Twine &Msg); + virtual void printPrivateHeaders(bool MachOOnlyFirst); void printSymbolTable(StringRef ArchiveName, StringRef ArchitectureName = StringRef(), bool DumpDynamic = false); @@ -85,6 +94,12 @@ public: void printRelocations(); }; +std::unique_ptr<Dumper> createCOFFDumper(const object::COFFObjectFile &Obj); +std::unique_ptr<Dumper> createELFDumper(const object::ELFObjectFileBase &Obj); +std::unique_ptr<Dumper> createMachODumper(const object::MachOObjectFile &Obj); +std::unique_ptr<Dumper> createWasmDumper(const object::WasmObjectFile &Obj); +std::unique_ptr<Dumper> createXCOFFDumper(const object::XCOFFObjectFile &Obj); + // Various helper functions. /// Creates a SectionFilter with a standard predicate that conditionally skips |