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