OSDN Git Service

[llvm-readobj] Add -hex-dump (-x) option
[android-x86/external-llvm.git] / tools / llvm-readobj / ObjDumper.h
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
16 #include "llvm/ADT/StringRef.h"
17
18 namespace llvm {
19 namespace object {
20 class COFFImportFile;
21 class ObjectFile;
22 }
23 namespace codeview {
24 class MergingTypeTableBuilder;
25 }
26
27 class ScopedPrinter;
28
29 class ObjDumper {
30 public:
31   ObjDumper(ScopedPrinter &Writer);
32   virtual ~ObjDumper();
33
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;
40
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() {}
57
58   // Only implemented for ARM ELF at this time.
59   virtual void printAttributes() { }
60
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() { }
66
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() { }
76   virtual void
77   mergeCodeViewTypes(llvm::codeview::MergingTypeTableBuilder &CVIDs,
78                      llvm::codeview::MergingTypeTableBuilder &CVTypes) {}
79
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() { }
87
88   virtual void printStackMap() const = 0;
89
90 protected:
91   ScopedPrinter &W;
92   void SectionHexDump(StringRef SecName, const uint8_t *Section, size_t Size);
93 };
94
95 std::error_code createCOFFDumper(const object::ObjectFile *Obj,
96                                  ScopedPrinter &Writer,
97                                  std::unique_ptr<ObjDumper> &Result);
98
99 std::error_code createELFDumper(const object::ObjectFile *Obj,
100                                 ScopedPrinter &Writer,
101                                 std::unique_ptr<ObjDumper> &Result);
102
103 std::error_code createMachODumper(const object::ObjectFile *Obj,
104                                   ScopedPrinter &Writer,
105                                   std::unique_ptr<ObjDumper> &Result);
106
107 std::error_code createWasmDumper(const object::ObjectFile *Obj,
108                                  ScopedPrinter &Writer,
109                                  std::unique_ptr<ObjDumper> &Result);
110
111 void dumpCOFFImportFile(const object::COFFImportFile *File,
112                         ScopedPrinter &Writer);
113
114 void dumpCodeViewMergedTypes(
115     ScopedPrinter &Writer, llvm::codeview::MergingTypeTableBuilder &IDTable,
116     llvm::codeview::MergingTypeTableBuilder &TypeTable);
117
118 } // namespace llvm
119
120 #endif