10b8b771e9f2f251460a6f200c45efe9d55640d60Benjamin Kramer//
20b8b771e9f2f251460a6f200c45efe9d55640d60Benjamin Kramer//                     The LLVM Compiler Infrastructure
30b8b771e9f2f251460a6f200c45efe9d55640d60Benjamin Kramer//
40b8b771e9f2f251460a6f200c45efe9d55640d60Benjamin Kramer// This file is distributed under the University of Illinois Open Source
50b8b771e9f2f251460a6f200c45efe9d55640d60Benjamin Kramer// License. See LICENSE.TXT for details.
60b8b771e9f2f251460a6f200c45efe9d55640d60Benjamin Kramer//
70b8b771e9f2f251460a6f200c45efe9d55640d60Benjamin Kramer//===----------------------------------------------------------------------===//
80b8b771e9f2f251460a6f200c45efe9d55640d60Benjamin Kramer
937ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines#ifndef LLVM_TOOLS_LLVM_OBJDUMP_LLVM_OBJDUMP_H
1037ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines#define LLVM_TOOLS_LLVM_OBJDUMP_LLVM_OBJDUMP_H
110b8b771e9f2f251460a6f200c45efe9d55640d60Benjamin Kramer
120b8b771e9f2f251460a6f200c45efe9d55640d60Benjamin Kramer#include "llvm/ADT/StringRef.h"
130b8b771e9f2f251460a6f200c45efe9d55640d60Benjamin Kramer#include "llvm/Support/CommandLine.h"
140b8b771e9f2f251460a6f200c45efe9d55640d60Benjamin Kramer#include "llvm/Support/DataTypes.h"
150b8b771e9f2f251460a6f200c45efe9d55640d60Benjamin Kramer
160b8b771e9f2f251460a6f200c45efe9d55640d60Benjamin Kramernamespace llvm {
17eef7b6219ebe5d0ded0be4adb3003055fa8a63c4Michael J. Spencernamespace object {
18eef7b6219ebe5d0ded0be4adb3003055fa8a63c4Michael J. Spencer  class COFFObjectFile;
1937ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines  class MachOObjectFile;
20b2c064c6954c9bfa49b7a7e3223df5e7849464c0Michael J. Spencer  class ObjectFile;
21eef7b6219ebe5d0ded0be4adb3003055fa8a63c4Michael J. Spencer  class RelocationRef;
22eef7b6219ebe5d0ded0be4adb3003055fa8a63c4Michael J. Spencer}
23eef7b6219ebe5d0ded0be4adb3003055fa8a63c4Michael J. Spencer
240b8b771e9f2f251460a6f200c45efe9d55640d60Benjamin Kramerextern cl::opt<std::string> TripleName;
250b8b771e9f2f251460a6f200c45efe9d55640d60Benjamin Kramerextern cl::opt<std::string> ArchName;
2637ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hinesextern cl::opt<std::string> MCPU;
2737ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hinesextern cl::list<std::string> MAttrs;
28ebe69fe11e48d322045d5949c83283927a0d790bStephen Hinesextern cl::list<std::string> DumpSections;
292c3e0051c31c3f5b2328b447eadf1cf9c4427442Pirama Arumuga Nainarextern cl::opt<bool> Raw;
30ebe69fe11e48d322045d5949c83283927a0d790bStephen Hinesextern cl::opt<bool> Disassemble;
3137ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hinesextern cl::opt<bool> NoShowRawInsn;
32ebe69fe11e48d322045d5949c83283927a0d790bStephen Hinesextern cl::opt<bool> PrivateHeaders;
33ebe69fe11e48d322045d5949c83283927a0d790bStephen Hinesextern cl::opt<bool> ExportsTrie;
34ebe69fe11e48d322045d5949c83283927a0d790bStephen Hinesextern cl::opt<bool> Rebase;
35ebe69fe11e48d322045d5949c83283927a0d790bStephen Hinesextern cl::opt<bool> Bind;
36ebe69fe11e48d322045d5949c83283927a0d790bStephen Hinesextern cl::opt<bool> LazyBind;
37ebe69fe11e48d322045d5949c83283927a0d790bStephen Hinesextern cl::opt<bool> WeakBind;
38ebe69fe11e48d322045d5949c83283927a0d790bStephen Hinesextern cl::opt<bool> UniversalHeaders;
39ebe69fe11e48d322045d5949c83283927a0d790bStephen Hinesextern cl::opt<bool> ArchiveHeaders;
40ebe69fe11e48d322045d5949c83283927a0d790bStephen Hinesextern cl::opt<bool> IndirectSymbols;
41ebe69fe11e48d322045d5949c83283927a0d790bStephen Hinesextern cl::opt<bool> DataInCode;
42ebe69fe11e48d322045d5949c83283927a0d790bStephen Hinesextern cl::opt<bool> LinkOptHints;
434c5e43da7792f75567b693105cc53e3f1992ad98Pirama Arumuga Nainarextern cl::opt<bool> InfoPlist;
444c5e43da7792f75567b693105cc53e3f1992ad98Pirama Arumuga Nainarextern cl::opt<bool> DylibsUsed;
454c5e43da7792f75567b693105cc53e3f1992ad98Pirama Arumuga Nainarextern cl::opt<bool> DylibId;
462c3e0051c31c3f5b2328b447eadf1cf9c4427442Pirama Arumuga Nainarextern cl::opt<bool> ObjcMetaData;
474c5e43da7792f75567b693105cc53e3f1992ad98Pirama Arumuga Nainarextern cl::opt<std::string> DisSymName;
484c5e43da7792f75567b693105cc53e3f1992ad98Pirama Arumuga Nainarextern cl::opt<bool> NonVerbose;
49ebe69fe11e48d322045d5949c83283927a0d790bStephen Hinesextern cl::opt<bool> Relocations;
50ebe69fe11e48d322045d5949c83283927a0d790bStephen Hinesextern cl::opt<bool> SectionHeaders;
51ebe69fe11e48d322045d5949c83283927a0d790bStephen Hinesextern cl::opt<bool> SectionContents;
52ebe69fe11e48d322045d5949c83283927a0d790bStephen Hinesextern cl::opt<bool> SymbolTable;
53ebe69fe11e48d322045d5949c83283927a0d790bStephen Hinesextern cl::opt<bool> UnwindInfo;
540b8b771e9f2f251460a6f200c45efe9d55640d60Benjamin Kramer
550b8b771e9f2f251460a6f200c45efe9d55640d60Benjamin Kramer// Various helper functions.
56c6a4f5e819217e1e12c458aed8e7b122e23a3a58Stephen Hinesbool error(std::error_code ec);
57eef7b6219ebe5d0ded0be4adb3003055fa8a63c4Michael J. Spencerbool RelocAddressLess(object::RelocationRef a, object::RelocationRef b);
584c5e43da7792f75567b693105cc53e3f1992ad98Pirama Arumuga Nainarvoid DumpBytes(ArrayRef<uint8_t> bytes);
59ebe69fe11e48d322045d5949c83283927a0d790bStephen Hinesvoid ParseInputMachO(StringRef Filename);
60eef7b6219ebe5d0ded0be4adb3003055fa8a63c4Michael J. Spencervoid printCOFFUnwindInfo(const object::COFFObjectFile* o);
6137ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hinesvoid printMachOUnwindInfo(const object::MachOObjectFile* o);
6237ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hinesvoid printMachOExportsTrie(const object::MachOObjectFile* o);
6337ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hinesvoid printMachORebaseTable(const object::MachOObjectFile* o);
6437ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hinesvoid printMachOBindTable(const object::MachOObjectFile* o);
6537ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hinesvoid printMachOLazyBindTable(const object::MachOObjectFile* o);
6637ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hinesvoid printMachOWeakBindTable(const object::MachOObjectFile* o);
67b2c064c6954c9bfa49b7a7e3223df5e7849464c0Michael J. Spencervoid printELFFileHeader(const object::ObjectFile *o);
68a6610ee882fcb8bcad60d53fc52b80f00a3fddaeRui Ueyamavoid printCOFFFileHeader(const object::ObjectFile *o);
6937ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hinesvoid printMachOFileHeader(const object::ObjectFile *o);
70ebe69fe11e48d322045d5949c83283927a0d790bStephen Hinesvoid printExportsTrie(const object::ObjectFile *o);
71ebe69fe11e48d322045d5949c83283927a0d790bStephen Hinesvoid printRebaseTable(const object::ObjectFile *o);
72ebe69fe11e48d322045d5949c83283927a0d790bStephen Hinesvoid printBindTable(const object::ObjectFile *o);
73ebe69fe11e48d322045d5949c83283927a0d790bStephen Hinesvoid printLazyBindTable(const object::ObjectFile *o);
74ebe69fe11e48d322045d5949c83283927a0d790bStephen Hinesvoid printWeakBindTable(const object::ObjectFile *o);
75ebe69fe11e48d322045d5949c83283927a0d790bStephen Hinesvoid PrintRelocations(const object::ObjectFile *o);
76ebe69fe11e48d322045d5949c83283927a0d790bStephen Hinesvoid PrintSectionHeaders(const object::ObjectFile *o);
77ebe69fe11e48d322045d5949c83283927a0d790bStephen Hinesvoid PrintSectionContents(const object::ObjectFile *o);
78ebe69fe11e48d322045d5949c83283927a0d790bStephen Hinesvoid PrintSymbolTable(const object::ObjectFile *o);
790b8b771e9f2f251460a6f200c45efe9d55640d60Benjamin Kramer
80a6610ee882fcb8bcad60d53fc52b80f00a3fddaeRui Ueyama} // end namespace llvm
810b8b771e9f2f251460a6f200c45efe9d55640d60Benjamin Kramer
820b8b771e9f2f251460a6f200c45efe9d55640d60Benjamin Kramer#endif
83