#include "MachODump.h"
#include "ObjdumpOptID.h"
#include "llvm-objdump.h"
#include "llvm-c/Disassembler.h"
#include "llvm/ADT/STLExtras.h"
#include "llvm/ADT/StringExtras.h"
#include "llvm/BinaryFormat/MachO.h"
#include "llvm/Config/config.h"
#include "llvm/DebugInfo/DIContext.h"
#include "llvm/DebugInfo/DWARF/DWARFContext.h"
#include "llvm/Demangle/Demangle.h"
#include "llvm/MC/MCAsmInfo.h"
#include "llvm/MC/MCContext.h"
#include "llvm/MC/MCDisassembler/MCDisassembler.h"
#include "llvm/MC/MCInst.h"
#include "llvm/MC/MCInstPrinter.h"
#include "llvm/MC/MCInstrDesc.h"
#include "llvm/MC/MCInstrInfo.h"
#include "llvm/MC/MCRegisterInfo.h"
#include "llvm/MC/MCSubtargetInfo.h"
#include "llvm/MC/MCTargetOptions.h"
#include "llvm/MC/TargetRegistry.h"
#include "llvm/Object/MachO.h"
#include "llvm/Object/MachOUniversal.h"
#include "llvm/Option/ArgList.h"
#include "llvm/Support/Casting.h"
#include "llvm/Support/Debug.h"
#include "llvm/Support/Endian.h"
#include "llvm/Support/Format.h"
#include "llvm/Support/FormattedStream.h"
#include "llvm/Support/GraphWriter.h"
#include "llvm/Support/LEB128.h"
#include "llvm/Support/MemoryBuffer.h"
#include "llvm/Support/TargetSelect.h"
#include "llvm/Support/ToolOutputFile.h"
#include "llvm/Support/WithColor.h"
#include "llvm/Support/raw_ostream.h"
#include "llvm/TargetParser/Triple.h"
#include <algorithm>
#include <cstring>
#include <system_error>
usingnamespacellvm;
usingnamespacellvm::object;
usingnamespacellvm::objdump;
bool objdump::FirstPrivateHeader;
bool objdump::ExportsTrie;
bool objdump::Rebase;
bool objdump::Rpaths;
bool objdump::Bind;
bool objdump::LazyBind;
bool objdump::WeakBind;
static bool UseDbg;
static std::string DSYMFile;
bool objdump::FullLeadingAddr;
bool objdump::LeadingHeaders;
bool objdump::UniversalHeaders;
static bool ArchiveMemberOffsets;
bool objdump::IndirectSymbols;
bool objdump::DataInCode;
FunctionStartsMode objdump::FunctionStartsType = …;
bool objdump::LinkOptHints;
bool objdump::InfoPlist;
bool objdump::ChainedFixups;
bool objdump::DyldInfo;
bool objdump::DylibsUsed;
bool objdump::DylibId;
bool objdump::Verbose;
bool objdump::ObjcMetaData;
std::string objdump::DisSymName;
bool objdump::SymbolicOperands;
static std::vector<std::string> ArchFlags;
static bool ArchAll = …;
static std::string ThumbTripleName;
static StringRef ordinalName(const object::MachOObjectFile *, int);
void objdump::parseMachOOptions(const llvm::opt::InputArgList &InputArgs) { … }
static const Target *GetTarget(const MachOObjectFile *MachOObj,
const char **McpuDefault,
const Target **ThumbTarget) { … }
namespace {
struct SymbolSorter { … };
class MachODumper : public Dumper { … };
}
std::unique_ptr<Dumper>
objdump::createMachODumper(const object::MachOObjectFile &Obj) { … }
DiceTableEntry;
DiceTable;
dice_table_iterator;
static bool compareDiceTableEntries(const DiceTableEntry &i,
const DiceTableEntry &j) { … }
static uint64_t DumpDataInCode(const uint8_t *bytes, uint64_t Length,
unsigned short Kind) { … }
static void getSectionsAndSymbols(MachOObjectFile *MachOObj,
std::vector<SectionRef> &Sections,
std::vector<SymbolRef> &Symbols,
SmallVectorImpl<uint64_t> &FoundFns,
uint64_t &BaseSegmentAddress) { … }
static bool DumpAndSkipDataInCode(uint64_t PC, const uint8_t *bytes,
DiceTable &Dices, uint64_t &InstSize) { … }
static void printRelocationTargetName(const MachOObjectFile *O,
const MachO::any_relocation_info &RE,
raw_string_ostream &Fmt) { … }
Error objdump::getMachORelocationValueString(const MachOObjectFile *Obj,
const RelocationRef &RelRef,
SmallVectorImpl<char> &Result) { … }
static void PrintIndirectSymbolTable(MachOObjectFile *O, bool verbose,
uint32_t n, uint32_t count,
uint32_t stride, uint64_t addr) { … }
static void PrintIndirectSymbols(MachOObjectFile *O, bool verbose) { … }
static void PrintRType(const uint64_t cputype, const unsigned r_type) { … }
static void PrintRLength(const uint64_t cputype, const unsigned r_type,
const unsigned r_length, const bool previous_arm_half){ … }
static void PrintRelocationEntries(const MachOObjectFile *O,
const relocation_iterator Begin,
const relocation_iterator End,
const uint64_t cputype,
const bool verbose) { … }
static void PrintRelocations(const MachOObjectFile *O, const bool verbose) { … }
static void PrintFunctionStarts(MachOObjectFile *O) { … }
static void PrintDataInCodeTable(MachOObjectFile *O, bool verbose) { … }
static void PrintLinkOptHints(MachOObjectFile *O) { … }
static SmallVector<std::string> GetSegmentNames(object::MachOObjectFile *O) { … }
static void
PrintChainedFixupsHeader(const MachO::dyld_chained_fixups_header &H) { … }
static constexpr std::array<StringRef, 13> PointerFormats{ … };
static void PrintChainedFixupsSegment(const ChainedFixupsSegment &Segment,
StringRef SegName) { … }
static void PrintChainedFixupTarget(ChainedFixupTarget &Target, size_t Idx,
int Format, MachOObjectFile *O) { … }
static void PrintChainedFixups(MachOObjectFile *O) { … }
static void PrintDyldInfo(MachOObjectFile *O) { … }
static void PrintDylibs(MachOObjectFile *O, bool JustId) { … }
static void printRpaths(MachOObjectFile *O) { … }
SymbolAddressMap;
static void CreateSymbolAddressMap(MachOObjectFile *O,
SymbolAddressMap *AddrMap) { … }
static const char *GuessSymbolName(uint64_t value, SymbolAddressMap *AddrMap) { … }
static void DumpCstringChar(const char c) { … }
static void DumpCstringSection(MachOObjectFile *O, const char *sect,
uint32_t sect_size, uint64_t sect_addr,
bool print_addresses) { … }
static void DumpLiteral4(uint32_t l, float f) { … }
static void DumpLiteral4Section(MachOObjectFile *O, const char *sect,
uint32_t sect_size, uint64_t sect_addr,
bool print_addresses) { … }
static void DumpLiteral8(MachOObjectFile *O, uint32_t l0, uint32_t l1,
double d) { … }
static void DumpLiteral8Section(MachOObjectFile *O, const char *sect,
uint32_t sect_size, uint64_t sect_addr,
bool print_addresses) { … }
static void DumpLiteral16(uint32_t l0, uint32_t l1, uint32_t l2, uint32_t l3) { … }
static void DumpLiteral16Section(MachOObjectFile *O, const char *sect,
uint32_t sect_size, uint64_t sect_addr,
bool print_addresses) { … }
static void DumpLiteralPointerSection(MachOObjectFile *O,
const SectionRef &Section,
const char *sect, uint32_t sect_size,
uint64_t sect_addr,
bool print_addresses) { … }
static void DumpInitTermPointerSection(MachOObjectFile *O,
const SectionRef &Section,
const char *sect,
uint32_t sect_size, uint64_t sect_addr,
SymbolAddressMap *AddrMap,
bool verbose) { … }
static void DumpRawSectionContents(MachOObjectFile *O, const char *sect,
uint32_t size, uint64_t addr) { … }
static void DisassembleMachO(StringRef Filename, MachOObjectFile *MachOOF,
StringRef DisSegName, StringRef DisSectName);
static void DumpProtocolSection(MachOObjectFile *O, const char *sect,
uint32_t size, uint32_t addr);
static void DumpSectionContents(StringRef Filename, MachOObjectFile *O,
bool verbose) { … }
static void DumpInfoPlistSectionContents(StringRef Filename,
MachOObjectFile *O) { … }
static bool checkMachOAndArchFlags(ObjectFile *O, StringRef Filename) { … }
static void printObjcMetaData(MachOObjectFile *O, bool verbose);
static void ProcessMachO(StringRef Name, MachOObjectFile *MachOOF,
StringRef ArchiveMemberName = StringRef(),
StringRef ArchitectureName = StringRef()) { … }
static void printUnknownCPUType(uint32_t cputype, uint32_t cpusubtype) { … }
static void printCPUType(uint32_t cputype, uint32_t cpusubtype) { … }
static void printMachOUniversalHeaders(const object::MachOUniversalBinary *UB,
bool verbose) { … }
static void printArchiveChild(StringRef Filename, const Archive::Child &C,
size_t ChildIndex, bool verbose,
bool print_offset,
StringRef ArchitectureName = StringRef()) { … }
static void printArchiveHeaders(StringRef Filename, Archive *A, bool verbose,
bool print_offset,
StringRef ArchitectureName = StringRef()) { … }
static bool ValidateArchFlags() { … }
void objdump::parseInputMachO(StringRef Filename) { … }
void objdump::parseInputMachO(MachOUniversalBinary *UB) { … }
namespace {
struct DisassembleInfo { … };
}
static int SymbolizerGetOpInfo(void *DisInfo, uint64_t Pc, uint64_t Offset,
uint64_t OpSize, uint64_t InstSize, int TagType,
void *TagBuf) { … }
static const char *GuessCstringPointer(uint64_t ReferenceValue,
struct DisassembleInfo *info) { … }
static const char *GuessIndirectSymbol(uint64_t ReferenceValue,
struct DisassembleInfo *info) { … }
static void method_reference(struct DisassembleInfo *info,
uint64_t *ReferenceType,
const char **ReferenceName) { … }
static uint64_t GuessPointerPointer(uint64_t ReferenceValue,
struct DisassembleInfo *info,
bool &classref, bool &selref, bool &msgref,
bool &cfstring) { … }
static const char *get_pointer_64(uint64_t Address, uint32_t &offset,
uint32_t &left, SectionRef &S,
DisassembleInfo *info,
bool objc_only = false) { … }
static const char *get_pointer_32(uint32_t Address, uint32_t &offset,
uint32_t &left, SectionRef &S,
DisassembleInfo *info,
bool objc_only = false) { … }
static const char *get_symbol_64(uint32_t sect_offset, SectionRef S,
DisassembleInfo *info, uint64_t &n_value,
uint64_t ReferenceValue = 0) { … }
static const char *get_symbol_32(uint32_t sect_offset, SectionRef S,
DisassembleInfo *info,
uint32_t ReferenceValue) { … }
namespace {
struct cfstring64_t { … };
struct class64_t { … };
struct class32_t { … };
struct class_ro64_t { … };
struct class_ro32_t { … };
#define RO_META …
#define RO_ROOT …
#define RO_HAS_CXX_STRUCTORS …
#define ML_HAS_RELATIVE_PTRS …
#define ML_ENTSIZE_MASK …
struct method_list64_t { … };
struct method_list32_t { … };
struct method64_t { … };
struct method32_t { … };
struct method_relative_t { … };
struct protocol_list64_t { … };
struct protocol_list32_t { … };
struct protocol64_t { … };
struct protocol32_t { … };
struct ivar_list64_t { … };
struct ivar_list32_t { … };
struct ivar64_t { … };
struct ivar32_t { … };
struct objc_property_list64 { … };
struct objc_property_list32 { … };
struct objc_property64 { … };
struct objc_property32 { … };
struct category64_t { … };
struct category32_t { … };
struct objc_image_info64 { … };
struct objc_image_info32 { … };
struct imageInfo_t { … };
#define OBJC_IMAGE_IS_REPLACEMENT …
#define OBJC_IMAGE_SUPPORTS_GC …
#define OBJC_IMAGE_IS_SIMULATED …
#define OBJC_IMAGE_HAS_CATEGORY_CLASS_PROPERTIES …
struct message_ref64 { … };
struct message_ref32 { … };
struct objc_module_t { … };
struct objc_symtab_t { … };
struct objc_class_t { … };
#define CLS_GETINFO(cls, infomask) …
#define CLS_CLASS …
#define CLS_META …
struct objc_category_t { … };
struct objc_ivar_t { … };
struct objc_ivar_list_t { … };
struct objc_method_list_t { … };
struct objc_method_t { … };
struct objc_protocol_list_t { … };
struct objc_protocol_t { … };
struct objc_method_description_list_t { … };
struct objc_method_description_t { … };
inline void swapStruct(struct cfstring64_t &cfs) { … }
inline void swapStruct(struct class64_t &c) { … }
inline void swapStruct(struct class32_t &c) { … }
inline void swapStruct(struct class_ro64_t &cro) { … }
inline void swapStruct(struct class_ro32_t &cro) { … }
inline void swapStruct(struct method_list64_t &ml) { … }
inline void swapStruct(struct method_list32_t &ml) { … }
inline void swapStruct(struct method64_t &m) { … }
inline void swapStruct(struct method32_t &m) { … }
inline void swapStruct(struct method_relative_t &m) { … }
inline void swapStruct(struct protocol_list64_t &pl) { … }
inline void swapStruct(struct protocol_list32_t &pl) { … }
inline void swapStruct(struct protocol64_t &p) { … }
inline void swapStruct(struct protocol32_t &p) { … }
inline void swapStruct(struct ivar_list64_t &il) { … }
inline void swapStruct(struct ivar_list32_t &il) { … }
inline void swapStruct(struct ivar64_t &i) { … }
inline void swapStruct(struct ivar32_t &i) { … }
inline void swapStruct(struct objc_property_list64 &pl) { … }
inline void swapStruct(struct objc_property_list32 &pl) { … }
inline void swapStruct(struct objc_property64 &op) { … }
inline void swapStruct(struct objc_property32 &op) { … }
inline void swapStruct(struct category64_t &c) { … }
inline void swapStruct(struct category32_t &c) { … }
inline void swapStruct(struct objc_image_info64 &o) { … }
inline void swapStruct(struct objc_image_info32 &o) { … }
inline void swapStruct(struct imageInfo_t &o) { … }
inline void swapStruct(struct message_ref64 &mr) { … }
inline void swapStruct(struct message_ref32 &mr) { … }
inline void swapStruct(struct objc_module_t &module) { … }
inline void swapStruct(struct objc_symtab_t &symtab) { … }
inline void swapStruct(struct objc_class_t &objc_class) { … }
inline void swapStruct(struct objc_category_t &objc_category) { … }
inline void swapStruct(struct objc_ivar_list_t &objc_ivar_list) { … }
inline void swapStruct(struct objc_ivar_t &objc_ivar) { … }
inline void swapStruct(struct objc_method_list_t &method_list) { … }
inline void swapStruct(struct objc_method_t &method) { … }
inline void swapStruct(struct objc_protocol_list_t &protocol_list) { … }
inline void swapStruct(struct objc_protocol_t &protocol) { … }
inline void swapStruct(struct objc_method_description_list_t &mdl) { … }
inline void swapStruct(struct objc_method_description_t &md) { … }
}
static const char *get_dyld_bind_info_symbolname(uint64_t ReferenceValue,
struct DisassembleInfo *info);
static const char *get_objc2_64bit_class_name(uint64_t pointer_value,
uint64_t ReferenceValue,
struct DisassembleInfo *info) { … }
static const char *get_objc2_64bit_cfstring_name(uint64_t ReferenceValue,
struct DisassembleInfo *info) { … }
static uint64_t get_objc2_64bit_selref(uint64_t ReferenceValue,
struct DisassembleInfo *info) { … }
static const SectionRef get_section(MachOObjectFile *O, const char *segname,
const char *sectname) { … }
static void
walk_pointer_list_64(const char *listname, const SectionRef S,
MachOObjectFile *O, struct DisassembleInfo *info,
void (*func)(uint64_t, struct DisassembleInfo *info)) { … }
static void
walk_pointer_list_32(const char *listname, const SectionRef S,
MachOObjectFile *O, struct DisassembleInfo *info,
void (*func)(uint32_t, struct DisassembleInfo *info)) { … }
static void print_layout_map(const char *layout_map, uint32_t left) { … }
static void print_layout_map64(uint64_t p, struct DisassembleInfo *info) { … }
static void print_layout_map32(uint32_t p, struct DisassembleInfo *info) { … }
static void print_relative_method_list(uint32_t structSizeAndFlags,
uint32_t structCount, uint64_t p,
struct DisassembleInfo *info,
const char *indent,
uint32_t pointerBits) { … }
static void print_method_list64_t(uint64_t p, struct DisassembleInfo *info,
const char *indent) { … }
static void print_method_list32_t(uint64_t p, struct DisassembleInfo *info,
const char *indent) { … }
static bool print_method_list(uint32_t p, struct DisassembleInfo *info) { … }
static void print_protocol_list64_t(uint64_t p, struct DisassembleInfo *info) { … }
static void print_protocol_list32_t(uint32_t p, struct DisassembleInfo *info) { … }
static void print_indent(uint32_t indent) { … }
static bool print_method_description_list(uint32_t p, uint32_t indent,
struct DisassembleInfo *info) { … }
static bool print_protocol_list(uint32_t p, uint32_t indent,
struct DisassembleInfo *info);
static bool print_protocol(uint32_t p, uint32_t indent,
struct DisassembleInfo *info) { … }
static bool print_protocol_list(uint32_t p, uint32_t indent,
struct DisassembleInfo *info) { … }
static void print_ivar_list64_t(uint64_t p, struct DisassembleInfo *info) { … }
static void print_ivar_list32_t(uint32_t p, struct DisassembleInfo *info) { … }
static void print_objc_property_list64(uint64_t p,
struct DisassembleInfo *info) { … }
static void print_objc_property_list32(uint32_t p,
struct DisassembleInfo *info) { … }
static bool print_class_ro64_t(uint64_t p, struct DisassembleInfo *info,
bool &is_meta_class) { … }
static bool print_class_ro32_t(uint32_t p, struct DisassembleInfo *info,
bool &is_meta_class) { … }
static void print_class64_t(uint64_t p, struct DisassembleInfo *info) { … }
static void print_class32_t(uint32_t p, struct DisassembleInfo *info) { … }
static void print_objc_class_t(struct objc_class_t *objc_class,
struct DisassembleInfo *info) { … }
static void print_objc_objc_category_t(struct objc_category_t *objc_category,
struct DisassembleInfo *info) { … }
static void print_category64_t(uint64_t p, struct DisassembleInfo *info) { … }
static void print_category32_t(uint32_t p, struct DisassembleInfo *info) { … }
static void print_message_refs64(SectionRef S, struct DisassembleInfo *info) { … }
static void print_message_refs32(SectionRef S, struct DisassembleInfo *info) { … }
static void print_image_info64(SectionRef S, struct DisassembleInfo *info) { … }
static void print_image_info32(SectionRef S, struct DisassembleInfo *info) { … }
static void print_image_info(SectionRef S, struct DisassembleInfo *info) { … }
static void printObjc2_64bit_MetaData(MachOObjectFile *O, bool verbose) { … }
static void printObjc2_32bit_MetaData(MachOObjectFile *O, bool verbose) { … }
static bool printObjc1_32bit_MetaData(MachOObjectFile *O, bool verbose) { … }
static void DumpProtocolSection(MachOObjectFile *O, const char *sect,
uint32_t size, uint32_t addr) { … }
static void printObjcMetaData(MachOObjectFile *O, bool verbose) { … }
static const char *GuessLiteralPointer(uint64_t ReferenceValue,
uint64_t ReferencePC,
uint64_t *ReferenceType,
struct DisassembleInfo *info) { … }
static const char *SymbolizerSymbolLookUp(void *DisInfo,
uint64_t ReferenceValue,
uint64_t *ReferenceType,
uint64_t ReferencePC,
const char **ReferenceName) { … }
static void emitComments(raw_svector_ostream &CommentStream,
SmallString<128> &CommentsToEmit,
formatted_raw_ostream &FormattedOS,
const MCAsmInfo &MAI) { … }
const MachOObjectFile *
objdump::getMachODSymObject(const MachOObjectFile *MachOOF, StringRef Filename,
std::unique_ptr<Binary> &DSYMBinary,
std::unique_ptr<MemoryBuffer> &DSYMBuf) { … }
static void DisassembleMachO(StringRef Filename, MachOObjectFile *MachOOF,
StringRef DisSegName, StringRef DisSectName) { … }
namespace {
template <typename T>
static uint64_t read(StringRef Contents, ptrdiff_t Offset) { … }
template <typename T>
static uint64_t readNext(StringRef Contents, ptrdiff_t &Offset) { … }
struct CompactUnwindEntry { … };
}
static void findUnwindRelocNameAddend(const MachOObjectFile *Obj,
std::map<uint64_t, SymbolRef> &Symbols,
const RelocationRef &Reloc, uint64_t Addr,
StringRef &Name, uint64_t &Addend) { … }
static void printUnwindRelocDest(const MachOObjectFile *Obj,
std::map<uint64_t, SymbolRef> &Symbols,
const RelocationRef &Reloc, uint64_t Addr) { … }
static void
printMachOCompactUnwindSection(const MachOObjectFile *Obj,
std::map<uint64_t, SymbolRef> &Symbols,
const SectionRef &CompactUnwind) { … }
static void printRegularSecondLevelUnwindPage(StringRef PageData) { … }
static void printCompressedSecondLevelUnwindPage(
StringRef PageData, uint32_t FunctionBase,
const SmallVectorImpl<uint32_t> &CommonEncodings) { … }
static void printMachOUnwindInfoSection(const MachOObjectFile *Obj,
std::map<uint64_t, SymbolRef> &Symbols,
const SectionRef &UnwindInfo) { … }
void objdump::printMachOUnwindInfo(const MachOObjectFile *Obj) { … }
static void PrintMachHeader(uint32_t magic, uint32_t cputype,
uint32_t cpusubtype, uint32_t filetype,
uint32_t ncmds, uint32_t sizeofcmds, uint32_t flags,
bool verbose) { … }
static void PrintSegmentCommand(uint32_t cmd, uint32_t cmdsize,
StringRef SegName, uint64_t vmaddr,
uint64_t vmsize, uint64_t fileoff,
uint64_t filesize, uint32_t maxprot,
uint32_t initprot, uint32_t nsects,
uint32_t flags, uint32_t object_size,
bool verbose) { … }
static void PrintSection(const char *sectname, const char *segname,
uint64_t addr, uint64_t size, uint32_t offset,
uint32_t align, uint32_t reloff, uint32_t nreloc,
uint32_t flags, uint32_t reserved1, uint32_t reserved2,
uint32_t cmd, const char *sg_segname,
uint32_t filetype, uint32_t object_size,
bool verbose) { … }
static void PrintSymtabLoadCommand(MachO::symtab_command st, bool Is64Bit,
uint32_t object_size) { … }
static void PrintDysymtabLoadCommand(MachO::dysymtab_command dyst,
uint32_t nsyms, uint32_t object_size,
bool Is64Bit) { … }
static void PrintDyldInfoLoadCommand(MachO::dyld_info_command dc,
uint32_t object_size) { … }
static void PrintDyldLoadCommand(MachO::dylinker_command dyld,
const char *Ptr) { … }
static void PrintUuidLoadCommand(MachO::uuid_command uuid) { … }
static void PrintRpathLoadCommand(MachO::rpath_command rpath, const char *Ptr) { … }
static void PrintVersionMinLoadCommand(MachO::version_min_command vd) { … }
static void PrintNoteLoadCommand(MachO::note_command Nt) { … }
static void PrintBuildToolVersion(MachO::build_tool_version bv, bool verbose) { … }
static void PrintBuildVersionLoadCommand(const MachOObjectFile *obj,
MachO::build_version_command bd,
bool verbose) { … }
static void PrintSourceVersionCommand(MachO::source_version_command sd) { … }
static void PrintEntryPointCommand(MachO::entry_point_command ep) { … }
static void PrintEncryptionInfoCommand(MachO::encryption_info_command ec,
uint32_t object_size) { … }
static void PrintEncryptionInfoCommand64(MachO::encryption_info_command_64 ec,
uint32_t object_size) { … }
static void PrintLinkerOptionCommand(MachO::linker_option_command lo,
const char *Ptr) { … }
static void PrintSubFrameworkCommand(MachO::sub_framework_command sub,
const char *Ptr) { … }
static void PrintSubUmbrellaCommand(MachO::sub_umbrella_command sub,
const char *Ptr) { … }
static void PrintSubLibraryCommand(MachO::sub_library_command sub,
const char *Ptr) { … }
static void PrintSubClientCommand(MachO::sub_client_command sub,
const char *Ptr) { … }
static void PrintRoutinesCommand(MachO::routines_command r) { … }
static void PrintRoutinesCommand64(MachO::routines_command_64 r) { … }
static void Print_x86_thread_state32_t(MachO::x86_thread_state32_t &cpu32) { … }
static void Print_x86_thread_state64_t(MachO::x86_thread_state64_t &cpu64) { … }
static void Print_mmst_reg(MachO::mmst_reg_t &r) { … }
static void Print_xmm_reg(MachO::xmm_reg_t &r) { … }
static void Print_x86_float_state_t(MachO::x86_float_state64_t &fpu) { … }
static void Print_x86_exception_state_t(MachO::x86_exception_state64_t &exc64) { … }
static void Print_arm_thread_state32_t(MachO::arm_thread_state32_t &cpu32) { … }
static void Print_arm_thread_state64_t(MachO::arm_thread_state64_t &cpu64) { … }
static void PrintThreadCommand(MachO::thread_command t, const char *Ptr,
bool isLittleEndian, uint32_t cputype) { … }
static void PrintDylibCommand(MachO::dylib_command dl, const char *Ptr) { … }
static void PrintLinkEditDataCommand(MachO::linkedit_data_command ld,
uint32_t object_size) { … }
static void PrintLoadCommands(const MachOObjectFile *Obj, uint32_t filetype,
uint32_t cputype, bool verbose) { … }
static void PrintMachHeader(const MachOObjectFile *Obj, bool verbose) { … }
void objdump::printMachOFileHeader(const object::ObjectFile *Obj) { … }
void MachODumper::printPrivateHeaders() { … }
void objdump::printMachOLoadCommands(const object::ObjectFile *Obj) { … }
static void printMachOExportsTrie(const object::MachOObjectFile *Obj) { … }
static void printMachORebaseTable(object::MachOObjectFile *Obj) { … }
static StringRef ordinalName(const object::MachOObjectFile *Obj, int Ordinal) { … }
static void printMachOBindTable(object::MachOObjectFile *Obj) { … }
static void printMachOLazyBindTable(object::MachOObjectFile *Obj) { … }
static void printMachOWeakBindTable(object::MachOObjectFile *Obj) { … }
static const char *get_dyld_bind_info_symbolname(uint64_t ReferenceValue,
struct DisassembleInfo *info) { … }
void objdump::printLazyBindTable(ObjectFile *o) { … }
void objdump::printWeakBindTable(ObjectFile *o) { … }
void objdump::printExportsTrie(const ObjectFile *o) { … }
void objdump::printRebaseTable(ObjectFile *o) { … }
void objdump::printBindTable(ObjectFile *o) { … }