[llvm-exegesis][NFC] Pass Instruction instead of bare Opcode
[llvm-core.git] / tools / llvm-readobj / ObjDumper.h
blob8c3a7bec73be4c210c984c7c490c0dfcea6c4703
1 //===-- ObjDumper.h ---------------------------------------------*- C++ -*-===//
2 //
3 // The LLVM Compiler Infrastructure
4 //
5 // This file is distributed under the University of Illinois Open Source
6 // License. See LICENSE.TXT for details.
7 //
8 //===----------------------------------------------------------------------===//
10 #ifndef LLVM_TOOLS_LLVM_READOBJ_OBJDUMPER_H
11 #define LLVM_TOOLS_LLVM_READOBJ_OBJDUMPER_H
13 #include <memory>
14 #include <system_error>
16 #include "llvm/ADT/StringRef.h"
17 #include "llvm/Object/ObjectFile.h"
19 namespace llvm {
20 namespace object {
21 class COFFImportFile;
22 class ObjectFile;
24 namespace codeview {
25 class MergingTypeTableBuilder;
28 class ScopedPrinter;
30 class ObjDumper {
31 public:
32 ObjDumper(ScopedPrinter &Writer);
33 virtual ~ObjDumper();
35 virtual void printFileHeaders() = 0;
36 virtual void printSections() = 0;
37 virtual void printRelocations() = 0;
38 virtual void printSymbols() = 0;
39 virtual void printDynamicSymbols() = 0;
40 virtual void printUnwindInfo() = 0;
42 // Only implemented for ELF at this time.
43 virtual void printDynamicRelocations() { }
44 virtual void printDynamicTable() { }
45 virtual void printNeededLibraries() { }
46 virtual void printProgramHeaders() { }
47 virtual void printSectionAsHex(StringRef SectionName) {}
48 virtual void printHashTable() { }
49 virtual void printGnuHashTable() { }
50 virtual void printLoadName() {}
51 virtual void printVersionInfo() {}
52 virtual void printGroupSections() {}
53 virtual void printHashHistogram() {}
54 virtual void printCGProfile() {}
55 virtual void printAddrsig() {}
56 virtual void printNotes() {}
57 virtual void printELFLinkerOptions() {}
59 // Only implemented for ARM ELF at this time.
60 virtual void printAttributes() { }
62 // Only implemented for MIPS ELF at this time.
63 virtual void printMipsPLTGOT() { }
64 virtual void printMipsABIFlags() { }
65 virtual void printMipsReginfo() { }
66 virtual void printMipsOptions() { }
68 // Only implemented for PE/COFF.
69 virtual void printCOFFImports() { }
70 virtual void printCOFFExports() { }
71 virtual void printCOFFDirectives() { }
72 virtual void printCOFFBaseReloc() { }
73 virtual void printCOFFDebugDirectory() { }
74 virtual void printCOFFResources() {}
75 virtual void printCOFFLoadConfig() { }
76 virtual void printCodeViewDebugInfo() { }
77 virtual void
78 mergeCodeViewTypes(llvm::codeview::MergingTypeTableBuilder &CVIDs,
79 llvm::codeview::MergingTypeTableBuilder &CVTypes) {}
81 // Only implemented for MachO.
82 virtual void printMachODataInCode() { }
83 virtual void printMachOVersionMin() { }
84 virtual void printMachODysymtab() { }
85 virtual void printMachOSegment() { }
86 virtual void printMachOIndirectSymbols() { }
87 virtual void printMachOLinkerOptions() { }
89 virtual void printStackMap() const = 0;
91 void printSectionAsString(const object::ObjectFile *Obj, StringRef SecName);
92 void printSectionAsHex(const object::ObjectFile *Obj, StringRef SecName);
94 protected:
95 ScopedPrinter &W;
98 std::error_code createCOFFDumper(const object::ObjectFile *Obj,
99 ScopedPrinter &Writer,
100 std::unique_ptr<ObjDumper> &Result);
102 std::error_code createELFDumper(const object::ObjectFile *Obj,
103 ScopedPrinter &Writer,
104 std::unique_ptr<ObjDumper> &Result);
106 std::error_code createMachODumper(const object::ObjectFile *Obj,
107 ScopedPrinter &Writer,
108 std::unique_ptr<ObjDumper> &Result);
110 std::error_code createWasmDumper(const object::ObjectFile *Obj,
111 ScopedPrinter &Writer,
112 std::unique_ptr<ObjDumper> &Result);
114 void dumpCOFFImportFile(const object::COFFImportFile *File,
115 ScopedPrinter &Writer);
117 void dumpCodeViewMergedTypes(
118 ScopedPrinter &Writer, llvm::codeview::MergingTypeTableBuilder &IDTable,
119 llvm::codeview::MergingTypeTableBuilder &TypeTable);
121 } // namespace llvm
123 #endif