1 //===-- ObjDumper.h ---------------------------------------------*- C++ -*-===//
3 // The LLVM Compiler Infrastructure
5 // This file is distributed under the University of Illinois Open Source
6 // License. See LICENSE.TXT for details.
8 //===----------------------------------------------------------------------===//
10 #ifndef LLVM_TOOLS_LLVM_READOBJ_OBJDUMPER_H
11 #define LLVM_TOOLS_LLVM_READOBJ_OBJDUMPER_H
14 #include <system_error>
16 #include "llvm/ADT/StringRef.h"
17 #include "llvm/Object/ObjectFile.h"
25 class MergingTypeTableBuilder
;
32 ObjDumper(ScopedPrinter
&Writer
);
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() { }
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
);
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
);