Lines Matching defs:MachO

9 // This file implements the MachO-specific dumper for llvm-objdump.
20 #include "llvm/BinaryFormat/MachO.h"
36 #include "llvm/Object/MachO.h"
143 // We've inferred a 32-bit ARM target from the object file. All MachO CPUs
229 case MachO::DICE_KIND_DATA:
249 if (Kind == MachO::DICE_KIND_DATA)
254 case MachO::DICE_KIND_JUMP_TABLE8:
261 case MachO::DICE_KIND_JUMP_TABLE16:
269 case MachO::DICE_KIND_JUMP_TABLE32:
270 case MachO::DICE_KIND_ABS_JUMP_TABLE32:
275 if (Kind == MachO::DICE_KIND_JUMP_TABLE32)
301 if (Command.C.cmd == MachO::LC_FUNCTION_STARTS) {
304 MachO::linkedit_data_command LLC =
308 } else if (Command.C.cmd == MachO::LC_SEGMENT) {
309 MachO::segment_command SLC = MachOObj->getSegmentLoadCommand(Command);
315 } else if (Command.C.cmd == MachO::LC_SEGMENT_64) {
316 MachO::segment_command_64 SLC = MachOObj->getSegment64LoadCommand(Command);
341 if ((Kind == MachO::DICE_KIND_JUMP_TABLE8) &&
350 const MachO::any_relocation_info &RE,
387 if (O->getAnyRelocationType(RE) == MachO::ARM64_RELOC_ADDEND &&
426 MachO::any_relocation_info RE = Obj->getRelocation(Rel);
441 case MachO::X86_64_RELOC_GOT_LOAD:
442 case MachO::X86_64_RELOC_GOT: {
449 case MachO::X86_64_RELOC_SUBTRACTOR: {
452 MachO::any_relocation_info RENext = Obj->getRelocation(RelNext);
458 if (RType != MachO::X86_64_RELOC_UNSIGNED)
469 case MachO::X86_64_RELOC_TLV:
475 case MachO::X86_64_RELOC_SIGNED_1:
479 case MachO::X86_64_RELOC_SIGNED_2:
483 case MachO::X86_64_RELOC_SIGNED_4:
496 case MachO::GENERIC_RELOC_PAIR: // prints no info
498 case MachO::GENERIC_RELOC_SECTDIFF: {
501 MachO::any_relocation_info RENext = Obj->getRelocation(RelNext);
507 if (RType != MachO::GENERIC_RELOC_PAIR)
520 case MachO::GENERIC_RELOC_LOCAL_SECTDIFF: {
523 MachO::any_relocation_info RENext = Obj->getRelocation(RelNext);
528 if (RType != MachO::GENERIC_RELOC_PAIR)
537 case MachO::GENERIC_RELOC_TLV: {
549 case MachO::ARM_RELOC_HALF:
550 case MachO::ARM_RELOC_HALF_SECTDIFF: {
563 MachO::any_relocation_info RENext = Obj->getRelocation(RelNext);
568 if (RType != MachO::ARM_RELOC_PAIR)
579 if (Type == MachO::ARM_RELOC_HALF_SECTDIFF) {
603 MachO::dysymtab_command Dysymtab = O->getDysymtabLoadCommand();
613 if (cputype & MachO::CPU_ARCH_ABI64)
622 if (cputype & MachO::CPU_ARCH_ABI64)
626 MachO::dysymtab_command Dysymtab = O->getDysymtabLoadCommand();
628 if (indirect_symbol == MachO::INDIRECT_SYMBOL_LOCAL) {
633 (MachO::INDIRECT_SYMBOL_LOCAL | MachO::INDIRECT_SYMBOL_ABS)) {
637 if (indirect_symbol == MachO::INDIRECT_SYMBOL_ABS) {
643 MachO::symtab_command Symtab = O->getSymtabLoadCommand();
658 if (Load.C.cmd == MachO::LC_SEGMENT_64) {
659 MachO::segment_command_64 Seg = O->getSegment64LoadCommand(Load);
661 MachO::section_64 Sec = O->getSection64(Load, J);
662 uint32_t section_type = Sec.flags & MachO::SECTION_TYPE;
663 if (section_type == MachO::S_NON_LAZY_SYMBOL_POINTERS ||
664 section_type == MachO::S_LAZY_SYMBOL_POINTERS ||
665 section_type == MachO::S_LAZY_DYLIB_SYMBOL_POINTERS ||
666 section_type == MachO::S_THREAD_LOCAL_VARIABLE_POINTERS ||
667 section_type == MachO::S_SYMBOL_STUBS) {
669 if (section_type == MachO::S_SYMBOL_STUBS)
686 } else if (Load.C.cmd == MachO::LC_SEGMENT) {
687 MachO::segment_command Seg = O->getSegmentLoadCommand(Load);
689 MachO::section Sec = O->getSection(Load, J);
690 uint32_t section_type = Sec.flags & MachO::SECTION_TYPE;
691 if (section_type == MachO::S_NON_LAZY_SYMBOL_POINTERS ||
692 section_type == MachO::S_LAZY_SYMBOL_POINTERS ||
693 section_type == MachO::S_LAZY_DYLIB_SYMBOL_POINTERS ||
694 section_type == MachO::S_THREAD_LOCAL_VARIABLE_POINTERS ||
695 section_type == MachO::S_SYMBOL_STUBS) {
697 if (section_type == MachO::S_SYMBOL_STUBS)
745 case MachO::CPU_TYPE_I386:
748 case MachO::CPU_TYPE_X86_64:
751 case MachO::CPU_TYPE_ARM:
754 case MachO::CPU_TYPE_ARM64:
755 case MachO::CPU_TYPE_ARM64_32:
765 if (cputype == MachO::CPU_TYPE_ARM &&
766 (r_type == MachO::ARM_RELOC_HALF ||
767 r_type == MachO::ARM_RELOC_HALF_SECTDIFF || previous_arm_half == true)) {
788 if (cputype == MachO::CPU_TYPE_X86_64)
804 const MachO::symtab_command Symtab = O->getSymtabLoadCommand();
811 const MachO::any_relocation_info RE = O->getRelocation(Rel);
824 if (r_scattered && cputype != MachO::CPU_TYPE_X86_64) {
827 if ((cputype == MachO::CPU_TYPE_I386 &&
828 r_type == MachO::GENERIC_RELOC_PAIR) ||
829 (cputype == MachO::CPU_TYPE_ARM && r_type == MachO::ARM_RELOC_PAIR))
850 if ((cputype == MachO::CPU_TYPE_ARM &&
851 r_type == MachO::ARM_RELOC_PAIR))
853 } else if (cputype == MachO::CPU_TYPE_ARM &&
854 sectdiff_r_type == MachO::ARM_RELOC_HALF_SECTDIFF)
856 if ((cputype == MachO::CPU_TYPE_I386 &&
857 (r_type == MachO::GENERIC_RELOC_SECTDIFF ||
858 r_type == MachO::GENERIC_RELOC_LOCAL_SECTDIFF)) ||
859 (cputype == MachO::CPU_TYPE_ARM &&
860 (sectdiff_r_type == MachO::ARM_RELOC_SECTDIFF ||
861 sectdiff_r_type == MachO::ARM_RELOC_LOCAL_SECTDIFF ||
862 sectdiff_r_type == MachO::ARM_RELOC_HALF_SECTDIFF))) {
869 if (cputype == MachO::CPU_TYPE_ARM &&
870 (r_type == MachO::ARM_RELOC_HALF ||
871 r_type == MachO::ARM_RELOC_HALF_SECTDIFF))
887 if (cputype == MachO::CPU_TYPE_ARM && r_type == MachO::ARM_RELOC_PAIR)
929 if (cputype == MachO::CPU_TYPE_ARM && r_type == MachO::ARM_RELOC_PAIR)
931 else if ((cputype == MachO::CPU_TYPE_ARM64 ||
932 cputype == MachO::CPU_TYPE_ARM64_32) &&
933 r_type == MachO::ARM64_RELOC_ADDEND)
937 if (r_symbolnum == MachO::R_ABS)
957 if (cputype == MachO::CPU_TYPE_ARM &&
958 (r_type == MachO::ARM_RELOC_HALF ||
959 r_type == MachO::ARM_RELOC_HALF_SECTDIFF))
976 const MachO::dysymtab_command Dysymtab = O->getDysymtabLoadCommand();
994 if (Load.C.cmd == MachO::LC_SEGMENT_64) {
995 const MachO::segment_command_64 Seg = O->getSegment64LoadCommand(Load);
997 const MachO::section_64 Sec = O->getSection64(Load, J);
1014 } else if (Load.C.cmd == MachO::LC_SEGMENT) {
1015 const MachO::segment_command Seg = O->getSegmentLoadCommand(Load);
1017 const MachO::section Sec = O->getSection(Load, J);
1041 if (Command.C.cmd == MachO::LC_SEGMENT) {
1042 MachO::segment_command SLC = O->getSegmentLoadCommand(Command);
1047 } else if (Command.C.cmd == MachO::LC_SEGMENT_64) {
1048 MachO::segment_command_64 SLC = O->getSegment64LoadCommand(Command);
1058 if (LC.C.cmd == MachO::LC_FUNCTION_STARTS) {
1059 MachO::linkedit_data_command FunctionStartsLC =
1103 MachO::linkedit_data_command DIC = O->getDataInCodeLoadCommand();
1104 uint32_t nentries = DIC.datasize / sizeof(struct MachO::data_in_code_entry);
1119 case MachO::DICE_KIND_DATA:
1122 case MachO::DICE_KIND_JUMP_TABLE8:
1125 case MachO::DICE_KIND_JUMP_TABLE16:
1128 case MachO::DICE_KIND_JUMP_TABLE32:
1131 case MachO::DICE_KIND_ABS_JUMP_TABLE32:
1145 MachO::linkedit_data_command LohLC = O->getLinkOptHintsLoadCommand();
1204 if (Command.C.cmd == MachO::LC_SEGMENT) {
1205 MachO::segment_command SLC = O->getSegmentLoadCommand(Command);
1207 } else if (Command.C.cmd == MachO::LC_SEGMENT_64) {
1208 MachO::segment_command_64 SLC = O->getSegment64LoadCommand(Command);
1216 PrintChainedFixupsHeader(const MachO::dyld_chained_fixups_header &H) {
1226 case llvm::MachO::DYLD_CHAINED_IMPORT:
1229 case llvm::MachO::DYLD_CHAINED_IMPORT_ADDEND:
1232 case llvm::MachO::DYLD_CHAINED_IMPORT_ADDEND64:
1239 if (H.symbols_format == llvm::MachO::DYLD_CHAINED_SYMBOL_ZLIB)
1269 MachO::DYLD_CHAINED_PTR_ARM64E_USERLAND24)
1281 if (PageStart == MachO::DYLD_CHAINED_PTR_START_NONE)
1289 if (Format == MachO::DYLD_CHAINED_IMPORT)
1291 else if (Format == MachO::DYLD_CHAINED_IMPORT_ADDEND)
1293 else if (Format == MachO::DYLD_CHAINED_IMPORT_ADDEND64)
1303 if (Format != MachO::DYLD_CHAINED_IMPORT)
1390 if (Entry.flags() & MachO::BIND_SYMBOL_FLAGS_WEAK_IMPORT)
1409 if ((JustId && Load.C.cmd == MachO::LC_ID_DYLIB) ||
1410 (!JustId && (Load.C.cmd == MachO::LC_ID_DYLIB ||
1411 Load.C.cmd == MachO::LC_LOAD_DYLIB ||
1412 Load.C.cmd == MachO::LC_LOAD_WEAK_DYLIB ||
1413 Load.C.cmd == MachO::LC_REEXPORT_DYLIB ||
1414 Load.C.cmd == MachO::LC_LAZY_LOAD_DYLIB ||
1415 Load.C.cmd == MachO::LC_LOAD_UPWARD_DYLIB))) {
1416 MachO::dylib_command dl = O->getDylibIDLoadCommand(Load);
1431 if (Load.C.cmd == MachO::LC_LOAD_WEAK_DYLIB)
1433 if (Load.C.cmd == MachO::LC_REEXPORT_DYLIB)
1435 if (Load.C.cmd == MachO::LC_LOAD_UPWARD_DYLIB)
1437 if (Load.C.cmd == MachO::LC_LAZY_LOAD_DYLIB)
1443 if (Load.C.cmd == MachO::LC_ID_DYLIB)
1445 else if (Load.C.cmd == MachO::LC_LOAD_DYLIB)
1447 else if (Load.C.cmd == MachO::LC_LOAD_WEAK_DYLIB)
1449 else if (Load.C.cmd == MachO::LC_LAZY_LOAD_DYLIB)
1451 else if (Load.C.cmd == MachO::LC_REEXPORT_DYLIB)
1453 else if (Load.C.cmd == MachO::LC_LOAD_UPWARD_DYLIB)
1465 if (Command.C.cmd == MachO::LC_RPATH) {
1657 const MachO::section_64 Sec = O->getSection64(Ref);
1658 section_type = Sec.flags & MachO::SECTION_TYPE;
1660 const MachO::section Sec = O->getSection(Ref);
1661 section_type = Sec.flags & MachO::SECTION_TYPE;
1663 if (section_type == MachO::S_CSTRING_LITERALS ||
1664 section_type == MachO::S_4BYTE_LITERALS ||
1665 section_type == MachO::S_8BYTE_LITERALS ||
1666 section_type == MachO::S_16BYTE_LITERALS)
1677 MachO::any_relocation_info RE;
1747 const MachO::section_64 Sec = O->getSection64(Ref);
1748 section_type = Sec.flags & MachO::SECTION_TYPE;
1750 const MachO::section Sec = O->getSection(Ref);
1751 section_type = Sec.flags & MachO::SECTION_TYPE;
1759 case MachO::S_CSTRING_LITERALS:
1766 case MachO::S_4BYTE_LITERALS:
1777 case MachO::S_8BYTE_LITERALS: {
1792 case MachO::S_16BYTE_LITERALS: {
1827 MachO::any_relocation_info RE;
1881 if (cputype == MachO::CPU_TYPE_I386 || cputype == MachO::CPU_TYPE_X86_64) {
1961 const MachO::section_64 Sec = O->getSection64(Ref);
1965 const MachO::section Sec = O->getSection(Ref);
1968 uint32_t section_type = section_flags & MachO::SECTION_TYPE;
1981 if ((section_flags & MachO::S_ATTR_PURE_INSTRUCTIONS) ||
1982 (section_flags & MachO::S_ATTR_SOME_INSTRUCTIONS)) {
1995 case MachO::S_REGULAR:
1998 case MachO::S_ZEROFILL:
2001 case MachO::S_CSTRING_LITERALS:
2004 case MachO::S_4BYTE_LITERALS:
2007 case MachO::S_8BYTE_LITERALS:
2010 case MachO::S_16BYTE_LITERALS:
2013 case MachO::S_LITERAL_POINTERS:
2017 case MachO::S_MOD_INIT_FUNC_POINTERS:
2018 case MachO::S_MOD_TERM_FUNC_POINTERS:
2029 if (section_type == MachO::S_ZEROFILL)
2069 auto *MachO = dyn_cast<MachOObjectFile>(O);
2071 if (!MachO || ArchAll || ArchFlags.empty())
2074 MachO::mach_header H;
2075 MachO::mach_header_64 H_64;
2078 if (MachO->is64Bit()) {
2079 H_64 = MachO->MachOObjectFile::getHeader64();
2083 H = MachO->MachOObjectFile::getHeader();
2159 if (MachOOF->getHeader().filetype == MachO::MH_KEXT_BUNDLE &&
2160 MachOOF->getHeader().cputype == MachO::CPU_TYPE_ARM64)
2235 case MachO::CPU_TYPE_I386:
2237 case MachO::CPU_SUBTYPE_I386_ALL:
2246 case MachO::CPU_TYPE_X86_64:
2248 case MachO::CPU_SUBTYPE_X86_64_ALL:
2252 case MachO::CPU_SUBTYPE_X86_64_H:
2261 case MachO::CPU_TYPE_ARM:
2263 case MachO::CPU_SUBTYPE_ARM_ALL:
2267 case MachO::CPU_SUBTYPE_ARM_V4T:
2271 case MachO::CPU_SUBTYPE_ARM_V5TEJ:
2275 case MachO::CPU_SUBTYPE_ARM_XSCALE:
2279 case MachO::CPU_SUBTYPE_ARM_V6:
2283 case MachO::CPU_SUBTYPE_ARM_V6M:
2287 case MachO::CPU_SUBTYPE_ARM_V7:
2291 case MachO::CPU_SUBTYPE_ARM_V7EM:
2295 case MachO::CPU_SUBTYPE_ARM_V7K:
2299 case MachO::CPU_SUBTYPE_ARM_V7M:
2303 case MachO::CPU_SUBTYPE_ARM_V7S:
2312 case MachO::CPU_TYPE_ARM64:
2313 switch (cpusubtype & ~MachO::CPU_SUBTYPE_MASK) {
2314 case MachO::CPU_SUBTYPE_ARM64_ALL:
2318 case MachO::CPU_SUBTYPE_ARM64_V8:
2322 case MachO::CPU_SUBTYPE_ARM64E:
2331 case MachO::CPU_TYPE_ARM64_32:
2332 switch (cpusubtype & ~MachO::CPU_SUBTYPE_MASK) {
2333 case MachO::CPU_SUBTYPE_ARM64_32_V8:
2352 if (UB->getMagic() == MachO::FAT_MAGIC)
2354 else // UB->getMagic() == MachO::FAT_MAGIC_64
2357 outs() << "fat_magic " << format("0x%" PRIx32, MachO::FAT_MAGIC) << "\n";
2362 uint64_t big_size = sizeof(struct MachO::fat_header) +
2363 nfat_arch * sizeof(struct MachO::fat_arch);
2382 (cpusubtype & ~MachO::CPU_SUBTYPE_MASK) ==
2383 (other_cpusubtype & ~MachO::CPU_SUBTYPE_MASK)) {
2390 printCPUType(cputype, cpusubtype & ~MachO::CPU_SUBTYPE_MASK);
2394 outs() << " cpusubtype " << (cpusubtype & ~MachO::CPU_SUBTYPE_MASK)
2398 (cpusubtype & MachO::CPU_SUBTYPE_MASK) == MachO::CPU_SUBTYPE_LIB64)
2403 (cpusubtype & MachO::CPU_SUBTYPE_MASK) >> 24) << "\n";
2827 if (info->O->getHeader().filetype != MachO::MH_OBJECT) {
2840 MachO::any_relocation_info RE;
2854 if (r_type == MachO::GENERIC_RELOC_SECTDIFF ||
2855 r_type == MachO::GENERIC_RELOC_LOCAL_SECTDIFF) {
2858 MachO::any_relocation_info RENext;
2884 if (reloc_found && (r_type == MachO::GENERIC_RELOC_SECTDIFF ||
2885 r_type == MachO::GENERIC_RELOC_LOCAL_SECTDIFF)) {
2910 if (info->O->getHeader().filetype != MachO::MH_OBJECT) {
2914 MachO::any_relocation_info RE;
2952 MachO::any_relocation_info RE;
2979 if (Type == MachO::X86_64_RELOC_SUBTRACTOR) {
2982 MachO::any_relocation_info RENext = info->O->getRelocation(RelNext);
2986 if (TypeNext == MachO::X86_64_RELOC_UNSIGNED && isExternNext) {
3005 if (info->O->getHeader().filetype != MachO::MH_OBJECT) {
3017 MachO::any_relocation_info RE;
3046 if (r_type == MachO::ARM_RELOC_HALF ||
3047 r_type == MachO::ARM_RELOC_SECTDIFF ||
3048 r_type == MachO::ARM_RELOC_LOCAL_SECTDIFF ||
3049 r_type == MachO::ARM_RELOC_HALF_SECTDIFF) {
3052 MachO::any_relocation_info RENext;
3065 case MachO::ARM_RELOC_HALF:
3083 if (isExtern == 0 && (r_type == MachO::ARM_RELOC_BR24 ||
3084 r_type == MachO::ARM_THUMB_RELOC_BR22))
3088 if (r_type == MachO::ARM_RELOC_HALF ||
3089 r_type == MachO::ARM_RELOC_HALF_SECTDIFF) {
3095 if (r_scattered && (r_type != MachO::ARM_RELOC_HALF &&
3096 r_type != MachO::ARM_RELOC_HALF_SECTDIFF)) {
3101 if (r_type == MachO::ARM_RELOC_HALF_SECTDIFF) {
3125 if (r_type == MachO::ARM_RELOC_HALF) {
3142 if (info->O->getHeader().filetype != MachO::MH_OBJECT) {
3163 MachO::any_relocation_info RE = info->O->getRelocation(Rel);
3165 if (r_type == MachO::ARM64_RELOC_ADDEND) {
3168 MachO::any_relocation_info RENext = info->O->getRelocation(RelNext);
3184 case MachO::ARM64_RELOC_PAGE21:
3188 case MachO::ARM64_RELOC_PAGEOFF12:
3192 case MachO::ARM64_RELOC_GOT_LOAD_PAGE21:
3196 case MachO::ARM64_RELOC_GOT_LOAD_PAGEOFF12:
3200 case MachO::ARM64_RELOC_TLVP_LOAD_PAGE21:
3204 case MachO::ARM64_RELOC_TLVP_LOAD_PAGEOFF12:
3209 case MachO::ARM64_RELOC_BRANCH26:
3224 if (Load.C.cmd == MachO::LC_SEGMENT_64) {
3225 MachO::segment_command_64 Seg = info->O->getSegment64LoadCommand(Load);
3227 MachO::section_64 Sec = info->O->getSection64(Load, J);
3228 uint32_t section_type = Sec.flags & MachO::SECTION_TYPE;
3229 if (section_type == MachO::S_CSTRING_LITERALS &&
3245 } else if (Load.C.cmd == MachO::LC_SEGMENT) {
3246 MachO::segment_command Seg = info->O->getSegmentLoadCommand(Load);
3248 MachO::section Sec = info->O->getSection(Load, J);
3249 uint32_t section_type = Sec.flags & MachO::SECTION_TYPE;
3250 if (section_type == MachO::S_CSTRING_LITERALS &&
3277 MachO::dysymtab_command Dysymtab = info->O->getDysymtabLoadCommand();
3278 MachO::symtab_command Symtab = info->O->getSymtabLoadCommand();
3280 if (Load.C.cmd == MachO::LC_SEGMENT_64) {
3281 MachO::segment_command_64 Seg = info->O->getSegment64LoadCommand(Load);
3283 MachO::section_64 Sec = info->O->getSection64(Load, J);
3284 uint32_t section_type = Sec.flags & MachO::SECTION_TYPE;
3285 if ((section_type == MachO::S_NON_LAZY_SYMBOL_POINTERS ||
3286 section_type == MachO::S_LAZY_SYMBOL_POINTERS ||
3287 section_type == MachO::S_LAZY_DYLIB_SYMBOL_POINTERS ||
3288 section_type == MachO::S_THREAD_LOCAL_VARIABLE_POINTERS ||
3289 section_type == MachO::S_SYMBOL_STUBS) &&
3293 if (section_type == MachO::S_SYMBOL_STUBS)
3311 } else if (Load.C.cmd == MachO::LC_SEGMENT) {
3312 MachO::segment_command Seg = info->O->getSegmentLoadCommand(Load);
3314 MachO::section Sec = info->O->getSection(Load, J);
3315 uint32_t section_type = Sec.flags & MachO::SECTION_TYPE;
3316 if ((section_type == MachO::S_NON_LAZY_SYMBOL_POINTERS ||
3317 section_type == MachO::S_LAZY_SYMBOL_POINTERS ||
3318 section_type == MachO::S_LAZY_DYLIB_SYMBOL_POINTERS ||
3319 section_type == MachO::S_THREAD_LOCAL_VARIABLE_POINTERS ||
3320 section_type == MachO::S_SYMBOL_STUBS) &&
3324 if (section_type == MachO::S_SYMBOL_STUBS)
3431 if (Load.C.cmd == MachO::LC_SEGMENT_64) {
3432 MachO::segment_command_64 Seg = info->O->getSegment64LoadCommand(Load);
3434 MachO::section_64 Sec = info->O->getSection64(Load, J);
3544 MachO::any_relocation_info RE;
3603 // public defintions. So the are here not in include/llvm/BinaryFormat/MachO.h
6798 MachO::mach_header H;
6800 if (H.cputype == MachO::CPU_TYPE_ARM)
6837 if (info->O->getHeader().filetype == MachO::MH_OBJECT) {
6842 MachO::any_relocation_info RE;
6866 if (Type == MachO::X86_64_RELOC_SIGNED) {
7204 const MachO::mach_header_64 H_64 = MachOOF->getHeader64();
7208 const MachO::mach_header H = MachOOF->getHeader();
7370 MachO::mach_header Header = MachOOF->getHeader();
7389 if (Header.filetype == MachO::MH_OBJECT)
8243 if (magic == MachO::MH_MAGIC)
8245 else if (magic == MachO::MH_MAGIC_64)
8250 case MachO::CPU_TYPE_I386:
8252 switch (cpusubtype & ~MachO::CPU_SUBTYPE_MASK) {
8253 case MachO::CPU_SUBTYPE_I386_ALL:
8257 outs() << format(" %10d", cpusubtype & ~MachO::CPU_SUBTYPE_MASK);
8261 case MachO::CPU_TYPE_X86_64:
8263 switch (cpusubtype & ~MachO::CPU_SUBTYPE_MASK) {
8264 case MachO::CPU_SUBTYPE_X86_64_ALL:
8267 case MachO::CPU_SUBTYPE_X86_64_H:
8271 outs() << format(" %10d", cpusubtype & ~MachO::CPU_SUBTYPE_MASK);
8275 case MachO::CPU_TYPE_ARM:
8277 switch (cpusubtype & ~MachO::CPU_SUBTYPE_MASK) {
8278 case MachO::CPU_SUBTYPE_ARM_ALL:
8281 case MachO::CPU_SUBTYPE_ARM_V4T:
8284 case MachO::CPU_SUBTYPE_ARM_V5TEJ:
8287 case MachO::CPU_SUBTYPE_ARM_XSCALE:
8290 case MachO::CPU_SUBTYPE_ARM_V6:
8293 case MachO::CPU_SUBTYPE_ARM_V6M:
8296 case MachO::CPU_SUBTYPE_ARM_V7:
8299 case MachO::CPU_SUBTYPE_ARM_V7EM:
8302 case MachO::CPU_SUBTYPE_ARM_V7K:
8305 case MachO::CPU_SUBTYPE_ARM_V7M:
8308 case MachO::CPU_SUBTYPE_ARM_V7S:
8312 outs() << format(" %10d", cpusubtype & ~MachO::CPU_SUBTYPE_MASK);
8316 case MachO::CPU_TYPE_ARM64:
8318 switch (cpusubtype & ~MachO::CPU_SUBTYPE_MASK) {
8319 case MachO::CPU_SUBTYPE_ARM64_ALL:
8322 case MachO::CPU_SUBTYPE_ARM64_V8:
8325 case MachO::CPU_SUBTYPE_ARM64E:
8329 outs() << format(" %10d", cpusubtype & ~MachO::CPU_SUBTYPE_MASK);
8333 case MachO::CPU_TYPE_ARM64_32:
8335 switch (cpusubtype & ~MachO::CPU_SUBTYPE_MASK) {
8336 case MachO::CPU_SUBTYPE_ARM64_32_V8:
8340 outs() << format(" %10d", cpusubtype & ~MachO::CPU_SUBTYPE_MASK);
8344 case MachO::CPU_TYPE_POWERPC:
8346 switch (cpusubtype & ~MachO::CPU_SUBTYPE_MASK) {
8347 case MachO::CPU_SUBTYPE_POWERPC_ALL:
8351 outs() << format(" %10d", cpusubtype & ~MachO::CPU_SUBTYPE_MASK);
8355 case MachO::CPU_TYPE_POWERPC64:
8357 switch (cpusubtype & ~MachO::CPU_SUBTYPE_MASK) {
8358 case MachO::CPU_SUBTYPE_POWERPC_ALL:
8362 outs() << format(" %10d", cpusubtype & ~MachO::CPU_SUBTYPE_MASK);
8368 outs() << format(" %10d", cpusubtype & ~MachO::CPU_SUBTYPE_MASK);
8371 if ((cpusubtype & MachO::CPU_SUBTYPE_MASK) == MachO::CPU_SUBTYPE_LIB64) {
8375 (cpusubtype & MachO::CPU_SUBTYPE_MASK) >> 24);
8378 case MachO::MH_OBJECT:
8381 case MachO::MH_EXECUTE:
8384 case MachO::MH_FVMLIB:
8387 case MachO::MH_CORE:
8390 case MachO::MH_PRELOAD:
8393 case MachO::MH_DYLIB:
8396 case MachO::MH_DYLIB_STUB:
8399 case MachO::MH_DYLINKER:
8402 case MachO::MH_BUNDLE:
8405 case MachO::MH_DSYM:
8408 case MachO::MH_KEXT_BUNDLE:
8411 case MachO::MH_FILESET:
8421 if (f & MachO::MH_NOUNDEFS) {
8423 f &= ~MachO::MH_NOUNDEFS;
8425 if (f & MachO::MH_INCRLINK) {
8427 f &= ~MachO::MH_INCRLINK;
8429 if (f & MachO::MH_DYLDLINK) {
8431 f &= ~MachO::MH_DYLDLINK;
8433 if (f & MachO::MH_BINDATLOAD) {
8435 f &= ~MachO::MH_BINDATLOAD;
8437 if (f & MachO::MH_PREBOUND) {
8439 f &= ~MachO::MH_PREBOUND;
8441 if (f & MachO::MH_SPLIT_SEGS) {
8443 f &= ~MachO::MH_SPLIT_SEGS;
8445 if (f & MachO::MH_LAZY_INIT) {
8447 f &= ~MachO::MH_LAZY_INIT;
8449 if (f & MachO::MH_TWOLEVEL) {
8451 f &= ~MachO::MH_TWOLEVEL;
8453 if (f & MachO::MH_FORCE_FLAT) {
8455 f &= ~MachO::MH_FORCE_FLAT;
8457 if (f & MachO::MH_NOMULTIDEFS) {
8459 f &= ~MachO::MH_NOMULTIDEFS;
8461 if (f & MachO::MH_NOFIXPREBINDING) {
8463 f &= ~MachO::MH_NOFIXPREBINDING;
8465 if (f & MachO::MH_PREBINDABLE) {
8467 f &= ~MachO::MH_PREBINDABLE;
8469 if (f & MachO::MH_ALLMODSBOUND) {
8471 f &= ~MachO::MH_ALLMODSBOUND;
8473 if (f & MachO::MH_SUBSECTIONS_VIA_SYMBOLS) {
8475 f &= ~MachO::MH_SUBSECTIONS_VIA_SYMBOLS;
8477 if (f & MachO::MH_CANONICAL) {
8479 f &= ~MachO::MH_CANONICAL;
8481 if (f & MachO::MH_WEAK_DEFINES) {
8483 f &= ~MachO::MH_WEAK_DEFINES;
8485 if (f & MachO::MH_BINDS_TO_WEAK) {
8487 f &= ~MachO::MH_BINDS_TO_WEAK;
8489 if (f & MachO::MH_ALLOW_STACK_EXECUTION) {
8491 f &= ~MachO::MH_ALLOW_STACK_EXECUTION;
8493 if (f & MachO::MH_DEAD_STRIPPABLE_DYLIB) {
8495 f &= ~MachO::MH_DEAD_STRIPPABLE_DYLIB;
8497 if (f & MachO::MH_PIE) {
8499 f &= ~MachO::MH_PIE;
8501 if (f & MachO::MH_NO_REEXPORTED_DYLIBS) {
8503 f &= ~MachO::MH_NO_REEXPORTED_DYLIBS;
8505 if (f & MachO::MH_HAS_TLV_DESCRIPTORS) {
8507 f &= ~MachO::MH_HAS_TLV_DESCRIPTORS;
8509 if (f & MachO::MH_NO_HEAP_EXECUTION) {
8511 f &= ~MachO::MH_NO_HEAP_EXECUTION;
8513 if (f & MachO::MH_APP_EXTENSION_SAFE) {
8515 f &= ~MachO::MH_APP_EXTENSION_SAFE;
8517 if (f & MachO::MH_NLIST_OUTOFSYNC_WITH_DYLDINFO) {
8519 f &= ~MachO::MH_NLIST_OUTOFSYNC_WITH_DYLDINFO;
8526 outs() << format(" %10d", cpusubtype & ~MachO::CPU_SUBTYPE_MASK);
8528 (cpusubtype & MachO::CPU_SUBTYPE_MASK) >> 24);
8545 if (cmd == MachO::LC_SEGMENT) {
8548 expected_cmdsize *= sizeof(struct MachO::section);
8549 expected_cmdsize += sizeof(struct MachO::segment_command);
8553 expected_cmdsize *= sizeof(struct MachO::section_64);
8554 expected_cmdsize += sizeof(struct MachO::segment_command_64);
8562 if (cmd == MachO::LC_SEGMENT_64) {
8581 ~(MachO::VM_PROT_READ | MachO::VM_PROT_WRITE |
8582 MachO::VM_PROT_EXECUTE)) != 0)
8586 outs() << ((maxprot & MachO::VM_PROT_READ) ? "r" : "-");
8587 outs() << ((maxprot & MachO::VM_PROT_WRITE) ? "w" : "-");
8588 outs() << ((maxprot & MachO::VM_PROT_EXECUTE) ? "x\n" : "-\n");
8591 ~(MachO::VM_PROT_READ | MachO::VM_PROT_WRITE |
8592 MachO::VM_PROT_EXECUTE)) != 0)
8596 outs() << ((initprot & MachO::VM_PROT_READ) ? "r" : "-");
8597 outs() << ((initprot & MachO::VM_PROT_WRITE) ? "w" : "-");
8598 outs() << ((initprot & MachO::VM_PROT_EXECUTE) ? "x\n" : "-\n");
8610 if (flags & MachO::SG_HIGHVM) {
8612 flags &= ~MachO::SG_HIGHVM;
8614 if (flags & MachO::SG_FVMLIB) {
8616 flags &= ~MachO::SG_FVMLIB;
8618 if (flags & MachO::SG_NORELOC) {
8620 flags &= ~MachO::SG_NORELOC;
8622 if (flags & MachO::SG_PROTECTED_VERSION_1) {
8624 flags &= ~MachO::SG_PROTECTED_VERSION_1;
8626 if (flags & MachO::SG_READ_ONLY) {
8630 flags &= ~MachO::SG_READ_ONLY;
8652 if (filetype != MachO::MH_OBJECT && strncmp(sg_segname, segname, 16) != 0)
8656 if (cmd == MachO::LC_SEGMENT_64) {
8663 if ((flags & MachO::S_ZEROFILL) != 0 && offset + size > object_size)
8680 if (reloff + nreloc * sizeof(struct MachO::relocation_info) > object_size)
8684 uint32_t section_type = flags & MachO::SECTION_TYPE;
8687 if (section_type == MachO::S_REGULAR)
8689 else if (section_type == MachO::S_ZEROFILL)
8691 else if (section_type == MachO::S_CSTRING_LITERALS)
8693 else if (section_type == MachO::S_4BYTE_LITERALS)
8695 else if (section_type == MachO::S_8BYTE_LITERALS)
8697 else if (section_type == MachO::S_16BYTE_LITERALS)
8699 else if (section_type == MachO::S_LITERAL_POINTERS)
8701 else if (section_type == MachO::S_NON_LAZY_SYMBOL_POINTERS)
8703 else if (section_type == MachO::S_LAZY_SYMBOL_POINTERS)
8705 else if (section_type == MachO::S_SYMBOL_STUBS)
8707 else if (section_type == MachO::S_MOD_INIT_FUNC_POINTERS)
8709 else if (section_type == MachO::S_MOD_TERM_FUNC_POINTERS)
8711 else if (section_type == MachO::S_COALESCED)
8713 else if (section_type == MachO::S_INTERPOSING)
8715 else if (section_type == MachO::S_DTRACE_DOF)
8717 else if (section_type == MachO::S_LAZY_DYLIB_SYMBOL_POINTERS)
8719 else if (section_type == MachO::S_THREAD_LOCAL_REGULAR)
8721 else if (section_type == MachO::S_THREAD_LOCAL_ZEROFILL)
8723 else if (section_type == MachO::S_THREAD_LOCAL_VARIABLES)
8725 else if (section_type == MachO::S_THREAD_LOCAL_VARIABLE_POINTERS)
8727 else if (section_type == MachO::S_THREAD_LOCAL_INIT_FUNCTION_POINTERS)
8729 else if (section_type == MachO::S_INIT_FUNC_OFFSETS)
8734 uint32_t section_attributes = flags & MachO::SECTION_ATTRIBUTES;
8735 if (section_attributes & MachO::S_ATTR_PURE_INSTRUCTIONS)
8737 if (section_attributes & MachO::S_ATTR_NO_TOC)
8739 if (section_attributes & MachO::S_ATTR_STRIP_STATIC_SYMS)
8741 if (section_attributes & MachO::S_ATTR_NO_DEAD_STRIP)
8743 if (section_attributes & MachO::S_ATTR_LIVE_SUPPORT)
8745 if (section_attributes & MachO::S_ATTR_SELF_MODIFYING_CODE)
8747 if (section_attributes & MachO::S_ATTR_DEBUG)
8749 if (section_attributes & MachO::S_ATTR_SOME_INSTRUCTIONS)
8751 if (section_attributes & MachO::S_ATTR_EXT_RELOC)
8753 if (section_attributes & MachO::S_ATTR_LOC_RELOC)
8761 if (section_type == MachO::S_SYMBOL_STUBS ||
8762 section_type == MachO::S_LAZY_SYMBOL_POINTERS ||
8763 section_type == MachO::S_LAZY_DYLIB_SYMBOL_POINTERS ||
8764 section_type == MachO::S_NON_LAZY_SYMBOL_POINTERS ||
8765 section_type == MachO::S_THREAD_LOCAL_VARIABLE_POINTERS)
8770 if (section_type == MachO::S_SYMBOL_STUBS)
8776 static void PrintSymtabLoadCommand(MachO::symtab_command st, bool Is64Bit,
8780 if (st.cmdsize != sizeof(struct MachO::symtab_command))
8793 big_size *= sizeof(struct MachO::nlist_64);
8801 big_size *= sizeof(struct MachO::nlist);
8822 static void PrintDysymtabLoadCommand(MachO::dysymtab_command dyst,
8827 if (dyst.cmdsize != sizeof(struct MachO::dysymtab_command))
8875 big_size *= sizeof(struct MachO::dylib_table_of_contents);
8890 modtabend *= sizeof(struct MachO::dylib_module_64);
8894 modtabend *= sizeof(struct MachO::dylib_module);
8908 big_size *= sizeof(struct MachO::dylib_reference);
8934 big_size *= sizeof(struct MachO::relocation_info);
8947 big_size *= sizeof(struct MachO::relocation_info);
8955 static void PrintDyldInfoLoadCommand(MachO::dyld_info_command dc,
8957 if (dc.cmd == MachO::LC_DYLD_INFO)
8962 if (dc.cmdsize != sizeof(struct MachO::dyld_info_command))
9029 static void PrintDyldLoadCommand(MachO::dylinker_command dyld,
9031 if (dyld.cmd == MachO::LC_ID_DYLINKER)
9033 else if (dyld.cmd == MachO::LC_LOAD_DYLINKER)
9035 else if (dyld.cmd == MachO::LC_DYLD_ENVIRONMENT)
9040 if (dyld.cmdsize < sizeof(struct MachO::dylinker_command))
9052 static void PrintUuidLoadCommand(MachO::uuid_command uuid) {
9055 if (uuid.cmdsize != sizeof(struct MachO::uuid_command))
9068 static void PrintRpathLoadCommand(MachO::rpath_command rpath, const char *Ptr) {
9071 if (rpath.cmdsize < sizeof(struct MachO::rpath_command))
9083 static void PrintVersionMinLoadCommand(MachO::version_min_command vd) {
9086 case MachO::LC_VERSION_MIN_MACOSX:
9089 case MachO::LC_VERSION_MIN_IPHONEOS:
9092 case MachO::LC_VERSION_MIN_TVOS:
9095 case MachO::LC_VERSION_MIN_WATCHOS:
9104 if (vd.cmdsize != sizeof(struct MachO::version_min_command))
9128 static void PrintNoteLoadCommand(MachO::note_command Nt) {
9131 if (Nt.cmdsize != sizeof(struct MachO::note_command))
9141 static void PrintBuildToolVersion(MachO::build_tool_version bv, bool verbose) {
9153 MachO::build_version_command bd,
9158 sizeof(struct MachO::build_version_command) +
9159 bd.ntools * sizeof(struct MachO::build_tool_version))
9178 MachO::build_tool_version bv = obj->getBuildToolVersion(i);
9183 static void PrintSourceVersionCommand(MachO::source_version_command sd) {
9186 if (sd.cmdsize != sizeof(struct MachO::source_version_command))
9205 static void PrintEntryPointCommand(MachO::entry_point_command ep) {
9208 if (ep.cmdsize != sizeof(struct MachO::entry_point_command))
9216 static void PrintEncryptionInfoCommand(MachO::encryption_info_command ec,
9220 if (ec.cmdsize != sizeof(struct MachO::encryption_info_command))
9237 static void PrintEncryptionInfoCommand64(MachO::encryption_info_command_64 ec,
9241 if (ec.cmdsize != sizeof(struct MachO::encryption_info_command_64))
9259 static void PrintLinkerOptionCommand(MachO::linker_option_command lo,
9263 if (lo.cmdsize < sizeof(struct MachO::linker_option_command))
9268 const char *string = Ptr + sizeof(struct MachO::linker_option_command);
9269 uint32_t left = lo.cmdsize - sizeof(struct MachO::linker_option_command);
9290 static void PrintSubFrameworkCommand(MachO::sub_framework_command sub,
9294 if (sub.cmdsize < sizeof(struct MachO::sub_framework_command))
9306 static void PrintSubUmbrellaCommand(MachO::sub_umbrella_command sub,
9310 if (sub.cmdsize < sizeof(struct MachO::sub_umbrella_command))
9322 static void PrintSubLibraryCommand(MachO::sub_library_command sub,
9326 if (sub.cmdsize < sizeof(struct MachO::sub_library_command))
9338 static void PrintSubClientCommand(MachO::sub_client_command sub,
9342 if (sub.cmdsize < sizeof(struct MachO::sub_client_command))
9354 static void PrintRoutinesCommand(MachO::routines_command r) {
9357 if (r.cmdsize != sizeof(struct MachO::routines_command))
9371 static void PrintRoutinesCommand64(MachO::routines_command_64 r) {
9374 if (r.cmdsize != sizeof(struct MachO::routines_command_64))
9388 static void Print_x86_thread_state32_t(MachO::x86_thread_state32_t &cpu32) {
9407 static void Print_x86_thread_state64_t(MachO::x86_thread_state64_t &cpu64) {
9431 static void Print_mmst_reg(MachO::mmst_reg_t &r) {
9443 static void Print_xmm_reg(MachO::xmm_reg_t &r) {
9451 static void Print_x86_float_state_t(MachO::x86_float_state64_t &fpu) {
9461 if (fpu.fpu_fcw.pc == MachO::x86_FP_PREC_24B)
9463 else if (fpu.fpu_fcw.pc == MachO::x86_FP_PREC_53B)
9465 else if (fpu.fpu_fcw.pc == MachO::x86_FP_PREC_64B)
9470 if (fpu.fpu_fcw.rc == MachO::x86_FP_RND_NEAR)
9472 else if (fpu.fpu_fcw.rc == MachO::x86_FP_RND_DOWN)
9474 else if (fpu.fpu_fcw.rc == MachO::x86_FP_RND_UP)
9476 else if (fpu.fpu_fcw.rc == MachO::x86_FP_CHOP)
9564 static void Print_x86_exception_state_t(MachO::x86_exception_state64_t &exc64) {
9570 static void Print_arm_thread_state32_t(MachO::arm_thread_state32_t &cpu32) {
9590 static void Print_arm_thread_state64_t(MachO::arm_thread_state64_t &cpu64) {
9627 static void PrintThreadCommand(MachO::thread_command t, const char *Ptr,
9629 if (t.cmd == MachO::LC_THREAD)
9631 else if (t.cmd == MachO::LC_UNIXTHREAD)
9636 if (t.cmdsize < sizeof(struct MachO::thread_command) + 2 * sizeof(uint32_t))
9641 const char *begin = Ptr + sizeof(struct MachO::thread_command);
9644 if (cputype == MachO::CPU_TYPE_I386) {
9664 if (flavor == MachO::x86_THREAD_STATE32) {
9666 if (count == MachO::x86_THREAD_STATE32_COUNT)
9671 MachO::x86_thread_state32_t cpu32;
9673 if (left >= sizeof(MachO::x86_thread_state32_t)) {
9674 memcpy(&cpu32, begin, sizeof(MachO::x86_thread_state32_t));
9675 begin += sizeof(MachO::x86_thread_state32_t);
9677 memset(&cpu32, '\0', sizeof(MachO::x86_thread_state32_t));
9684 } else if (flavor == MachO::x86_THREAD_STATE) {
9686 if (count == MachO::x86_THREAD_STATE_COUNT)
9691 struct MachO::x86_thread_state_t ts;
9693 if (left >= sizeof(MachO::x86_thread_state_t)) {
9694 memcpy(&ts, begin, sizeof(MachO::x86_thread_state_t));
9695 begin += sizeof(MachO::x86_thread_state_t);
9697 memset(&ts, '\0', sizeof(MachO::x86_thread_state_t));
9703 if (ts.tsh.flavor == MachO::x86_THREAD_STATE32) {
9705 if (ts.tsh.count == MachO::x86_THREAD_STATE32_COUNT)
9722 } else if (cputype == MachO::CPU_TYPE_X86_64) {
9742 if (flavor == MachO::x86_THREAD_STATE64) {
9744 if (count == MachO::x86_THREAD_STATE64_COUNT)
9749 MachO::x86_thread_state64_t cpu64;
9751 if (left >= sizeof(MachO::x86_thread_state64_t)) {
9752 memcpy(&cpu64, begin, sizeof(MachO::x86_thread_state64_t));
9753 begin += sizeof(MachO::x86_thread_state64_t);
9755 memset(&cpu64, '\0', sizeof(MachO::x86_thread_state64_t));
9762 } else if (flavor == MachO::x86_THREAD_STATE) {
9764 if (count == MachO::x86_THREAD_STATE_COUNT)
9769 struct MachO::x86_thread_state_t ts;
9771 if (left >= sizeof(MachO::x86_thread_state_t)) {
9772 memcpy(&ts, begin, sizeof(MachO::x86_thread_state_t));
9773 begin += sizeof(MachO::x86_thread_state_t);
9775 memset(&ts, '\0', sizeof(MachO::x86_thread_state_t));
9781 if (ts.tsh.flavor == MachO::x86_THREAD_STATE64) {
9783 if (ts.tsh.count == MachO::x86_THREAD_STATE64_COUNT)
9793 } else if (flavor == MachO::x86_FLOAT_STATE) {
9795 if (count == MachO::x86_FLOAT_STATE_COUNT)
9799 struct MachO::x86_float_state_t fs;
9801 if (left >= sizeof(MachO::x86_float_state_t)) {
9802 memcpy(&fs, begin, sizeof(MachO::x86_float_state_t));
9803 begin += sizeof(MachO::x86_float_state_t);
9805 memset(&fs, '\0', sizeof(MachO::x86_float_state_t));
9811 if (fs.fsh.flavor == MachO::x86_FLOAT_STATE64) {
9813 if (fs.fsh.count == MachO::x86_FLOAT_STATE64_COUNT)
9823 } else if (flavor == MachO::x86_EXCEPTION_STATE) {
9825 if (count == MachO::x86_EXCEPTION_STATE_COUNT)
9830 struct MachO::x86_exception_state_t es;
9832 if (left >= sizeof(MachO::x86_exception_state_t)) {
9833 memcpy(&es, begin, sizeof(MachO::x86_exception_state_t));
9834 begin += sizeof(MachO::x86_exception_state_t);
9836 memset(&es, '\0', sizeof(MachO::x86_exception_state_t));
9842 if (es.esh.flavor == MachO::x86_EXCEPTION_STATE64) {
9844 if (es.esh.count == MachO::x86_EXCEPTION_STATE64_COUNT)
9854 } else if (flavor == MachO::x86_EXCEPTION_STATE64) {
9856 if (count == MachO::x86_EXCEPTION_STATE64_COUNT)
9861 struct MachO::x86_exception_state64_t es64;
9863 if (left >= sizeof(MachO::x86_exception_state64_t)) {
9864 memcpy(&es64, begin, sizeof(MachO::x86_exception_state64_t));
9865 begin += sizeof(MachO::x86_exception_state64_t);
9867 memset(&es64, '\0', sizeof(MachO::x86_exception_state64_t));
9881 } else if (cputype == MachO::CPU_TYPE_ARM) {
9901 if (flavor == MachO::ARM_THREAD_STATE) {
9903 if (count == MachO::ARM_THREAD_STATE_COUNT)
9908 MachO::arm_thread_state32_t cpu32;
9910 if (left >= sizeof(MachO::arm_thread_state32_t)) {
9911 memcpy(&cpu32, begin, sizeof(MachO::arm_thread_state32_t));
9912 begin += sizeof(MachO::arm_thread_state32_t);
9914 memset(&cpu32, '\0', sizeof(MachO::arm_thread_state32_t));
9928 } else if (cputype == MachO::CPU_TYPE_ARM64 ||
9929 cputype == MachO::CPU_TYPE_ARM64_32) {
9949 if (flavor == MachO::ARM_THREAD_STATE64) {
9951 if (count == MachO::ARM_THREAD_STATE64_COUNT)
9956 MachO::arm_thread_state64_t cpu64;
9958 if (left >= sizeof(MachO::arm_thread_state64_t)) {
9959 memcpy(&cpu64, begin, sizeof(MachO::arm_thread_state64_t));
9960 begin += sizeof(MachO::arm_thread_state64_t);
9962 memset(&cpu64, '\0', sizeof(MachO::arm_thread_state64_t));
10004 static void PrintDylibCommand(MachO::dylib_command dl, const char *Ptr) {
10005 if (dl.cmd == MachO::LC_ID_DYLIB)
10007 else if (dl.cmd == MachO::LC_LOAD_DYLIB)
10009 else if (dl.cmd == MachO::LC_LOAD_WEAK_DYLIB)
10011 else if (dl.cmd == MachO::LC_REEXPORT_DYLIB)
10013 else if (dl.cmd == MachO::LC_LAZY_LOAD_DYLIB)
10015 else if (dl.cmd == MachO::LC_LOAD_UPWARD_DYLIB)
10020 if (dl.cmdsize < sizeof(struct MachO::dylib_command))
10049 static void PrintLinkEditDataCommand(MachO::linkedit_data_command ld,
10051 if (ld.cmd == MachO::LC_CODE_SIGNATURE)
10053 else if (ld.cmd == MachO::LC_SEGMENT_SPLIT_INFO)
10055 else if (ld.cmd == MachO::LC_FUNCTION_STARTS)
10057 else if (ld.cmd == MachO::LC_DATA_IN_CODE)
10059 else if (ld.cmd == MachO::LC_DYLIB_CODE_SIGN_DRS)
10061 else if (ld.cmd == MachO::LC_LINKER_OPTIMIZATION_HINT)
10063 else if (ld.cmd == MachO::LC_DYLD_EXPORTS_TRIE)
10065 else if (ld.cmd == MachO::LC_DYLD_CHAINED_FIXUPS)
10067 else if (ld.cmd == MachO::LC_ATOM_INFO)
10072 if (ld.cmdsize != sizeof(struct MachO::linkedit_data_command))
10096 if (Command.C.cmd == MachO::LC_SEGMENT) {
10097 MachO::segment_command SLC = Obj->getSegmentLoadCommand(Command);
10104 MachO::section S = Obj->getSection(Command, j);
10109 } else if (Command.C.cmd == MachO::LC_SEGMENT_64) {
10110 MachO::segment_command_64 SLC_64 = Obj->getSegment64LoadCommand(Command);
10117 MachO::section_64 S_64 = Obj->getSection64(Command, j);
10123 } else if (Command.C.cmd == MachO::LC_SYMTAB) {
10124 MachO::symtab_command Symtab = Obj->getSymtabLoadCommand();
10126 } else if (Command.C.cmd == MachO::LC_DYSYMTAB) {
10127 MachO::dysymtab_command Dysymtab = Obj->getDysymtabLoadCommand();
10128 MachO::symtab_command Symtab = Obj->getSymtabLoadCommand();
10131 } else if (Command.C.cmd == MachO::LC_DYLD_INFO ||
10132 Command.C.cmd == MachO::LC_DYLD_INFO_ONLY) {
10133 MachO::dyld_info_command DyldInfo = Obj->getDyldInfoLoadCommand(Command);
10135 } else if (Command.C.cmd == MachO::LC_LOAD_DYLINKER ||
10136 Command.C.cmd == MachO::LC_ID_DYLINKER ||
10137 Command.C.cmd == MachO::LC_DYLD_ENVIRONMENT) {
10138 MachO::dylinker_command Dyld = Obj->getDylinkerCommand(Command);
10140 } else if (Command.C.cmd == MachO::LC_UUID) {
10141 MachO::uuid_command Uuid = Obj->getUuidCommand(Command);
10143 } else if (Command.C.cmd == MachO::LC_RPATH) {
10144 MachO::rpath_command Rpath = Obj->getRpathCommand(Command);
10146 } else if (Command.C.cmd == MachO::LC_VERSION_MIN_MACOSX ||
10147 Command.C.cmd == MachO::LC_VERSION_MIN_IPHONEOS ||
10148 Command.C.cmd == MachO::LC_VERSION_MIN_TVOS ||
10149 Command.C.cmd == MachO::LC_VERSION_MIN_WATCHOS) {
10150 MachO::version_min_command Vd = Obj->getVersionMinLoadCommand(Command);
10152 } else if (Command.C.cmd == MachO::LC_NOTE) {
10153 MachO::note_command Nt = Obj->getNoteLoadCommand(Command);
10155 } else if (Command.C.cmd == MachO::LC_BUILD_VERSION) {
10156 MachO::build_version_command Bv =
10159 } else if (Command.C.cmd == MachO::LC_SOURCE_VERSION) {
10160 MachO::source_version_command Sd = Obj->getSourceVersionCommand(Command);
10162 } else if (Command.C.cmd == MachO::LC_MAIN) {
10163 MachO::entry_point_command Ep = Obj->getEntryPointCommand(Command);
10165 } else if (Command.C.cmd == MachO::LC_ENCRYPTION_INFO) {
10166 MachO::encryption_info_command Ei =
10169 } else if (Command.C.cmd == MachO::LC_ENCRYPTION_INFO_64) {
10170 MachO::encryption_info_command_64 Ei =
10173 } else if (Command.C.cmd == MachO::LC_LINKER_OPTION) {
10174 MachO::linker_option_command Lo =
10177 } else if (Command.C.cmd == MachO::LC_SUB_FRAMEWORK) {
10178 MachO::sub_framework_command Sf = Obj->getSubFrameworkCommand(Command);
10180 } else if (Command.C.cmd == MachO::LC_SUB_UMBRELLA) {
10181 MachO::sub_umbrella_command Sf = Obj->getSubUmbrellaCommand(Command);
10183 } else if (Command.C.cmd == MachO::LC_SUB_LIBRARY) {
10184 MachO::sub_library_command Sl = Obj->getSubLibraryCommand(Command);
10186 } else if (Command.C.cmd == MachO::LC_SUB_CLIENT) {
10187 MachO::sub_client_command Sc = Obj->getSubClientCommand(Command);
10189 } else if (Command.C.cmd == MachO::LC_ROUTINES) {
10190 MachO::routines_command Rc = Obj->getRoutinesCommand(Command);
10192 } else if (Command.C.cmd == MachO::LC_ROUTINES_64) {
10193 MachO::routines_command_64 Rc = Obj->getRoutinesCommand64(Command);
10195 } else if (Command.C.cmd == MachO::LC_THREAD ||
10196 Command.C.cmd == MachO::LC_UNIXTHREAD) {
10197 MachO::thread_command Tc = Obj->getThreadCommand(Command);
10199 } else if (Command.C.cmd == MachO::LC_LOAD_DYLIB ||
10200 Command.C.cmd == MachO::LC_ID_DYLIB ||
10201 Command.C.cmd == MachO::LC_LOAD_WEAK_DYLIB ||
10202 Command.C.cmd == MachO::LC_REEXPORT_DYLIB ||
10203 Command.C.cmd == MachO::LC_LAZY_LOAD_DYLIB ||
10204 Command.C.cmd == MachO::LC_LOAD_UPWARD_DYLIB) {
10205 MachO::dylib_command Dl = Obj->getDylibIDLoadCommand(Command);
10207 } else if (Command.C.cmd == MachO::LC_CODE_SIGNATURE ||
10208 Command.C.cmd == MachO::LC_SEGMENT_SPLIT_INFO ||
10209 Command.C.cmd == MachO::LC_FUNCTION_STARTS ||
10210 Command.C.cmd == MachO::LC_DATA_IN_CODE ||
10211 Command.C.cmd == MachO::LC_DYLIB_CODE_SIGN_DRS ||
10212 Command.C.cmd == MachO::LC_LINKER_OPTIMIZATION_HINT ||
10213 Command.C.cmd == MachO::LC_DYLD_EXPORTS_TRIE ||
10214 Command.C.cmd == MachO::LC_DYLD_CHAINED_FIXUPS ||
10215 Command.C.cmd == MachO::LC_ATOM_INFO) {
10216 MachO::linkedit_data_command Ld =
10231 MachO::mach_header_64 H_64;
10236 MachO::mach_header H;
10259 MachO::mach_header_64 H_64;
10264 MachO::mach_header H;
10279 if (Command.C.cmd == MachO::LC_SEGMENT) {
10280 MachO::segment_command Seg = Obj->getSegmentLoadCommand(Command);
10285 } else if (Command.C.cmd == MachO::LC_SEGMENT_64) {
10286 MachO::segment_command_64 Seg = Obj->getSegment64LoadCommand(Command);
10296 bool ReExport = (Flags & MachO::EXPORT_SYMBOL_FLAGS_REEXPORT);
10297 bool WeakDef = (Flags & MachO::EXPORT_SYMBOL_FLAGS_WEAK_DEFINITION);
10298 bool ThreadLocal = ((Flags & MachO::EXPORT_SYMBOL_FLAGS_KIND_MASK) ==
10299 MachO::EXPORT_SYMBOL_FLAGS_KIND_THREAD_LOCAL);
10300 bool Abs = ((Flags & MachO::EXPORT_SYMBOL_FLAGS_KIND_MASK) ==
10301 MachO::EXPORT_SYMBOL_FLAGS_KIND_ABSOLUTE);
10302 bool Resolver = (Flags & MachO::EXPORT_SYMBOL_FLAGS_STUB_AND_RESOLVER);
10361 case MachO::BIND_SPECIAL_DYLIB_SELF:
10363 case MachO::BIND_SPECIAL_DYLIB_MAIN_EXECUTABLE:
10365 case MachO::BIND_SPECIAL_DYLIB_FLAT_LOOKUP:
10367 case MachO::BIND_SPECIAL_DYLIB_WEAK_LOOKUP:
10398 if (Entry.flags() & MachO::BIND_SYMBOL_FLAGS_WEAK_IMPORT)
10447 if (Entry.flags() & MachO::BIND_SYMBOL_FLAGS_NON_WEAK_DEFINITION) {
10493 if (MachOObjectFile *MachO = dyn_cast<MachOObjectFile>(o))
10494 printMachOLazyBindTable(MachO);
10503 if (MachOObjectFile *MachO = dyn_cast<MachOObjectFile>(o))
10504 printMachOWeakBindTable(MachO);
10513 if (const MachOObjectFile *MachO = dyn_cast<MachOObjectFile>(o))
10514 printMachOExportsTrie(MachO);
10523 if (MachOObjectFile *MachO = dyn_cast<MachOObjectFile>(o))
10524 printMachORebaseTable(MachO);
10533 if (MachOObjectFile *MachO = dyn_cast<MachOObjectFile>(o))
10534 printMachOBindTable(MachO);