ObjDumper.h 2.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576
  1. //===-- ObjDumper.h -------------------------------------------------------===//
  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. #ifndef LLVM_TOOLS_LLVM_READOBJ_OBJDUMPER_H
  10. #define LLVM_TOOLS_LLVM_READOBJ_OBJDUMPER_H
  11. #include <memory>
  12. #include <system_error>
  13. namespace llvm {
  14. namespace object {
  15. class ObjectFile;
  16. }
  17. class StreamWriter;
  18. class ObjDumper {
  19. public:
  20. ObjDumper(StreamWriter& Writer);
  21. virtual ~ObjDumper();
  22. virtual void printFileHeaders() = 0;
  23. virtual void printSections() = 0;
  24. virtual void printRelocations() = 0;
  25. virtual void printSymbols() = 0;
  26. virtual void printDynamicSymbols() = 0;
  27. virtual void printUnwindInfo() = 0;
  28. // Only implemented for ELF at this time.
  29. virtual void printDynamicRelocations() { }
  30. virtual void printDynamicTable() { }
  31. virtual void printNeededLibraries() { }
  32. virtual void printProgramHeaders() { }
  33. virtual void printHashTable() { }
  34. // Only implemented for ARM ELF at this time.
  35. virtual void printAttributes() { }
  36. // Only implemented for MIPS ELF at this time.
  37. virtual void printMipsPLTGOT() { }
  38. virtual void printMipsABIFlags() { }
  39. virtual void printMipsReginfo() { }
  40. // Only implemented for PE/COFF.
  41. virtual void printCOFFImports() { }
  42. virtual void printCOFFExports() { }
  43. virtual void printCOFFDirectives() { }
  44. virtual void printCOFFBaseReloc() { }
  45. virtual void printStackMap() const = 0;
  46. protected:
  47. StreamWriter& W;
  48. };
  49. std::error_code createCOFFDumper(const object::ObjectFile *Obj,
  50. StreamWriter &Writer,
  51. std::unique_ptr<ObjDumper> &Result);
  52. std::error_code createELFDumper(const object::ObjectFile *Obj,
  53. StreamWriter &Writer,
  54. std::unique_ptr<ObjDumper> &Result);
  55. std::error_code createMachODumper(const object::ObjectFile *Obj,
  56. StreamWriter &Writer,
  57. std::unique_ptr<ObjDumper> &Result);
  58. } // namespace llvm
  59. #endif