ObjDumper.h revision 303975
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//===----------------------------------------------------------------------===//
9
10#ifndef LLVM_TOOLS_LLVM_READOBJ_OBJDUMPER_H
11#define LLVM_TOOLS_LLVM_READOBJ_OBJDUMPER_H
12
13#include <memory>
14#include <system_error>
15
16namespace llvm {
17namespace object {
18class COFFImportFile;
19class ObjectFile;
20}
21
22class StreamWriter;
23
24class ObjDumper {
25public:
26  ObjDumper(StreamWriter& Writer);
27  virtual ~ObjDumper();
28
29  virtual void printFileHeaders() = 0;
30  virtual void printSections() = 0;
31  virtual void printRelocations() = 0;
32  virtual void printSymbols() = 0;
33  virtual void printDynamicSymbols() = 0;
34  virtual void printUnwindInfo() = 0;
35
36  // Only implemented for ELF at this time.
37  virtual void printDynamicRelocations() { }
38  virtual void printDynamicTable() { }
39  virtual void printNeededLibraries() { }
40  virtual void printProgramHeaders() { }
41  virtual void printHashTable() { }
42  virtual void printGnuHashTable() { }
43  virtual void printLoadName() {}
44  virtual void printVersionInfo() {}
45
46  // Only implemented for ARM ELF at this time.
47  virtual void printAttributes() { }
48
49  // Only implemented for MIPS ELF at this time.
50  virtual void printMipsPLTGOT() { }
51  virtual void printMipsABIFlags() { }
52  virtual void printMipsReginfo() { }
53
54  // Only implemented for PE/COFF.
55  virtual void printCOFFImports() { }
56  virtual void printCOFFExports() { }
57  virtual void printCOFFDirectives() { }
58  virtual void printCOFFBaseReloc() { }
59  virtual void printCodeViewDebugInfo() { }
60
61  // Only implemented for MachO.
62  virtual void printMachODataInCode() { }
63  virtual void printMachOVersionMin() { }
64  virtual void printMachODysymtab() { }
65  virtual void printMachOSegment() { }
66  virtual void printMachOIndirectSymbols() { }
67  virtual void printMachOLinkerOptions() { }
68
69  virtual void printStackMap() const = 0;
70
71protected:
72  StreamWriter& W;
73};
74
75std::error_code createCOFFDumper(const object::ObjectFile *Obj,
76                                 StreamWriter &Writer,
77                                 std::unique_ptr<ObjDumper> &Result);
78
79std::error_code createELFDumper(const object::ObjectFile *Obj,
80                                StreamWriter &Writer,
81                                std::unique_ptr<ObjDumper> &Result);
82
83std::error_code createMachODumper(const object::ObjectFile *Obj,
84                                  StreamWriter &Writer,
85                                  std::unique_ptr<ObjDumper> &Result);
86
87void dumpCOFFImportFile(const object::COFFImportFile *File);
88
89} // namespace llvm
90
91#endif
92