15ffd83dbSDimitry Andric //===-- MachODump.h ---------------------------------------------*- C++ -*-===// 25ffd83dbSDimitry Andric // 35ffd83dbSDimitry Andric // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 45ffd83dbSDimitry Andric // See https://llvm.org/LICENSE.txt for license information. 55ffd83dbSDimitry Andric // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 65ffd83dbSDimitry Andric // 75ffd83dbSDimitry Andric //===----------------------------------------------------------------------===// 85ffd83dbSDimitry Andric 95ffd83dbSDimitry Andric #ifndef LLVM_TOOLS_LLVM_OBJDUMP_MACHODUMP_H 105ffd83dbSDimitry Andric #define LLVM_TOOLS_LLVM_OBJDUMP_MACHODUMP_H 115ffd83dbSDimitry Andric 125ffd83dbSDimitry Andric #include "llvm/ADT/SmallVector.h" 135ffd83dbSDimitry Andric #include "llvm/Support/CommandLine.h" 145ffd83dbSDimitry Andric 155ffd83dbSDimitry Andric namespace llvm { 165ffd83dbSDimitry Andric 175ffd83dbSDimitry Andric class Error; 185ffd83dbSDimitry Andric class StringRef; 19*bdd1243dSDimitry Andric class MemoryBuffer; 205ffd83dbSDimitry Andric 215ffd83dbSDimitry Andric namespace object { 225ffd83dbSDimitry Andric class MachOObjectFile; 235ffd83dbSDimitry Andric class MachOUniversalBinary; 245ffd83dbSDimitry Andric class ObjectFile; 255ffd83dbSDimitry Andric class RelocationRef; 26*bdd1243dSDimitry Andric class Binary; 275ffd83dbSDimitry Andric } // namespace object 285ffd83dbSDimitry Andric 29fe6060f1SDimitry Andric namespace opt { 30fe6060f1SDimitry Andric class InputArgList; 31fe6060f1SDimitry Andric } // namespace opt 32fe6060f1SDimitry Andric 335ffd83dbSDimitry Andric namespace objdump { 345ffd83dbSDimitry Andric 35fe6060f1SDimitry Andric void parseMachOOptions(const llvm::opt::InputArgList &InputArgs); 36fe6060f1SDimitry Andric 37*bdd1243dSDimitry Andric enum class FunctionStartsMode { Addrs, Names, Both, None }; 38*bdd1243dSDimitry Andric 395ffd83dbSDimitry Andric // MachO specific options 40fe6060f1SDimitry Andric extern bool Bind; 41fe6060f1SDimitry Andric extern bool DataInCode; 42fe6060f1SDimitry Andric extern std::string DisSymName; 43*bdd1243dSDimitry Andric extern bool ChainedFixups; 4481ad6265SDimitry Andric extern bool DyldInfo; 45fe6060f1SDimitry Andric extern bool DylibId; 46fe6060f1SDimitry Andric extern bool DylibsUsed; 47fe6060f1SDimitry Andric extern bool ExportsTrie; 48fe6060f1SDimitry Andric extern bool FirstPrivateHeader; 49fe6060f1SDimitry Andric extern bool FullLeadingAddr; 50*bdd1243dSDimitry Andric extern FunctionStartsMode FunctionStartsType; 51fe6060f1SDimitry Andric extern bool IndirectSymbols; 52fe6060f1SDimitry Andric extern bool InfoPlist; 53fe6060f1SDimitry Andric extern bool LazyBind; 54fe6060f1SDimitry Andric extern bool LeadingHeaders; 55fe6060f1SDimitry Andric extern bool LinkOptHints; 56fe6060f1SDimitry Andric extern bool ObjcMetaData; 57fe6060f1SDimitry Andric extern bool Rebase; 58fe6060f1SDimitry Andric extern bool Rpaths; 59fe6060f1SDimitry Andric extern bool SymbolicOperands; 60fe6060f1SDimitry Andric extern bool UniversalHeaders; 61fe6060f1SDimitry Andric extern bool Verbose; 62fe6060f1SDimitry Andric extern bool WeakBind; 635ffd83dbSDimitry Andric 645ffd83dbSDimitry Andric Error getMachORelocationValueString(const object::MachOObjectFile *Obj, 655ffd83dbSDimitry Andric const object::RelocationRef &RelRef, 665ffd83dbSDimitry Andric llvm::SmallVectorImpl<char> &Result); 675ffd83dbSDimitry Andric 68*bdd1243dSDimitry Andric const object::MachOObjectFile * 69*bdd1243dSDimitry Andric getMachODSymObject(const object::MachOObjectFile *O, StringRef Filename, 70*bdd1243dSDimitry Andric std::unique_ptr<object::Binary> &DSYMBinary, 71*bdd1243dSDimitry Andric std::unique_ptr<MemoryBuffer> &DSYMBuf); 72*bdd1243dSDimitry Andric 735ffd83dbSDimitry Andric void parseInputMachO(StringRef Filename); 745ffd83dbSDimitry Andric void parseInputMachO(object::MachOUniversalBinary *UB); 755ffd83dbSDimitry Andric 765ffd83dbSDimitry Andric void printMachOUnwindInfo(const object::MachOObjectFile *O); 775ffd83dbSDimitry Andric void printMachOFileHeader(const object::ObjectFile *O); 785ffd83dbSDimitry Andric void printMachOLoadCommands(const object::ObjectFile *O); 795ffd83dbSDimitry Andric 805ffd83dbSDimitry Andric void printExportsTrie(const object::ObjectFile *O); 815ffd83dbSDimitry Andric void printRebaseTable(object::ObjectFile *O); 825ffd83dbSDimitry Andric void printBindTable(object::ObjectFile *O); 835ffd83dbSDimitry Andric void printLazyBindTable(object::ObjectFile *O); 845ffd83dbSDimitry Andric void printWeakBindTable(object::ObjectFile *O); 855ffd83dbSDimitry Andric 865ffd83dbSDimitry Andric } // namespace objdump 875ffd83dbSDimitry Andric } // namespace llvm 885ffd83dbSDimitry Andric 895ffd83dbSDimitry Andric #endif 90