145f8c095ad94888716ceff54daf2fdf2f2f668a4Chris Lattner//===-- llvm/Support/MachO.h - The MachO file format ------------*- C++ -*-===// 245f8c095ad94888716ceff54daf2fdf2f2f668a4Chris Lattner// 345f8c095ad94888716ceff54daf2fdf2f2f668a4Chris Lattner// The LLVM Compiler Infrastructure 445f8c095ad94888716ceff54daf2fdf2f2f668a4Chris Lattner// 545f8c095ad94888716ceff54daf2fdf2f2f668a4Chris Lattner// This file is distributed under the University of Illinois Open Source 645f8c095ad94888716ceff54daf2fdf2f2f668a4Chris Lattner// License. See LICENSE.TXT for details. 745f8c095ad94888716ceff54daf2fdf2f2f668a4Chris Lattner// 845f8c095ad94888716ceff54daf2fdf2f2f668a4Chris Lattner//===----------------------------------------------------------------------===// 945f8c095ad94888716ceff54daf2fdf2f2f668a4Chris Lattner// 1045f8c095ad94888716ceff54daf2fdf2f2f668a4Chris Lattner// This file defines manifest constants for the MachO object file format. 1145f8c095ad94888716ceff54daf2fdf2f2f668a4Chris Lattner// 1245f8c095ad94888716ceff54daf2fdf2f2f668a4Chris Lattner//===----------------------------------------------------------------------===// 1345f8c095ad94888716ceff54daf2fdf2f2f668a4Chris Lattner 1445f8c095ad94888716ceff54daf2fdf2f2f668a4Chris Lattner#ifndef LLVM_SUPPORT_MACHO_H 1545f8c095ad94888716ceff54daf2fdf2f2f668a4Chris Lattner#define LLVM_SUPPORT_MACHO_H 1645f8c095ad94888716ceff54daf2fdf2f2f668a4Chris Lattner 171f6efa3996dd1929fbc129203ce5009b620e6969Michael J. Spencer#include "llvm/Support/DataTypes.h" 1898cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton 1945f8c095ad94888716ceff54daf2fdf2f2f668a4Chris Lattner// NOTE: The enums in this file are intentially named to be different than those 2045f8c095ad94888716ceff54daf2fdf2f2f668a4Chris Lattner// in the headers in /usr/include/mach (on darwin systems) to avoid conflicts 2145f8c095ad94888716ceff54daf2fdf2f2f668a4Chris Lattner// with those macros. 2245f8c095ad94888716ceff54daf2fdf2f2f668a4Chris Lattnernamespace llvm { 2345f8c095ad94888716ceff54daf2fdf2f2f668a4Chris Lattner namespace MachO { 2498cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton // Enums from <mach-o/loader.h> 2598cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton enum { 266bbf5eb32f35c6bbef5434ba06339a10c860d86cJim Grosbach // Constants for the "magic" field in llvm::MachO::mach_header and 2798cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton // llvm::MachO::mach_header_64 2898cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton HeaderMagic32 = 0xFEEDFACEu, // MH_MAGIC 2998cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton HeaderMagic32Swapped = 0xCEFAEDFEu, // MH_CIGAM 3098cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton HeaderMagic64 = 0xFEEDFACFu, // MH_MAGIC_64 3198cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton HeaderMagic64Swapped = 0xCFFAEDFEu, // MH_CIGAM_64 3298cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton UniversalMagic = 0xCAFEBABEu, // FAT_MAGIC 3398cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton UniversalMagicSwapped = 0xBEBAFECAu, // FAT_CIGAM 3498cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton 3598cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton // Constants for the "filetype" field in llvm::MachO::mach_header and 3698cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton // llvm::MachO::mach_header_64 3798cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton HeaderFileTypeObject = 0x1u, // MH_OBJECT 3898cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton HeaderFileTypeExecutable = 0x2u, // MH_EXECUTE 3998cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton HeaderFileTypeFixedVMShlib = 0x3u, // MH_FVMLIB 4098cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton HeaderFileTypeCore = 0x4u, // MH_CORE 4198cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton HeaderFileTypePreloadedExecutable = 0x5u, // MH_PRELOAD 4298cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton HeaderFileTypeDynamicShlib = 0x6u, // MH_DYLIB 4398cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton HeaderFileTypeDynamicLinkEditor = 0x7u, // MH_DYLINKER 4498cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton HeaderFileTypeBundle = 0x8u, // MH_BUNDLE 4598cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton HeaderFileTypeDynamicShlibStub = 0x9u, // MH_DYLIB_STUB 4698cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton HeaderFileTypeDSYM = 0xAu, // MH_DSYM 4798cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton HeaderFileTypeKextBundle = 0xBu, // MH_KEXT_BUNDLE 4898cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton 4998cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton // Constant bits for the "flags" field in llvm::MachO::mach_header and 5098cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton // llvm::MachO::mach_header_64 5198cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton HeaderFlagBitNoUndefinedSymbols = 0x00000001u, // MH_NOUNDEFS 5298cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton HeaderFlagBitIsIncrementalLinkObject= 0x00000002u, // MH_INCRLINK 5398cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton HeaderFlagBitIsDynamicLinkObject = 0x00000004u, // MH_DYLDLINK 5498cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton HeaderFlagBitBindAtLoad = 0x00000008u, // MH_BINDATLOAD 5598cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton HeaderFlagBitPrebound = 0x00000010u, // MH_PREBOUND 5698cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton HeaderFlagBitSplitSegments = 0x00000020u, // MH_SPLIT_SEGS 5798cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton HeaderFlagBitLazyInit = 0x00000040u, // MH_LAZY_INIT 5898cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton HeaderFlagBitTwoLevelNamespace = 0x00000080u, // MH_TWOLEVEL 5998cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton HeaderFlagBitForceFlatNamespace = 0x00000100u, // MH_FORCE_FLAT 6098cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton HeaderFlagBitNoMultipleDefintions = 0x00000200u, // MH_NOMULTIDEFS 6198cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton HeaderFlagBitNoFixPrebinding = 0x00000400u, // MH_NOFIXPREBINDING 6298cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton HeaderFlagBitPrebindable = 0x00000800u, // MH_PREBINDABLE 6398cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton HeaderFlagBitAllModulesBound = 0x00001000u, // MH_ALLMODSBOUND 6498cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton HeaderFlagBitSubsectionsViaSymbols = 0x00002000u, // MH_SUBSECTIONS_VIA_SYMBOLS 6598cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton HeaderFlagBitCanonical = 0x00004000u, // MH_CANONICAL 6698cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton HeaderFlagBitWeakDefines = 0x00008000u, // MH_WEAK_DEFINES 6798cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton HeaderFlagBitBindsToWeak = 0x00010000u, // MH_BINDS_TO_WEAK 6898cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton HeaderFlagBitAllowStackExecution = 0x00020000u, // MH_ALLOW_STACK_EXECUTION 6998cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton HeaderFlagBitRootSafe = 0x00040000u, // MH_ROOT_SAFE 7098cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton HeaderFlagBitSetUIDSafe = 0x00080000u, // MH_SETUID_SAFE 7198cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton HeaderFlagBitNoReexportedDylibs = 0x00100000u, // MH_NO_REEXPORTED_DYLIBS 7298cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton HeaderFlagBitPIE = 0x00200000u, // MH_PIE 7398cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton HeaderFlagBitDeadStrippableDylib = 0x00400000u, // MH_DEAD_STRIPPABLE_DYLIB 746bbf5eb32f35c6bbef5434ba06339a10c860d86cJim Grosbach 7598cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton // Constants for the "cmd" field in llvm::MachO::load_command 7698cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton LoadCommandDynamicLinkerRequired = 0x80000000u, // LC_REQ_DYLD 7798cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton LoadCommandSegment32 = 0x00000001u, // LC_SEGMENT 7898cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton LoadCommandSymtab = 0x00000002u, // LC_SYMTAB 7998cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton LoadCommandSymSeg = 0x00000003u, // LC_SYMSEG 8098cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton LoadCommandThread = 0x00000004u, // LC_THREAD 8198cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton LoadCommandUnixThread = 0x00000005u, // LC_UNIXTHREAD 8298cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton LoadCommandFixedVMShlibLoad = 0x00000006u, // LC_LOADFVMLIB 8398cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton LoadCommandFixedVMShlibIdent = 0x00000007u, // LC_IDFVMLIB 8498cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton LoadCommandIdent = 0x00000008u, // LC_IDENT 8598cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton LoadCommandFixedVMFileInclusion = 0x00000009u, // LC_FVMFILE 8698cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton LoadCommandPrePage = 0x0000000Au, // LC_PREPAGE 8798cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton LoadCommandDynamicSymtabInfo = 0x0000000Bu, // LC_DYSYMTAB 8898cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton LoadCommandDylibLoad = 0x0000000Cu, // LC_LOAD_DYLIB 8998cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton LoadCommandDylibIdent = 0x0000000Du, // LC_ID_DYLIB 9098cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton LoadCommandDynamicLinkerLoad = 0x0000000Eu, // LC_LOAD_DYLINKER 9198cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton LoadCommandDynamicLinkerIdent = 0x0000000Fu, // LC_ID_DYLINKER 9298cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton LoadCommandDylibPrebound = 0x00000010u, // LC_PREBOUND_DYLIB 9398cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton LoadCommandRoutines32 = 0x00000011u, // LC_ROUTINES 9498cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton LoadCommandSubFramework = 0x00000012u, // LC_SUB_FRAMEWORK 9598cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton LoadCommandSubUmbrella = 0x00000013u, // LC_SUB_UMBRELLA 9698cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton LoadCommandSubClient = 0x00000014u, // LC_SUB_CLIENT 9798cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton LoadCommandSubLibrary = 0x00000015u, // LC_SUB_LIBRARY 9898cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton LoadCommandTwoLevelHints = 0x00000016u, // LC_TWOLEVEL_HINTS 9998cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton LoadCommandPreBindChecksum = 0x00000017u, // LC_PREBIND_CKSUM 10098cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton LoadCommandDylibLoadWeak = 0x80000018u, // LC_LOAD_WEAK_DYLIB 10198cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton LoadCommandSegment64 = 0x00000019u, // LC_SEGMENT_64 10298cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton LoadCommandRoutines64 = 0x0000001Au, // LC_ROUTINES_64 10398cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton LoadCommandUUID = 0x0000001Bu, // LC_UUID 10498cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton LoadCommandRunpath = 0x8000001Cu, // LC_RPATH 10598cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton LoadCommandCodeSignature = 0x0000001Du, // LC_CODE_SIGNATURE 10698cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton LoadCommandSegmentSplitInfo = 0x0000001Eu, // LC_SEGMENT_SPLIT_INFO 10798cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton LoadCommandDylibReexport = 0x8000001Fu, // LC_REEXPORT_DYLIB 10898cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton LoadCommandDylibLazyLoad = 0x00000020u, // LC_LAZY_LOAD_DYLIB 10998cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton LoadCommandEncryptionInfo = 0x00000021u, // LC_ENCRYPTION_INFO 11098cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton LoadCommandDynamicLinkerInfo = 0x00000022u, // LC_DYLD_INFO 11198cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton LoadCommandDynamicLinkerInfoOnly = 0x80000022u, // LC_DYLD_INFO_ONLY 11298cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton LoadCommandDylibLoadUpward = 0x80000023u, // LC_LOAD_UPWARD_DYLIB 113bc6b89ed31ef77098803abe64af94f318ad716bbBenjamin Kramer LoadCommandVersionMinMacOSX = 0x00000024u, // LC_VERSION_MIN_MACOSX 114bc6b89ed31ef77098803abe64af94f318ad716bbBenjamin Kramer LoadCommandVersionMinIPhoneOS = 0x00000025u, // LC_VERSION_MIN_IPHONEOS 115bc6b89ed31ef77098803abe64af94f318ad716bbBenjamin Kramer LoadCommandFunctionStarts = 0x00000026u, // LC_FUNCTION_STARTS 116bc6b89ed31ef77098803abe64af94f318ad716bbBenjamin Kramer LoadCommandDyldEnvironment = 0x00000027u, // LC_DYLD_ENVIRONMENT 117f0a68131de2f877c652dd9ae34ddcdf6e482811fTed Kremenek LoadCommandMain = 0x80000028u, // LC_MAIN 118f0a68131de2f877c652dd9ae34ddcdf6e482811fTed Kremenek LoadCommandDataInCode = 0x00000029u, // LC_DATA_IN_CODE 119f0a68131de2f877c652dd9ae34ddcdf6e482811fTed Kremenek LoadCommandSourceVersion = 0x0000002Au, // LC_SOURCE_VERSION 120f0a68131de2f877c652dd9ae34ddcdf6e482811fTed Kremenek LoadCommandCodeSignDRs = 0x0000002Bu, // LC_DYLIB_CODE_SIGN_DRS 1216bbf5eb32f35c6bbef5434ba06339a10c860d86cJim Grosbach 12298cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton // Constant bits for the "flags" field in llvm::MachO::segment_command 12398cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton SegmentCommandFlagBitHighVM = 0x1u, // SG_HIGHVM 12498cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton SegmentCommandFlagBitFixedVMLibrary = 0x2u, // SG_FVMLIB 12598cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton SegmentCommandFlagBitNoRelocations = 0x4u, // SG_NORELOC 12698cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton SegmentCommandFlagBitProtectedVersion1 = 0x8u, // SG_PROTECTED_VERSION_1 12798cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton 12898cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton 12998cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton // Constant masks for the "flags" field in llvm::MachO::section and 13098cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton // llvm::MachO::section_64 13198cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton SectionFlagMaskSectionType = 0x000000ffu, // SECTION_TYPE 13298cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton SectionFlagMaskAllAttributes = 0xffffff00u, // SECTION_ATTRIBUTES 13398cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton SectionFlagMaskUserAttributes = 0xff000000u, // SECTION_ATTRIBUTES_USR 13498cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton SectionFlagMaskSystemAttributes = 0x00ffff00u, // SECTION_ATTRIBUTES_SYS 13598cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton 13698cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton // Constant masks for the "flags[7:0]" field in llvm::MachO::section and 13798cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton // llvm::MachO::section_64 (mask "flags" with SECTION_TYPE) 13898cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton SectionTypeRegular = 0x00u, // S_REGULAR 13998cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton SectionTypeZeroFill = 0x01u, // S_ZEROFILL 14098cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton SectionTypeCStringLiterals = 0x02u, // S_CSTRING_LITERALS 14198cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton SectionType4ByteLiterals = 0x03u, // S_4BYTE_LITERALS 14298cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton SectionType8ByteLiterals = 0x04u, // S_8BYTE_LITERALS 14398cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton SectionTypeLiteralPointers = 0x05u, // S_LITERAL_POINTERS 14498cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton SectionTypeNonLazySymbolPointers = 0x06u, // S_NON_LAZY_SYMBOL_POINTERS 14598cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton SectionTypeLazySymbolPointers = 0x07u, // S_LAZY_SYMBOL_POINTERS 14698cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton SectionTypeSymbolStubs = 0x08u, // S_SYMBOL_STUBS 14798cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton SectionTypeModuleInitFunctionPointers = 0x09u, // S_MOD_INIT_FUNC_POINTERS 14898cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton SectionTypeModuleTermFunctionPointers = 0x0au, // S_MOD_TERM_FUNC_POINTERS 14998cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton SectionTypeCoalesced = 0x0bu, // S_COALESCED 15098cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton SectionTypeZeroFillLarge = 0x0cu, // S_GB_ZEROFILL 15198cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton SectionTypeInterposing = 0x0du, // S_INTERPOSING 15298cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton SectionType16ByteLiterals = 0x0eu, // S_16BYTE_LITERALS 15398cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton SectionTypeDTraceObjectFormat = 0x0fu, // S_DTRACE_DOF 15498cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton SectionTypeLazyDylibSymbolPointers = 0x10u, // S_LAZY_DYLIB_SYMBOL_POINTERS 15598cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton 15698cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton // Constant masks for the "flags[31:24]" field in llvm::MachO::section and 15798cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton // llvm::MachO::section_64 (mask "flags" with SECTION_ATTRIBUTES_USR) 15898cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton SectionAttrUserPureInstructions = 0x80000000u, // S_ATTR_PURE_INSTRUCTIONS 15998cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton SectionAttrUserNoTableOfContents = 0x40000000u, // S_ATTR_NO_TOC 16098cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton SectionAttrUserCanStripStaticSymbols = 0x20000000u, // S_ATTR_STRIP_STATIC_SYMS 16198cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton SectionAttrUserNoDeadStrip = 0x10000000u, // S_ATTR_NO_DEAD_STRIP 16298cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton SectionAttrUserLiveSupport = 0x08000000u, // S_ATTR_LIVE_SUPPORT 16398cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton SectionAttrUserSelfModifyingCode = 0x04000000u, // S_ATTR_SELF_MODIFYING_CODE 16498cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton SectionAttrUserDebug = 0x02000000u, // S_ATTR_DEBUG 16598cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton 16698cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton // Constant masks for the "flags[23:8]" field in llvm::MachO::section and 16798cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton // llvm::MachO::section_64 (mask "flags" with SECTION_ATTRIBUTES_SYS) 16898cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton SectionAttrSytemSomeInstructions = 0x00000400u, // S_ATTR_SOME_INSTRUCTIONS 16998cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton SectionAttrSytemHasExternalRelocations= 0x00000200u, // S_ATTR_EXT_RELOC 17098cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton SectionAttrSytemHasLocalRelocations = 0x00000100u, // S_ATTR_LOC_RELOC 17198cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton 17298cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton IndirectSymbolLocal = 0x80000000u, // INDIRECT_SYMBOL_LOCAL 17398cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton IndirectSymbolAbsolute = 0x40000000u, // INDIRECT_SYMBOL_ABS 17498cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton 17598cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton RebaseTypePointer = 1u, // REBASE_TYPE_POINTER 17698cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton RebaseTypeTextAbsolute32 = 2u, // REBASE_TYPE_TEXT_ABSOLUTE32 17717689b13be2f3f6e56c3a9dc3bc6193b7c732abcBill Wendling RebaseTypeTextPCRelative32 = 3u, // REBASE_TYPE_TEXT_PCREL32 17898cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton 17998cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton RebaseOpcodeMask = 0xF0u, // REBASE_OPCODE_MASK 18098cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton RebaseImmediateMask = 0x0Fu, // REBASE_IMMEDIATE_MASK 18198cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton RebaseOpcodeDone = 0x00u, // REBASE_OPCODE_DONE 18298cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton RebaseOpcodeSetTypeImmediate = 0x10u, // REBASE_OPCODE_SET_TYPE_IMM 18317689b13be2f3f6e56c3a9dc3bc6193b7c732abcBill Wendling RebaseOpcodeSetSegmentAndOffsetULEB = 0x20u, // REBASE_OPCODE_SET_SEGMENT_AND_OFFSET_ULEB 18498cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton RebaseOpcodeAddAddressULEB = 0x30u, // REBASE_OPCODE_ADD_ADDR_ULEB 18517689b13be2f3f6e56c3a9dc3bc6193b7c732abcBill Wendling RebaseOpcodeAddAddressImmediateScaled = 0x40u, // REBASE_OPCODE_ADD_ADDR_IMM_SCALED 18617689b13be2f3f6e56c3a9dc3bc6193b7c732abcBill Wendling RebaseOpcodeDoRebaseImmediateTimes = 0x50u, // REBASE_OPCODE_DO_REBASE_IMM_TIMES 18798cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton RebaseOpcodeDoRebaseULEBTimes = 0x60u, // REBASE_OPCODE_DO_REBASE_ULEB_TIMES 18898cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton RebaseOpcodeDoRebaseAddAddressULEB = 0x70u, // REBASE_OPCODE_DO_REBASE_ADD_ADDR_ULEB 18998cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton RebaseOpcodeDoRebaseULEBTimesSkippingULEB = 0x80u, // REBASE_OPCODE_DO_REBASE_ULEB_TIMES_SKIPPING_ULEB 19098cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton 19198cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton 19298cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton BindTypePointer = 1u, // BIND_TYPE_POINTER 19317689b13be2f3f6e56c3a9dc3bc6193b7c732abcBill Wendling BindTypeTextAbsolute32 = 2u, // BIND_TYPE_TEXT_ABSOLUTE32 19417689b13be2f3f6e56c3a9dc3bc6193b7c732abcBill Wendling BindTypeTextPCRelative32 = 3u, // BIND_TYPE_TEXT_PCREL32 19598cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton 19698cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton BindSpecialDylibSelf = 0u, // BIND_SPECIAL_DYLIB_SELF 19798cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton BindSpecialDylibMainExecutable = -1u, // BIND_SPECIAL_DYLIB_MAIN_EXECUTABLE 19898cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton BindSpecialDylibFlatLookup = -2u, // BIND_SPECIAL_DYLIB_FLAT_LOOKUP 19998cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton 20098cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton BindSymbolFlagsWeakImport = 0x1u, // BIND_SYMBOL_FLAGS_WEAK_IMPORT 20117689b13be2f3f6e56c3a9dc3bc6193b7c732abcBill Wendling BindSymbolFlagsNonWeakDefinition = 0x8u, // BIND_SYMBOL_FLAGS_NON_WEAK_DEFINITION 20298cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton 20398cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton BindOpcodeMask = 0xF0u, // BIND_OPCODE_MASK 20498cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton BindImmediateMask = 0x0Fu, // BIND_IMMEDIATE_MASK 20598cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton BindOpcodeDone = 0x00u, // BIND_OPCODE_DONE 20698cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton BindOpcodeSetDylibOrdinalImmediate = 0x10u, // BIND_OPCODE_SET_DYLIB_ORDINAL_IMM 20798cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton BindOpcodeSetDylibOrdinalULEB = 0x20u, // BIND_OPCODE_SET_DYLIB_ORDINAL_ULEB 20817689b13be2f3f6e56c3a9dc3bc6193b7c732abcBill Wendling BindOpcodeSetDylibSpecialImmediate = 0x30u, // BIND_OPCODE_SET_DYLIB_SPECIAL_IMM 20917689b13be2f3f6e56c3a9dc3bc6193b7c732abcBill Wendling BindOpcodeSetSymbolTrailingFlagsImmediate = 0x40u, // BIND_OPCODE_SET_SYMBOL_TRAILING_FLAGS_IMM 21017689b13be2f3f6e56c3a9dc3bc6193b7c732abcBill Wendling BindOpcodeSetTypeImmediate = 0x50u, // BIND_OPCODE_SET_TYPE_IMM 21198cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton BindOpcodeSetAppendSLEB = 0x60u, // BIND_OPCODE_SET_ADDEND_SLEB 21298cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton BindOpcodeSetSegmentAndOffsetULEB = 0x70u, // BIND_OPCODE_SET_SEGMENT_AND_OFFSET_ULEB 21398cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton BindOpcodeAddAddressULEB = 0x80u, // BIND_OPCODE_ADD_ADDR_ULEB 21498cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton BindOpcodeDoBind = 0x90u, // BIND_OPCODE_DO_BIND 21517689b13be2f3f6e56c3a9dc3bc6193b7c732abcBill Wendling BindOpcodeDoBindAddAddressULEB = 0xA0u, // BIND_OPCODE_DO_BIND_ADD_ADDR_ULEB 21617689b13be2f3f6e56c3a9dc3bc6193b7c732abcBill Wendling BindOpcodeDoBindAddAddressImmediateScaled = 0xB0u, // BIND_OPCODE_DO_BIND_ADD_ADDR_IMM_SCALED 21798cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton BindOpcodeDoBindULEBTimesSkippingULEB = 0xC0u, // BIND_OPCODE_DO_BIND_ULEB_TIMES_SKIPPING_ULEB 21898cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton 21998cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton ExportSymbolFlagsKindMask = 0x03u, // EXPORT_SYMBOL_FLAGS_KIND_MASK 22017689b13be2f3f6e56c3a9dc3bc6193b7c732abcBill Wendling ExportSymbolFlagsKindRegular = 0x00u, // EXPORT_SYMBOL_FLAGS_KIND_REGULAR 22198cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton ExportSymbolFlagsKindThreadLocal = 0x01u, // EXPORT_SYMBOL_FLAGS_KIND_THREAD_LOCAL 22298cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton ExportSymbolFlagsWeakDefinition = 0x04u, // EXPORT_SYMBOL_FLAGS_WEAK_DEFINITION 22398cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton ExportSymbolFlagsIndirectDefinition = 0x08u, // EXPORT_SYMBOL_FLAGS_INDIRECT_DEFINITION 22498cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton ExportSymbolFlagsHasSpecializations = 0x10u, // EXPORT_SYMBOL_FLAGS_HAS_SPECIALIZATIONS 22598cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton 22698cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton 22798cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton // Constant masks for the "n_type" field in llvm::MachO::nlist and 22898cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton // llvm::MachO::nlist_64 22998cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton NlistMaskStab = 0xe0, // N_STAB 23017689b13be2f3f6e56c3a9dc3bc6193b7c732abcBill Wendling NlistMaskPrivateExternal = 0x10, // N_PEXT 23198cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton NlistMaskType = 0x0e, // N_TYPE 23298cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton NlistMaskExternal = 0x01, // N_EXT 23398cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton 23498cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton // Constants for the "n_type & N_TYPE" llvm::MachO::nlist and 23598cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton // llvm::MachO::nlist_64 23698cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton NListTypeUndefined = 0x0u, // N_UNDF 23798cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton NListTypeAbsolute = 0x2u, // N_ABS 23898cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton NListTypeSection = 0xeu, // N_SECT 23998cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton NListTypePreboundUndefined = 0xcu, // N_PBUD 24098cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton NListTypeIndirect = 0xau, // N_INDR 24198cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton 24298cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton // Constant masks for the "n_sect" field in llvm::MachO::nlist and 24398cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton // llvm::MachO::nlist_64 24498cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton NListSectionNoSection = 0u, // NO_SECT 24598cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton NListSectionMaxSection = 0xffu, // MAX_SECT 24698cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton 247c38c36a8c44bd32bdfc2e48ab3e447f6dc1547bdMichael J. Spencer NListDescWeakRef = 0x40u, 248c38c36a8c44bd32bdfc2e48ab3e447f6dc1547bdMichael J. Spencer NListDescWeakDef = 0x80u, 249c38c36a8c44bd32bdfc2e48ab3e447f6dc1547bdMichael J. Spencer 25098cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton // Constant values for the "n_type" field in llvm::MachO::nlist and 25198cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton // llvm::MachO::nlist_64 when "(n_type & NlistMaskStab) != 0" 25217689b13be2f3f6e56c3a9dc3bc6193b7c732abcBill Wendling StabGlobalSymbol = 0x20u, // N_GSYM 25317689b13be2f3f6e56c3a9dc3bc6193b7c732abcBill Wendling StabFunctionName = 0x22u, // N_FNAME 25417689b13be2f3f6e56c3a9dc3bc6193b7c732abcBill Wendling StabFunction = 0x24u, // N_FUN 25517689b13be2f3f6e56c3a9dc3bc6193b7c732abcBill Wendling StabStaticSymbol = 0x26u, // N_STSYM 25617689b13be2f3f6e56c3a9dc3bc6193b7c732abcBill Wendling StabLocalCommon = 0x28u, // N_LCSYM 2576bbf5eb32f35c6bbef5434ba06339a10c860d86cJim Grosbach StabBeginSymbol = 0x2Eu, // N_BNSYM 25817689b13be2f3f6e56c3a9dc3bc6193b7c732abcBill Wendling StabSourceFileOptions = 0x3Cu, // N_OPT 25917689b13be2f3f6e56c3a9dc3bc6193b7c732abcBill Wendling StabRegisterSymbol = 0x40u, // N_RSYM 26017689b13be2f3f6e56c3a9dc3bc6193b7c732abcBill Wendling StabSourceLine = 0x44u, // N_SLINE 2616bbf5eb32f35c6bbef5434ba06339a10c860d86cJim Grosbach StabEndSymbol = 0x4Eu, // N_ENSYM 26217689b13be2f3f6e56c3a9dc3bc6193b7c732abcBill Wendling StabStructureType = 0x60u, // N_SSYM 26317689b13be2f3f6e56c3a9dc3bc6193b7c732abcBill Wendling StabSourceFileName = 0x64u, // N_SO 26417689b13be2f3f6e56c3a9dc3bc6193b7c732abcBill Wendling StabObjectFileName = 0x66u, // N_OSO 26517689b13be2f3f6e56c3a9dc3bc6193b7c732abcBill Wendling StabLocalSymbol = 0x80u, // N_LSYM 26617689b13be2f3f6e56c3a9dc3bc6193b7c732abcBill Wendling StabBeginIncludeFileName = 0x82u, // N_BINCL 26717689b13be2f3f6e56c3a9dc3bc6193b7c732abcBill Wendling StabIncludeFileName = 0x84u, // N_SOL 2686bbf5eb32f35c6bbef5434ba06339a10c860d86cJim Grosbach StabCompilerParameters = 0x86u, // N_PARAMS 2696bbf5eb32f35c6bbef5434ba06339a10c860d86cJim Grosbach StabCompilerVersion = 0x88u, // N_VERSION 2706bbf5eb32f35c6bbef5434ba06339a10c860d86cJim Grosbach StabCompilerOptLevel = 0x8Au, // N_OLEVEL 27117689b13be2f3f6e56c3a9dc3bc6193b7c732abcBill Wendling StabParameter = 0xA0u, // N_PSYM 27217689b13be2f3f6e56c3a9dc3bc6193b7c732abcBill Wendling StabEndIncludeFile = 0xA2u, // N_EINCL 27317689b13be2f3f6e56c3a9dc3bc6193b7c732abcBill Wendling StabAlternateEntry = 0xA4u, // N_ENTRY 27417689b13be2f3f6e56c3a9dc3bc6193b7c732abcBill Wendling StabLeftBracket = 0xC0u, // N_LBRAC 27517689b13be2f3f6e56c3a9dc3bc6193b7c732abcBill Wendling StabDeletedIncludeFile = 0xC2u, // N_EXCL 27617689b13be2f3f6e56c3a9dc3bc6193b7c732abcBill Wendling StabRightBracket = 0xE0u, // N_RBRAC 27717689b13be2f3f6e56c3a9dc3bc6193b7c732abcBill Wendling StabBeginCommon = 0xE2u, // N_BCOMM 27817689b13be2f3f6e56c3a9dc3bc6193b7c732abcBill Wendling StabEndCommon = 0xE4u, // N_ECOMM 27917689b13be2f3f6e56c3a9dc3bc6193b7c732abcBill Wendling StabEndCommonLocal = 0xE8u, // N_ECOML 28017689b13be2f3f6e56c3a9dc3bc6193b7c732abcBill Wendling StabLength = 0xFEu // N_LENG 28198cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton 28298cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton }; 2836bbf5eb32f35c6bbef5434ba06339a10c860d86cJim Grosbach 28498cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton // Structs from <mach-o/loader.h> 2856bbf5eb32f35c6bbef5434ba06339a10c860d86cJim Grosbach 28698cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton struct mach_header { 28798cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t magic; 28898cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t cputype; 28998cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t cpusubtype; 29098cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t filetype; 29198cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t ncmds; 29298cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t sizeofcmds; 29398cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t flags; 29498cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton }; 29598cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton 29698cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton struct mach_header_64 { 29798cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t magic; 29898cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t cputype; 29998cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t cpusubtype; 30098cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t filetype; 30198cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t ncmds; 30298cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t sizeofcmds; 30398cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t flags; 30498cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t reserved; 30598cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton }; 30698cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton 30798cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton struct load_command { 30898cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t cmd; 30998cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t cmdsize; 31098cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton }; 31198cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton 31298cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton struct segment_command { 31398cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t cmd; 31498cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t cmdsize; 31598cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton char segname[16]; 31698cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t vmaddr; 31798cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t vmsize; 31898cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t fileoff; 31998cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t filesize; 32098cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t maxprot; 32198cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t initprot; 32298cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t nsects; 32398cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t flags; 32498cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton }; 32598cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton 32698cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton struct segment_command_64 { 32798cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t cmd; 32898cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t cmdsize; 32998cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton char segname[16]; 33098cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint64_t vmaddr; 33198cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint64_t vmsize; 33298cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint64_t fileoff; 33398cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint64_t filesize; 33498cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t maxprot; 33598cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t initprot; 33698cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t nsects; 33798cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t flags; 33898cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton }; 33998cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton 34098cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton struct section { 34198cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton char sectname[16]; 34298cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton char segname[16]; 34398cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t addr; 34498cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t size; 34598cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t offset; 34698cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t align; 34798cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t reloff; 34898cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t nreloc; 34998cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t flags; 35098cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t reserved1; 35198cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t reserved2; 35298cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton }; 35398cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton 35498cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton struct section_64 { 35598cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton char sectname[16]; 35698cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton char segname[16]; 35798cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint64_t addr; 35898cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint64_t size; 35998cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t offset; 36098cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t align; 36198cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t reloff; 36298cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t nreloc; 36398cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t flags; 36498cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t reserved1; 36598cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t reserved2; 36698cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t reserved3; 36798cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton }; 36898cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton 36998cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton struct fvmlib { 37098cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t name; 37198cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t minor_version; 37298cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t header_addr; 37398cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton }; 37498cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton 37598cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton struct fvmlib_command { 37698cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t cmd; 37798cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t cmdsize; 37898cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton struct fvmlib fvmlib; 37998cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton }; 38098cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton 38198cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton struct dylib { 38298cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t name; 38398cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t timestamp; 38498cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t current_version; 38598cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t compatibility_version; 38698cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton }; 38798cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton 38898cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton struct dylib_command { 38998cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t cmd; 39098cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t cmdsize; 39198cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton struct dylib dylib; 39298cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton }; 39398cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton 39498cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton struct sub_framework_command { 39598cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t cmd; 39698cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t cmdsize; 39798cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t umbrella; 39898cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton }; 39998cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton 40098cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton struct sub_client_command { 40198cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t cmd; 40298cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t cmdsize; 40398cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t client; 40498cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton }; 40598cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton 40698cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton struct sub_umbrella_command { 40798cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t cmd; 40898cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t cmdsize; 40998cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t sub_umbrella; 41098cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton }; 41198cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton 41298cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton struct sub_library_command { 41398cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t cmd; 41498cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t cmdsize; 41598cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t sub_library; 41698cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton }; 41798cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton 41898cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton struct prebound_dylib_command { 41998cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t cmd; 42098cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t cmdsize; 42198cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t name; 42298cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t nmodules; 42398cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t linked_modules; 42498cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton }; 42598cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton 42698cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton struct dylinker_command { 42798cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t cmd; 42898cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t cmdsize; 42998cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t name; 43098cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton }; 43198cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton 43298cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton struct thread_command { 43398cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t cmd; 43498cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t cmdsize; 43598cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton }; 43698cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton 43798cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton struct routines_command { 43898cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t cmd; 43998cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t cmdsize; 44098cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t init_address; 44198cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t init_module; 44298cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t reserved1; 44398cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t reserved2; 44498cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t reserved3; 44598cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t reserved4; 44698cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t reserved5; 44798cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t reserved6; 44898cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton }; 44998cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton 45098cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton struct routines_command_64 { 45198cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t cmd; 45298cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t cmdsize; 45398cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint64_t init_address; 45498cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint64_t init_module; 45598cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint64_t reserved1; 45698cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint64_t reserved2; 45798cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint64_t reserved3; 45898cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint64_t reserved4; 45998cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint64_t reserved5; 46098cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint64_t reserved6; 46198cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton }; 46298cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton 46398cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton struct symtab_command { 46498cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t cmd; 46598cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t cmdsize; 46698cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t symoff; 46798cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t nsyms; 46898cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t stroff; 46998cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t strsize; 47098cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton }; 47198cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton 47298cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton struct dysymtab_command { 47398cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t cmd; 47498cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t cmdsize; 47598cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t ilocalsym; 47698cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t nlocalsym; 47798cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t iextdefsym; 47898cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t nextdefsym; 47998cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t iundefsym; 48098cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t nundefsym; 48198cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t tocoff; 48298cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t ntoc; 48398cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t modtaboff; 48498cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t nmodtab; 48598cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t extrefsymoff; 48698cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t nextrefsyms; 48798cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t indirectsymoff; 48898cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t nindirectsyms; 48998cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t extreloff; 49098cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t nextrel; 49198cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t locreloff; 49298cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t nlocrel; 49317689b13be2f3f6e56c3a9dc3bc6193b7c732abcBill Wendling }; 49498cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton 49598cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton struct dylib_table_of_contents { 49698cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t symbol_index; 49798cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t module_index; 49817689b13be2f3f6e56c3a9dc3bc6193b7c732abcBill Wendling }; 49998cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton 50098cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton struct dylib_module { 50198cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t module_name; 50298cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t iextdefsym; 50398cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t nextdefsym; 50498cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t irefsym; 50598cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t nrefsym; 50698cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t ilocalsym; 50798cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t nlocalsym; 50898cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t iextrel; 50998cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t nextrel; 51098cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t iinit_iterm; 51198cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t ninit_nterm; 51298cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t objc_module_info_addr; 51398cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t objc_module_info_size; 51417689b13be2f3f6e56c3a9dc3bc6193b7c732abcBill Wendling }; 51598cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton 51698cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton struct dylib_module_64 { 51798cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t module_name; 51898cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t iextdefsym; 51998cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t nextdefsym; 52098cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t irefsym; 52198cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t nrefsym; 52298cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t ilocalsym; 52398cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t nlocalsym; 52498cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t iextrel; 52598cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t nextrel; 52698cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t iinit_iterm; 52798cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t ninit_nterm; 52898cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t objc_module_info_size; 52998cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint64_t objc_module_info_addr; 53098cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton }; 53198cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton 53298cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton struct dylib_reference { 53398cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t isym:24, 53498cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton flags:8; 53598cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton }; 53698cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton 53798cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton 53898cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton struct twolevel_hints_command { 53998cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t cmd; 54098cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t cmdsize; 54198cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t offset; 54298cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t nhints; 54398cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton }; 54498cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton 54598cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton struct twolevel_hint { 54698cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t isub_image:8, 54798cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton itoc:24; 54898cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton }; 54998cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton 55098cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton struct prebind_cksum_command { 55198cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t cmd; 55298cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t cmdsize; 55398cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t cksum; 55498cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton }; 55598cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton 55698cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton struct uuid_command { 55798cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t cmd; 55898cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t cmdsize; 55998cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint8_t uuid[16]; 56098cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton }; 56198cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton 56298cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton struct rpath_command { 56398cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t cmd; 56498cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t cmdsize; 56598cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t path; 56698cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton }; 56798cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton 56898cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton struct linkedit_data_command { 56998cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t cmd; 57098cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t cmdsize; 57198cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t dataoff; 57298cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t datasize; 57398cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton }; 57498cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton 57598cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton struct encryption_info_command { 57698cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t cmd; 57798cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t cmdsize; 57898cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t cryptoff; 57998cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t cryptsize; 58098cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t cryptid; 58198cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton }; 58298cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton 583bc6b89ed31ef77098803abe64af94f318ad716bbBenjamin Kramer struct version_min_command { 584bc6b89ed31ef77098803abe64af94f318ad716bbBenjamin Kramer uint32_t cmd; 585bc6b89ed31ef77098803abe64af94f318ad716bbBenjamin Kramer uint32_t cmdsize; 586bc6b89ed31ef77098803abe64af94f318ad716bbBenjamin Kramer uint32_t version; 587bc6b89ed31ef77098803abe64af94f318ad716bbBenjamin Kramer uint32_t reserved; 588bc6b89ed31ef77098803abe64af94f318ad716bbBenjamin Kramer }; 589bc6b89ed31ef77098803abe64af94f318ad716bbBenjamin Kramer 59098cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton struct dyld_info_command { 59198cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t cmd; 59298cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t cmdsize; 59398cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t rebase_off; 59498cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t rebase_size; 59598cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t bind_off; 59698cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t bind_size; 59798cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t weak_bind_off; 59898cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t weak_bind_size; 59998cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t lazy_bind_off; 60098cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t lazy_bind_size; 60198cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t export_off; 60298cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t export_size; 60398cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton }; 60498cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton 60598cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton struct symseg_command { 60698cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t cmd; 60798cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t cmdsize; 60898cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t offset; 60998cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t size; 61098cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton }; 61198cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton 61298cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton struct ident_command { 61398cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t cmd; 61498cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t cmdsize; 61598cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton }; 61698cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton 61798cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton struct fvmfile_command { 61898cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t cmd; 61998cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t cmdsize; 62098cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t name; 62198cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t header_addr; 62298cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton }; 62398cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton 62498cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton 62598cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton // Structs from <mach-o/fat.h> 62698cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton struct fat_header { 62798cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t magic; 62898cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t nfat_arch; 62998cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton }; 63098cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton 63198cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton struct fat_arch { 63298cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t cputype; 63398cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t cpusubtype; 63498cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t offset; 63598cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t size; 63698cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t align; 63798cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton }; 63898cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton 63998cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton // Structs from <mach-o/fat.h> 64098cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton struct nlist { 64198cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t n_strx; 64298cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint8_t n_type; 64398cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint8_t n_sect; 64498cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton int16_t n_desc; 64598cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t n_value; 64698cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton }; 64798cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton 64898cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton struct nlist_64 { 64998cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t n_strx; 65098cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint8_t n_type; 65198cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint8_t n_sect; 65298cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint16_t n_desc; 65398cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint64_t n_value; 65498cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton }; 65598cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton 65698cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton // Get/Set functions from <mach-o/nlist.h> 6576bbf5eb32f35c6bbef5434ba06339a10c860d86cJim Grosbach 65898cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton static inline uint16_t GET_LIBRARY_ORDINAL(uint16_t n_desc) 65998cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton { 66098cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton return (((n_desc) >> 8u) & 0xffu); 66198cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton } 6626bbf5eb32f35c6bbef5434ba06339a10c860d86cJim Grosbach 66398cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton static inline void SET_LIBRARY_ORDINAL(uint16_t &n_desc, uint8_t ordinal) 66498cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton { 66598cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton n_desc = (((n_desc) & 0x00ff) | (((ordinal) & 0xff) << 8)); 66698cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton } 66798cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton 66898cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton static inline uint8_t GET_COMM_ALIGN (uint16_t n_desc) 66998cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton { 67098cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton return (n_desc >> 8u) & 0x0fu; 67198cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton } 6726bbf5eb32f35c6bbef5434ba06339a10c860d86cJim Grosbach 67398cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton static inline void SET_COMM_ALIGN (uint16_t &n_desc, uint8_t align) 67498cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton { 67598cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton n_desc = ((n_desc & 0xf0ffu) | ((align & 0x0fu) << 8u)); 67698cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton } 67798cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton 67845f8c095ad94888716ceff54daf2fdf2f2f668a4Chris Lattner // Enums from <mach/machine.h> 67945f8c095ad94888716ceff54daf2fdf2f2f668a4Chris Lattner enum { 68045f8c095ad94888716ceff54daf2fdf2f2f668a4Chris Lattner // Capability bits used in the definition of cpu_type. 68145f8c095ad94888716ceff54daf2fdf2f2f668a4Chris Lattner CPUArchMask = 0xff000000, // Mask for architecture bits 68245f8c095ad94888716ceff54daf2fdf2f2f668a4Chris Lattner CPUArchABI64 = 0x01000000, // 64 bit ABI 6836bbf5eb32f35c6bbef5434ba06339a10c860d86cJim Grosbach 68445f8c095ad94888716ceff54daf2fdf2f2f668a4Chris Lattner // Constants for the cputype field. 68545f8c095ad94888716ceff54daf2fdf2f2f668a4Chris Lattner CPUTypeI386 = 7, 68645f8c095ad94888716ceff54daf2fdf2f2f668a4Chris Lattner CPUTypeX86_64 = CPUTypeI386 | CPUArchABI64, 68745f8c095ad94888716ceff54daf2fdf2f2f668a4Chris Lattner CPUTypeARM = 12, 68845f8c095ad94888716ceff54daf2fdf2f2f668a4Chris Lattner CPUTypeSPARC = 14, 68945f8c095ad94888716ceff54daf2fdf2f2f668a4Chris Lattner CPUTypePowerPC = 18, 69045f8c095ad94888716ceff54daf2fdf2f2f668a4Chris Lattner CPUTypePowerPC64 = CPUTypePowerPC | CPUArchABI64, 69145f8c095ad94888716ceff54daf2fdf2f2f668a4Chris Lattner 69245f8c095ad94888716ceff54daf2fdf2f2f668a4Chris Lattner 69345f8c095ad94888716ceff54daf2fdf2f2f668a4Chris Lattner // Constants for the cpusubtype field. 6946bbf5eb32f35c6bbef5434ba06339a10c860d86cJim Grosbach 69545f8c095ad94888716ceff54daf2fdf2f2f668a4Chris Lattner // X86 69645f8c095ad94888716ceff54daf2fdf2f2f668a4Chris Lattner CPUSubType_I386_ALL = 3, 69745f8c095ad94888716ceff54daf2fdf2f2f668a4Chris Lattner CPUSubType_X86_64_ALL = 3, 6986bbf5eb32f35c6bbef5434ba06339a10c860d86cJim Grosbach 69945f8c095ad94888716ceff54daf2fdf2f2f668a4Chris Lattner // ARM 70045f8c095ad94888716ceff54daf2fdf2f2f668a4Chris Lattner CPUSubType_ARM_ALL = 0, 70145f8c095ad94888716ceff54daf2fdf2f2f668a4Chris Lattner CPUSubType_ARM_V4T = 5, 702c91b26281ac8e205d7628e2668781cb369ce9a73Jim Grosbach CPUSubType_ARM_V5 = 7, 70345f8c095ad94888716ceff54daf2fdf2f2f668a4Chris Lattner CPUSubType_ARM_V6 = 6, 704c91b26281ac8e205d7628e2668781cb369ce9a73Jim Grosbach CPUSubType_ARM_V7 = 9, 70545f8c095ad94888716ceff54daf2fdf2f2f668a4Chris Lattner 70645f8c095ad94888716ceff54daf2fdf2f2f668a4Chris Lattner // PowerPC 70745f8c095ad94888716ceff54daf2fdf2f2f668a4Chris Lattner CPUSubType_POWERPC_ALL = 0, 7086bbf5eb32f35c6bbef5434ba06339a10c860d86cJim Grosbach 70945f8c095ad94888716ceff54daf2fdf2f2f668a4Chris Lattner CPUSubType_SPARC_ALL = 0 71045f8c095ad94888716ceff54daf2fdf2f2f668a4Chris Lattner }; 71145f8c095ad94888716ceff54daf2fdf2f2f668a4Chris Lattner } // end namespace MachO 71245f8c095ad94888716ceff54daf2fdf2f2f668a4Chris Lattner} // end namespace llvm 71345f8c095ad94888716ceff54daf2fdf2f2f668a4Chris Lattner 71445f8c095ad94888716ceff54daf2fdf2f2f668a4Chris Lattner#endif 715