llvm.org GIT mirror llvm / 8109763 tools / llvm-readobj / ObjDumper.h
8109763

Tree @8109763 (Download .tar.gz)

ObjDumper.h @8109763

76e70f3
 
 
 
 
 
 
 
 
00e08fc
 
76e70f3
f4ccd11
d5132f9
f4ccd11
76e70f3
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
4cbb2db
76e70f3
 
cf3b55a
8109763
76e70f3
459c949
 
 
42469f6
 
ef7c256
3bcfd46
42469f6
f3cd10b
 
b19a485
db02fa5
6272b8c
f3cd10b
63f4054
 
76e70f3
 
 
 
a20bcb9
 
 
76e70f3
a20bcb9
 
 
76e70f3
a20bcb9
 
 
76e70f3
 
 
 
//===-- ObjDumper.h -------------------------------------------------------===//
//
//                     The LLVM Compiler Infrastructure
//
// This file is distributed under the University of Illinois Open Source
// License. See LICENSE.TXT for details.
//
//===----------------------------------------------------------------------===//

#ifndef LLVM_TOOLS_LLVM_READOBJ_OBJDUMPER_H
#define LLVM_TOOLS_LLVM_READOBJ_OBJDUMPER_H

#include <memory>
#include <system_error>

namespace llvm {
namespace object {
  class ObjectFile;
}

class StreamWriter;

class ObjDumper {
public:
  ObjDumper(StreamWriter& Writer);
  virtual ~ObjDumper();

  virtual void printFileHeaders() = 0;
  virtual void printSections() = 0;
  virtual void printRelocations() = 0;
  virtual void printSymbols() = 0;
  virtual void printDynamicSymbols() = 0;
  virtual void printUnwindInfo() = 0;

  // Only implemented for ELF at this time.
  virtual void printDynamicRelocations() { }
  virtual void printDynamicTable() { }
  virtual void printNeededLibraries() { }
  virtual void printProgramHeaders() { }
  virtual void printHashTable() { }

  // Only implemented for ARM ELF at this time.
  virtual void printAttributes() { }

  // Only implemented for MIPS ELF at this time.
  virtual void printMipsPLTGOT() { }
  virtual void printMipsABIFlags() { }
  virtual void printMipsReginfo() { }

  // Only implemented for PE/COFF.
  virtual void printCOFFImports() { }
  virtual void printCOFFExports() { }
  virtual void printCOFFDirectives() { }
  virtual void printCOFFBaseReloc() { }

  virtual void printStackMap() const = 0;

protected:
  StreamWriter& W;
};

std::error_code createCOFFDumper(const object::ObjectFile *Obj,
                                 StreamWriter &Writer,
                                 std::unique_ptr<ObjDumper> &Result);

std::error_code createELFDumper(const object::ObjectFile *Obj,
                                StreamWriter &Writer,
                                std::unique_ptr<ObjDumper> &Result);

std::error_code createMachODumper(const object::ObjectFile *Obj,
                                  StreamWriter &Writer,
                                  std::unique_ptr<ObjDumper> &Result);

} // namespace llvm

#endif