1*9880d681SAndroid Build Coastguard Worker //===-- ObjDumper.h ---------------------------------------------*- C++ -*-===// 2*9880d681SAndroid Build Coastguard Worker // 3*9880d681SAndroid Build Coastguard Worker // The LLVM Compiler Infrastructure 4*9880d681SAndroid Build Coastguard Worker // 5*9880d681SAndroid Build Coastguard Worker // This file is distributed under the University of Illinois Open Source 6*9880d681SAndroid Build Coastguard Worker // License. See LICENSE.TXT for details. 7*9880d681SAndroid Build Coastguard Worker // 8*9880d681SAndroid Build Coastguard Worker //===----------------------------------------------------------------------===// 9*9880d681SAndroid Build Coastguard Worker 10*9880d681SAndroid Build Coastguard Worker #ifndef LLVM_TOOLS_LLVM_READOBJ_OBJDUMPER_H 11*9880d681SAndroid Build Coastguard Worker #define LLVM_TOOLS_LLVM_READOBJ_OBJDUMPER_H 12*9880d681SAndroid Build Coastguard Worker 13*9880d681SAndroid Build Coastguard Worker #include <memory> 14*9880d681SAndroid Build Coastguard Worker #include <system_error> 15*9880d681SAndroid Build Coastguard Worker 16*9880d681SAndroid Build Coastguard Worker namespace llvm { 17*9880d681SAndroid Build Coastguard Worker namespace object { 18*9880d681SAndroid Build Coastguard Worker class COFFImportFile; 19*9880d681SAndroid Build Coastguard Worker class ObjectFile; 20*9880d681SAndroid Build Coastguard Worker } 21*9880d681SAndroid Build Coastguard Worker namespace codeview { 22*9880d681SAndroid Build Coastguard Worker class MemoryTypeTableBuilder; 23*9880d681SAndroid Build Coastguard Worker } 24*9880d681SAndroid Build Coastguard Worker 25*9880d681SAndroid Build Coastguard Worker class ScopedPrinter; 26*9880d681SAndroid Build Coastguard Worker 27*9880d681SAndroid Build Coastguard Worker class ObjDumper { 28*9880d681SAndroid Build Coastguard Worker public: 29*9880d681SAndroid Build Coastguard Worker ObjDumper(ScopedPrinter &Writer); 30*9880d681SAndroid Build Coastguard Worker virtual ~ObjDumper(); 31*9880d681SAndroid Build Coastguard Worker 32*9880d681SAndroid Build Coastguard Worker virtual void printFileHeaders() = 0; 33*9880d681SAndroid Build Coastguard Worker virtual void printSections() = 0; 34*9880d681SAndroid Build Coastguard Worker virtual void printRelocations() = 0; 35*9880d681SAndroid Build Coastguard Worker virtual void printSymbols() = 0; 36*9880d681SAndroid Build Coastguard Worker virtual void printDynamicSymbols() = 0; 37*9880d681SAndroid Build Coastguard Worker virtual void printUnwindInfo() = 0; 38*9880d681SAndroid Build Coastguard Worker 39*9880d681SAndroid Build Coastguard Worker // Only implemented for ELF at this time. printDynamicRelocations()40*9880d681SAndroid Build Coastguard Worker virtual void printDynamicRelocations() { } printDynamicTable()41*9880d681SAndroid Build Coastguard Worker virtual void printDynamicTable() { } printNeededLibraries()42*9880d681SAndroid Build Coastguard Worker virtual void printNeededLibraries() { } printProgramHeaders()43*9880d681SAndroid Build Coastguard Worker virtual void printProgramHeaders() { } printHashTable()44*9880d681SAndroid Build Coastguard Worker virtual void printHashTable() { } printGnuHashTable()45*9880d681SAndroid Build Coastguard Worker virtual void printGnuHashTable() { } printLoadName()46*9880d681SAndroid Build Coastguard Worker virtual void printLoadName() {} printVersionInfo()47*9880d681SAndroid Build Coastguard Worker virtual void printVersionInfo() {} printGroupSections()48*9880d681SAndroid Build Coastguard Worker virtual void printGroupSections() {} printHashHistogram()49*9880d681SAndroid Build Coastguard Worker virtual void printHashHistogram() {} 50*9880d681SAndroid Build Coastguard Worker 51*9880d681SAndroid Build Coastguard Worker // Only implemented for ARM ELF at this time. printAttributes()52*9880d681SAndroid Build Coastguard Worker virtual void printAttributes() { } 53*9880d681SAndroid Build Coastguard Worker 54*9880d681SAndroid Build Coastguard Worker // Only implemented for MIPS ELF at this time. printMipsPLTGOT()55*9880d681SAndroid Build Coastguard Worker virtual void printMipsPLTGOT() { } printMipsABIFlags()56*9880d681SAndroid Build Coastguard Worker virtual void printMipsABIFlags() { } printMipsReginfo()57*9880d681SAndroid Build Coastguard Worker virtual void printMipsReginfo() { } printMipsOptions()58*9880d681SAndroid Build Coastguard Worker virtual void printMipsOptions() { } 59*9880d681SAndroid Build Coastguard Worker 60*9880d681SAndroid Build Coastguard Worker // Only implemented for PE/COFF. printCOFFImports()61*9880d681SAndroid Build Coastguard Worker virtual void printCOFFImports() { } printCOFFExports()62*9880d681SAndroid Build Coastguard Worker virtual void printCOFFExports() { } printCOFFDirectives()63*9880d681SAndroid Build Coastguard Worker virtual void printCOFFDirectives() { } printCOFFBaseReloc()64*9880d681SAndroid Build Coastguard Worker virtual void printCOFFBaseReloc() { } printCOFFDebugDirectory()65*9880d681SAndroid Build Coastguard Worker virtual void printCOFFDebugDirectory() { } printCodeViewDebugInfo()66*9880d681SAndroid Build Coastguard Worker virtual void printCodeViewDebugInfo() { } 67*9880d681SAndroid Build Coastguard Worker virtual void mergeCodeViewTypes(llvm::codeview::MemoryTypeTableBuilder & CVTypes)68*9880d681SAndroid Build Coastguard Worker mergeCodeViewTypes(llvm::codeview::MemoryTypeTableBuilder &CVTypes) {} 69*9880d681SAndroid Build Coastguard Worker 70*9880d681SAndroid Build Coastguard Worker // Only implemented for MachO. printMachODataInCode()71*9880d681SAndroid Build Coastguard Worker virtual void printMachODataInCode() { } printMachOVersionMin()72*9880d681SAndroid Build Coastguard Worker virtual void printMachOVersionMin() { } printMachODysymtab()73*9880d681SAndroid Build Coastguard Worker virtual void printMachODysymtab() { } printMachOSegment()74*9880d681SAndroid Build Coastguard Worker virtual void printMachOSegment() { } printMachOIndirectSymbols()75*9880d681SAndroid Build Coastguard Worker virtual void printMachOIndirectSymbols() { } printMachOLinkerOptions()76*9880d681SAndroid Build Coastguard Worker virtual void printMachOLinkerOptions() { } 77*9880d681SAndroid Build Coastguard Worker 78*9880d681SAndroid Build Coastguard Worker virtual void printStackMap() const = 0; 79*9880d681SAndroid Build Coastguard Worker 80*9880d681SAndroid Build Coastguard Worker protected: 81*9880d681SAndroid Build Coastguard Worker ScopedPrinter &W; 82*9880d681SAndroid Build Coastguard Worker }; 83*9880d681SAndroid Build Coastguard Worker 84*9880d681SAndroid Build Coastguard Worker std::error_code createCOFFDumper(const object::ObjectFile *Obj, 85*9880d681SAndroid Build Coastguard Worker ScopedPrinter &Writer, 86*9880d681SAndroid Build Coastguard Worker std::unique_ptr<ObjDumper> &Result); 87*9880d681SAndroid Build Coastguard Worker 88*9880d681SAndroid Build Coastguard Worker std::error_code createELFDumper(const object::ObjectFile *Obj, 89*9880d681SAndroid Build Coastguard Worker ScopedPrinter &Writer, 90*9880d681SAndroid Build Coastguard Worker std::unique_ptr<ObjDumper> &Result); 91*9880d681SAndroid Build Coastguard Worker 92*9880d681SAndroid Build Coastguard Worker std::error_code createMachODumper(const object::ObjectFile *Obj, 93*9880d681SAndroid Build Coastguard Worker ScopedPrinter &Writer, 94*9880d681SAndroid Build Coastguard Worker std::unique_ptr<ObjDumper> &Result); 95*9880d681SAndroid Build Coastguard Worker 96*9880d681SAndroid Build Coastguard Worker void dumpCOFFImportFile(const object::COFFImportFile *File); 97*9880d681SAndroid Build Coastguard Worker 98*9880d681SAndroid Build Coastguard Worker void dumpCodeViewMergedTypes(ScopedPrinter &Writer, 99*9880d681SAndroid Build Coastguard Worker llvm::codeview::MemoryTypeTableBuilder &CVTypes); 100*9880d681SAndroid Build Coastguard Worker 101*9880d681SAndroid Build Coastguard Worker } // namespace llvm 102*9880d681SAndroid Build Coastguard Worker 103*9880d681SAndroid Build Coastguard Worker #endif 104