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