1 //===-- MachODump.h ---------------------------------------------*- C++ -*-===//
2 //
3 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4 // See https://llvm.org/LICENSE.txt for license information.
5 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6 //
7 //===----------------------------------------------------------------------===//
8 
9 #ifndef LLVM_TOOLS_LLVM_OBJDUMP_MACHODUMP_H
10 #define LLVM_TOOLS_LLVM_OBJDUMP_MACHODUMP_H
11 
12 #include "llvm/ADT/SmallVector.h"
13 #include "llvm/Support/CommandLine.h"
14 
15 namespace llvm {
16 
17 class Error;
18 class StringRef;
19 class MemoryBuffer;
20 
21 namespace object {
22 class MachOObjectFile;
23 class MachOUniversalBinary;
24 class ObjectFile;
25 class RelocationRef;
26 class Binary;
27 } // namespace object
28 
29 namespace opt {
30 class InputArgList;
31 } // namespace opt
32 
33 namespace objdump {
34 
35 void parseMachOOptions(const llvm::opt::InputArgList &InputArgs);
36 
37 enum class FunctionStartsMode { Addrs, Names, Both, None };
38 
39 // MachO specific options
40 extern bool Bind;
41 extern bool DataInCode;
42 extern std::string DisSymName;
43 extern bool ChainedFixups;
44 extern bool DyldInfo;
45 extern bool DylibId;
46 extern bool DylibsUsed;
47 extern bool ExportsTrie;
48 extern bool FirstPrivateHeader;
49 extern bool FullLeadingAddr;
50 extern FunctionStartsMode FunctionStartsType;
51 extern bool IndirectSymbols;
52 extern bool InfoPlist;
53 extern bool LazyBind;
54 extern bool LeadingHeaders;
55 extern bool LinkOptHints;
56 extern bool ObjcMetaData;
57 extern bool Rebase;
58 extern bool Rpaths;
59 extern bool SymbolicOperands;
60 extern bool UniversalHeaders;
61 extern bool Verbose;
62 extern bool WeakBind;
63 
64 Error getMachORelocationValueString(const object::MachOObjectFile *Obj,
65                                     const object::RelocationRef &RelRef,
66                                     llvm::SmallVectorImpl<char> &Result);
67 
68 const object::MachOObjectFile *
69 getMachODSymObject(const object::MachOObjectFile *O, StringRef Filename,
70                    std::unique_ptr<object::Binary> &DSYMBinary,
71                    std::unique_ptr<MemoryBuffer> &DSYMBuf);
72 
73 void parseInputMachO(StringRef Filename);
74 void parseInputMachO(object::MachOUniversalBinary *UB);
75 
76 void printMachOUnwindInfo(const object::MachOObjectFile *O);
77 void printMachOFileHeader(const object::ObjectFile *O);
78 void printMachOLoadCommands(const object::ObjectFile *O);
79 
80 void printExportsTrie(const object::ObjectFile *O);
81 void printRebaseTable(object::ObjectFile *O);
82 void printBindTable(object::ObjectFile *O);
83 void printLazyBindTable(object::ObjectFile *O);
84 void printWeakBindTable(object::ObjectFile *O);
85 
86 } // namespace objdump
87 } // namespace llvm
88 
89 #endif
90