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"
24 class MergingTypeTableBuilder;
31 ObjDumper(ScopedPrinter &Writer);
34 virtual void printFileHeaders() = 0;
35 virtual void printSections() = 0;
36 virtual void printRelocations() = 0;
37 virtual void printSymbols() = 0;
38 virtual void printDynamicSymbols() = 0;
39 virtual void printUnwindInfo() = 0;
41 // Only implemented for ELF at this time.
42 virtual void printDynamicRelocations() { }
43 virtual void printDynamicTable() { }
44 virtual void printNeededLibraries() { }
45 virtual void printProgramHeaders() { }
46 virtual void printSectionAsString(StringRef SectionName) {}
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 printNotes() {}
56 virtual void printELFLinkerOptions() {}
58 // Only implemented for ARM ELF at this time.
59 virtual void printAttributes() { }
61 // Only implemented for MIPS ELF at this time.
62 virtual void printMipsPLTGOT() { }
63 virtual void printMipsABIFlags() { }
64 virtual void printMipsReginfo() { }
65 virtual void printMipsOptions() { }
67 // Only implemented for PE/COFF.
68 virtual void printCOFFImports() { }
69 virtual void printCOFFExports() { }
70 virtual void printCOFFDirectives() { }
71 virtual void printCOFFBaseReloc() { }
72 virtual void printCOFFDebugDirectory() { }
73 virtual void printCOFFResources() {}
74 virtual void printCOFFLoadConfig() { }
75 virtual void printCodeViewDebugInfo() { }
77 mergeCodeViewTypes(llvm::codeview::MergingTypeTableBuilder &CVIDs,
78 llvm::codeview::MergingTypeTableBuilder &CVTypes) {}
80 // Only implemented for MachO.
81 virtual void printMachODataInCode() { }
82 virtual void printMachOVersionMin() { }
83 virtual void printMachODysymtab() { }
84 virtual void printMachOSegment() { }
85 virtual void printMachOIndirectSymbols() { }
86 virtual void printMachOLinkerOptions() { }
88 virtual void printStackMap() const = 0;
92 void SectionHexDump(StringRef SecName, const uint8_t *Section, size_t Size);
95 std::error_code createCOFFDumper(const object::ObjectFile *Obj,
96 ScopedPrinter &Writer,
97 std::unique_ptr<ObjDumper> &Result);
99 std::error_code createELFDumper(const object::ObjectFile *Obj,
100 ScopedPrinter &Writer,
101 std::unique_ptr<ObjDumper> &Result);
103 std::error_code createMachODumper(const object::ObjectFile *Obj,
104 ScopedPrinter &Writer,
105 std::unique_ptr<ObjDumper> &Result);
107 std::error_code createWasmDumper(const object::ObjectFile *Obj,
108 ScopedPrinter &Writer,
109 std::unique_ptr<ObjDumper> &Result);
111 void dumpCOFFImportFile(const object::COFFImportFile *File,
112 ScopedPrinter &Writer);
114 void dumpCodeViewMergedTypes(
115 ScopedPrinter &Writer, llvm::codeview::MergingTypeTableBuilder &IDTable,
116 llvm::codeview::MergingTypeTableBuilder &TypeTable);