1249259Sdim//===-- ObjDumper.h -------------------------------------------------------===//
2249259Sdim//
3249259Sdim//                     The LLVM Compiler Infrastructure
4249259Sdim//
5249259Sdim// This file is distributed under the University of Illinois Open Source
6249259Sdim// License. See LICENSE.TXT for details.
7249259Sdim//
8249259Sdim//===----------------------------------------------------------------------===//
9249259Sdim
10249259Sdim#ifndef LLVM_READOBJ_OBJDUMPER_H
11249259Sdim#define LLVM_READOBJ_OBJDUMPER_H
12249259Sdim
13249259Sdimnamespace llvm {
14249259Sdim
15249259Sdimnamespace object {
16249259Sdim  class ObjectFile;
17249259Sdim}
18249259Sdim
19249259Sdimclass error_code;
20249259Sdim
21249259Sdimtemplate<typename T>
22249259Sdimclass OwningPtr;
23249259Sdim
24249259Sdimclass StreamWriter;
25249259Sdim
26249259Sdimclass ObjDumper {
27249259Sdimpublic:
28249259Sdim  ObjDumper(StreamWriter& Writer);
29249259Sdim  virtual ~ObjDumper();
30249259Sdim
31249259Sdim  virtual void printFileHeaders() = 0;
32249259Sdim  virtual void printSections() = 0;
33249259Sdim  virtual void printRelocations() = 0;
34249259Sdim  virtual void printSymbols() = 0;
35249259Sdim  virtual void printDynamicSymbols() = 0;
36249259Sdim  virtual void printUnwindInfo() = 0;
37249259Sdim
38249259Sdim  // Only implemented for ELF at this time.
39249259Sdim  virtual void printDynamicTable() { }
40249259Sdim  virtual void printNeededLibraries() { }
41251662Sdim  virtual void printProgramHeaders() { }
42249259Sdim
43249259Sdimprotected:
44249259Sdim  StreamWriter& W;
45249259Sdim};
46249259Sdim
47249259Sdimerror_code createCOFFDumper(const object::ObjectFile *Obj,
48249259Sdim                            StreamWriter& Writer,
49249259Sdim                            OwningPtr<ObjDumper> &Result);
50249259Sdim
51249259Sdimerror_code createELFDumper(const object::ObjectFile *Obj,
52249259Sdim                           StreamWriter& Writer,
53249259Sdim                           OwningPtr<ObjDumper> &Result);
54249259Sdim
55249259Sdimerror_code createMachODumper(const object::ObjectFile *Obj,
56249259Sdim                             StreamWriter& Writer,
57249259Sdim                             OwningPtr<ObjDumper> &Result);
58249259Sdim
59249259Sdim} // namespace llvm
60249259Sdim
61249259Sdim#endif
62