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 17118a0659ab8a4d0e0af343b88e5fa71a5c1eb6a6Reid Kleckner#include "llvm/Support/Compiler.h" 181f6efa3996dd1929fbc129203ce5009b620e6969Michael J. Spencer#include "llvm/Support/DataTypes.h" 19bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis#include "llvm/Support/Host.h" 2098cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton 2145f8c095ad94888716ceff54daf2fdf2f2f668a4Chris Lattnernamespace llvm { 2245f8c095ad94888716ceff54daf2fdf2f2f668a4Chris Lattner namespace MachO { 2398cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton // Enums from <mach-o/loader.h> 2436b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines enum : uint32_t { 256bbf5eb32f35c6bbef5434ba06339a10c860d86cJim Grosbach // Constants for the "magic" field in llvm::MachO::mach_header and 2698cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton // llvm::MachO::mach_header_64 27bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis MH_MAGIC = 0xFEEDFACEu, 28bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis MH_CIGAM = 0xCEFAEDFEu, 29bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis MH_MAGIC_64 = 0xFEEDFACFu, 30bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis MH_CIGAM_64 = 0xCFFAEDFEu, 31bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis FAT_MAGIC = 0xCAFEBABEu, 32bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis FAT_CIGAM = 0xBEBAFECAu 33bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis }; 3498cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton 35bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis enum HeaderFileType { 3698cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton // Constants for the "filetype" field in llvm::MachO::mach_header and 3798cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton // llvm::MachO::mach_header_64 38bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis MH_OBJECT = 0x1u, 39bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis MH_EXECUTE = 0x2u, 40bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis MH_FVMLIB = 0x3u, 41bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis MH_CORE = 0x4u, 42bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis MH_PRELOAD = 0x5u, 43bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis MH_DYLIB = 0x6u, 44bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis MH_DYLINKER = 0x7u, 45bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis MH_BUNDLE = 0x8u, 46bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis MH_DYLIB_STUB = 0x9u, 47bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis MH_DSYM = 0xAu, 48bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis MH_KEXT_BUNDLE = 0xBu 49bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis }; 5098cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton 51bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis enum { 5298cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton // Constant bits for the "flags" field in llvm::MachO::mach_header and 5398cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton // llvm::MachO::mach_header_64 54bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis MH_NOUNDEFS = 0x00000001u, 55bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis MH_INCRLINK = 0x00000002u, 56bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis MH_DYLDLINK = 0x00000004u, 57bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis MH_BINDATLOAD = 0x00000008u, 58bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis MH_PREBOUND = 0x00000010u, 59bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis MH_SPLIT_SEGS = 0x00000020u, 60bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis MH_LAZY_INIT = 0x00000040u, 61bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis MH_TWOLEVEL = 0x00000080u, 62bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis MH_FORCE_FLAT = 0x00000100u, 63bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis MH_NOMULTIDEFS = 0x00000200u, 64bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis MH_NOFIXPREBINDING = 0x00000400u, 65bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis MH_PREBINDABLE = 0x00000800u, 66bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis MH_ALLMODSBOUND = 0x00001000u, 67bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis MH_SUBSECTIONS_VIA_SYMBOLS = 0x00002000u, 68bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis MH_CANONICAL = 0x00004000u, 69bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis MH_WEAK_DEFINES = 0x00008000u, 70bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis MH_BINDS_TO_WEAK = 0x00010000u, 71bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis MH_ALLOW_STACK_EXECUTION = 0x00020000u, 72bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis MH_ROOT_SAFE = 0x00040000u, 73bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis MH_SETUID_SAFE = 0x00080000u, 74bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis MH_NO_REEXPORTED_DYLIBS = 0x00100000u, 75bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis MH_PIE = 0x00200000u, 76bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis MH_DEAD_STRIPPABLE_DYLIB = 0x00400000u 77bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis }; 786bbf5eb32f35c6bbef5434ba06339a10c860d86cJim Grosbach 7936b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines enum : uint32_t { 80bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis // Flags for the "cmd" field in llvm::MachO::load_command 81bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis LC_REQ_DYLD = 0x80000000u 82bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis }; 83bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis 8436b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines enum LoadCommandType : uint32_t { 8598cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton // Constants for the "cmd" field in llvm::MachO::load_command 86bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis LC_SEGMENT = 0x00000001u, 87bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis LC_SYMTAB = 0x00000002u, 88bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis LC_SYMSEG = 0x00000003u, 89bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis LC_THREAD = 0x00000004u, 90bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis LC_UNIXTHREAD = 0x00000005u, 91bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis LC_LOADFVMLIB = 0x00000006u, 92bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis LC_IDFVMLIB = 0x00000007u, 93bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis LC_IDENT = 0x00000008u, 94bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis LC_FVMFILE = 0x00000009u, 95bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis LC_PREPAGE = 0x0000000Au, 96bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis LC_DYSYMTAB = 0x0000000Bu, 97bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis LC_LOAD_DYLIB = 0x0000000Cu, 98bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis LC_ID_DYLIB = 0x0000000Du, 99bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis LC_LOAD_DYLINKER = 0x0000000Eu, 100bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis LC_ID_DYLINKER = 0x0000000Fu, 101bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis LC_PREBOUND_DYLIB = 0x00000010u, 102bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis LC_ROUTINES = 0x00000011u, 103bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis LC_SUB_FRAMEWORK = 0x00000012u, 104bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis LC_SUB_UMBRELLA = 0x00000013u, 105bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis LC_SUB_CLIENT = 0x00000014u, 106bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis LC_SUB_LIBRARY = 0x00000015u, 107bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis LC_TWOLEVEL_HINTS = 0x00000016u, 108bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis LC_PREBIND_CKSUM = 0x00000017u, 109bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis LC_LOAD_WEAK_DYLIB = 0x80000018u, 110bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis LC_SEGMENT_64 = 0x00000019u, 111bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis LC_ROUTINES_64 = 0x0000001Au, 112bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis LC_UUID = 0x0000001Bu, 113bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis LC_RPATH = 0x8000001Cu, 114bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis LC_CODE_SIGNATURE = 0x0000001Du, 115bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis LC_SEGMENT_SPLIT_INFO = 0x0000001Eu, 116bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis LC_REEXPORT_DYLIB = 0x8000001Fu, 117bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis LC_LAZY_LOAD_DYLIB = 0x00000020u, 118bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis LC_ENCRYPTION_INFO = 0x00000021u, 119bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis LC_DYLD_INFO = 0x00000022u, 120bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis LC_DYLD_INFO_ONLY = 0x80000022u, 121bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis LC_LOAD_UPWARD_DYLIB = 0x80000023u, 122bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis LC_VERSION_MIN_MACOSX = 0x00000024u, 123bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis LC_VERSION_MIN_IPHONEOS = 0x00000025u, 124bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis LC_FUNCTION_STARTS = 0x00000026u, 125bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis LC_DYLD_ENVIRONMENT = 0x00000027u, 126bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis LC_MAIN = 0x80000028u, 127bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis LC_DATA_IN_CODE = 0x00000029u, 128bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis LC_SOURCE_VERSION = 0x0000002Au, 129bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis LC_DYLIB_CODE_SIGN_DRS = 0x0000002Bu, 130bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis // 0x0000002Cu, 13136b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines LC_LINKER_OPTIONS = 0x0000002Du, 13236b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines LC_LINKER_OPTIMIZATION_HINT = 0x0000002Eu 133bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis }; 1346bbf5eb32f35c6bbef5434ba06339a10c860d86cJim Grosbach 13536b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines enum : uint32_t { 13698cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton // Constant bits for the "flags" field in llvm::MachO::segment_command 137bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis SG_HIGHVM = 0x1u, 138bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis SG_FVMLIB = 0x2u, 139bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis SG_NORELOC = 0x4u, 140bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis SG_PROTECTED_VERSION_1 = 0x8u, 14198cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton 14298cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton 14398cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton // Constant masks for the "flags" field in llvm::MachO::section and 14498cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton // llvm::MachO::section_64 145bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis SECTION_TYPE = 0x000000ffu, // SECTION_TYPE 146bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis SECTION_ATTRIBUTES = 0xffffff00u, // SECTION_ATTRIBUTES 147bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis SECTION_ATTRIBUTES_USR = 0xff000000u, // SECTION_ATTRIBUTES_USR 148bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis SECTION_ATTRIBUTES_SYS = 0x00ffff00u // SECTION_ATTRIBUTES_SYS 149bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis }; 15098cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton 15136b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines /// These are the section type and attributes fields. A MachO section can 15236b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines /// have only one Type, but can have any of the attributes specified. 15336b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines enum SectionType : uint32_t { 15498cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton // Constant masks for the "flags[7:0]" field in llvm::MachO::section and 15598cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton // llvm::MachO::section_64 (mask "flags" with SECTION_TYPE) 156dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines 157dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines /// S_REGULAR - Regular section. 158bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis S_REGULAR = 0x00u, 159dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines /// S_ZEROFILL - Zero fill on demand section. 160bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis S_ZEROFILL = 0x01u, 161dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines /// S_CSTRING_LITERALS - Section with literal C strings. 162bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis S_CSTRING_LITERALS = 0x02u, 163dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines /// S_4BYTE_LITERALS - Section with 4 byte literals. 164bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis S_4BYTE_LITERALS = 0x03u, 165dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines /// S_8BYTE_LITERALS - Section with 8 byte literals. 166bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis S_8BYTE_LITERALS = 0x04u, 167dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines /// S_LITERAL_POINTERS - Section with pointers to literals. 168bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis S_LITERAL_POINTERS = 0x05u, 169dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines /// S_NON_LAZY_SYMBOL_POINTERS - Section with non-lazy symbol pointers. 170bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis S_NON_LAZY_SYMBOL_POINTERS = 0x06u, 171dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines /// S_LAZY_SYMBOL_POINTERS - Section with lazy symbol pointers. 172bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis S_LAZY_SYMBOL_POINTERS = 0x07u, 173dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines /// S_SYMBOL_STUBS - Section with symbol stubs, byte size of stub in 174dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines /// the Reserved2 field. 175bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis S_SYMBOL_STUBS = 0x08u, 176dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines /// S_MOD_INIT_FUNC_POINTERS - Section with only function pointers for 177dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines /// initialization. 178bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis S_MOD_INIT_FUNC_POINTERS = 0x09u, 179dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines /// S_MOD_TERM_FUNC_POINTERS - Section with only function pointers for 180dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines /// termination. 181bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis S_MOD_TERM_FUNC_POINTERS = 0x0au, 182dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines /// S_COALESCED - Section contains symbols that are to be coalesced. 183bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis S_COALESCED = 0x0bu, 184dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines /// S_GB_ZEROFILL - Zero fill on demand section (that can be larger than 4 185dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines /// gigabytes). 186bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis S_GB_ZEROFILL = 0x0cu, 187dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines /// S_INTERPOSING - Section with only pairs of function pointers for 188dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines /// interposing. 189bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis S_INTERPOSING = 0x0du, 190dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines /// S_16BYTE_LITERALS - Section with only 16 byte literals. 191bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis S_16BYTE_LITERALS = 0x0eu, 192dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines /// S_DTRACE_DOF - Section contains DTrace Object Format. 193bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis S_DTRACE_DOF = 0x0fu, 194dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines /// S_LAZY_DYLIB_SYMBOL_POINTERS - Section with lazy symbol pointers to 195dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines /// lazy loaded dylibs. 196bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis S_LAZY_DYLIB_SYMBOL_POINTERS = 0x10u, 197dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines /// S_THREAD_LOCAL_REGULAR - Thread local data section. 198bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis S_THREAD_LOCAL_REGULAR = 0x11u, 199dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines /// S_THREAD_LOCAL_ZEROFILL - Thread local zerofill section. 200bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis S_THREAD_LOCAL_ZEROFILL = 0x12u, 201dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines /// S_THREAD_LOCAL_VARIABLES - Section with thread local variable 202dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines /// structure data. 203bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis S_THREAD_LOCAL_VARIABLES = 0x13u, 204dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines /// S_THREAD_LOCAL_VARIABLE_POINTERS - Section with pointers to thread 205dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines /// local structures. 2065b34493843fee70dd0aba300466da2b020676d65Nick Kledzik S_THREAD_LOCAL_VARIABLE_POINTERS = 0x14u, 207dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines /// S_THREAD_LOCAL_INIT_FUNCTION_POINTERS - Section with thread local 208dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines /// variable initialization pointers to functions. 20936b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines S_THREAD_LOCAL_INIT_FUNCTION_POINTERS = 0x15u, 21036b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines 21136b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines LAST_KNOWN_SECTION_TYPE = S_THREAD_LOCAL_INIT_FUNCTION_POINTERS 212bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis }; 21398cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton 21436b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines enum : uint32_t { 21598cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton // Constant masks for the "flags[31:24]" field in llvm::MachO::section and 21698cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton // llvm::MachO::section_64 (mask "flags" with SECTION_ATTRIBUTES_USR) 217dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines 218dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines /// S_ATTR_PURE_INSTRUCTIONS - Section contains only true machine 219dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines /// instructions. 220bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis S_ATTR_PURE_INSTRUCTIONS = 0x80000000u, 221dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines /// S_ATTR_NO_TOC - Section contains coalesced symbols that are not to be 222dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines /// in a ranlib table of contents. 223bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis S_ATTR_NO_TOC = 0x40000000u, 224dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines /// S_ATTR_STRIP_STATIC_SYMS - Ok to strip static symbols in this section 225dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines /// in files with the MY_DYLDLINK flag. 226bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis S_ATTR_STRIP_STATIC_SYMS = 0x20000000u, 227dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines /// S_ATTR_NO_DEAD_STRIP - No dead stripping. 228bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis S_ATTR_NO_DEAD_STRIP = 0x10000000u, 229dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines /// S_ATTR_LIVE_SUPPORT - Blocks are live if they reference live blocks. 230bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis S_ATTR_LIVE_SUPPORT = 0x08000000u, 231dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines /// S_ATTR_SELF_MODIFYING_CODE - Used with i386 code stubs written on by 232dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines /// dyld. 233bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis S_ATTR_SELF_MODIFYING_CODE = 0x04000000u, 234dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines /// S_ATTR_DEBUG - A debug section. 235bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis S_ATTR_DEBUG = 0x02000000u, 23698cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton 23798cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton // Constant masks for the "flags[23:8]" field in llvm::MachO::section and 23898cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton // llvm::MachO::section_64 (mask "flags" with SECTION_ATTRIBUTES_SYS) 239dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines 240dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines /// S_ATTR_SOME_INSTRUCTIONS - Section contains some machine instructions. 241bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis S_ATTR_SOME_INSTRUCTIONS = 0x00000400u, 242dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines /// S_ATTR_EXT_RELOC - Section has external relocation entries. 243bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis S_ATTR_EXT_RELOC = 0x00000200u, 244dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines /// S_ATTR_LOC_RELOC - Section has local relocation entries. 245bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis S_ATTR_LOC_RELOC = 0x00000100u, 246bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis 247bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis // Constant masks for the value of an indirect symbol in an indirect 248bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis // symbol table 249bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis INDIRECT_SYMBOL_LOCAL = 0x80000000u, 250bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis INDIRECT_SYMBOL_ABS = 0x40000000u 251bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis }; 252bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis 253bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis enum DataRegionType { 254bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis // Constants for the "kind" field in a data_in_code_entry structure 255bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis DICE_KIND_DATA = 1u, 256bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis DICE_KIND_JUMP_TABLE8 = 2u, 257bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis DICE_KIND_JUMP_TABLE16 = 3u, 258bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis DICE_KIND_JUMP_TABLE32 = 4u, 259bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis DICE_KIND_ABS_JUMP_TABLE32 = 5u 260bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis }; 261bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis 262bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis enum RebaseType { 263bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis REBASE_TYPE_POINTER = 1u, 264bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis REBASE_TYPE_TEXT_ABSOLUTE32 = 2u, 265bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis REBASE_TYPE_TEXT_PCREL32 = 3u 266bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis }; 267bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis 268bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis enum { 269bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis REBASE_OPCODE_MASK = 0xF0u, 270bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis REBASE_IMMEDIATE_MASK = 0x0Fu 271bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis }; 27298cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton 273bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis enum RebaseOpcode { 274bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis REBASE_OPCODE_DONE = 0x00u, 275bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis REBASE_OPCODE_SET_TYPE_IMM = 0x10u, 276bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis REBASE_OPCODE_SET_SEGMENT_AND_OFFSET_ULEB = 0x20u, 277bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis REBASE_OPCODE_ADD_ADDR_ULEB = 0x30u, 278bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis REBASE_OPCODE_ADD_ADDR_IMM_SCALED = 0x40u, 279bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis REBASE_OPCODE_DO_REBASE_IMM_TIMES = 0x50u, 280bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis REBASE_OPCODE_DO_REBASE_ULEB_TIMES = 0x60u, 281bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis REBASE_OPCODE_DO_REBASE_ADD_ADDR_ULEB = 0x70u, 282bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis REBASE_OPCODE_DO_REBASE_ULEB_TIMES_SKIPPING_ULEB = 0x80u 283bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis }; 284bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis 285bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis enum BindType { 286bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis BIND_TYPE_POINTER = 1u, 287bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis BIND_TYPE_TEXT_ABSOLUTE32 = 2u, 288bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis BIND_TYPE_TEXT_PCREL32 = 3u 289bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis }; 290bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis 291bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis enum BindSpecialDylib { 292118a0659ab8a4d0e0af343b88e5fa71a5c1eb6a6Reid Kleckner BIND_SPECIAL_DYLIB_SELF = 0, 293118a0659ab8a4d0e0af343b88e5fa71a5c1eb6a6Reid Kleckner BIND_SPECIAL_DYLIB_MAIN_EXECUTABLE = -1, 294118a0659ab8a4d0e0af343b88e5fa71a5c1eb6a6Reid Kleckner BIND_SPECIAL_DYLIB_FLAT_LOOKUP = -2 295bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis }; 296bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis 297bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis enum { 298bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis BIND_SYMBOL_FLAGS_WEAK_IMPORT = 0x1u, 299bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis BIND_SYMBOL_FLAGS_NON_WEAK_DEFINITION = 0x8u, 300bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis 301bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis BIND_OPCODE_MASK = 0xF0u, 302bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis BIND_IMMEDIATE_MASK = 0x0Fu 303bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis }; 304bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis 305bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis enum BindOpcode { 306bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis BIND_OPCODE_DONE = 0x00u, 307bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis BIND_OPCODE_SET_DYLIB_ORDINAL_IMM = 0x10u, 308bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis BIND_OPCODE_SET_DYLIB_ORDINAL_ULEB = 0x20u, 309bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis BIND_OPCODE_SET_DYLIB_SPECIAL_IMM = 0x30u, 310bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis BIND_OPCODE_SET_SYMBOL_TRAILING_FLAGS_IMM = 0x40u, 311bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis BIND_OPCODE_SET_TYPE_IMM = 0x50u, 312bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis BIND_OPCODE_SET_ADDEND_SLEB = 0x60u, 313bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis BIND_OPCODE_SET_SEGMENT_AND_OFFSET_ULEB = 0x70u, 314bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis BIND_OPCODE_ADD_ADDR_ULEB = 0x80u, 315bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis BIND_OPCODE_DO_BIND = 0x90u, 316bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis BIND_OPCODE_DO_BIND_ADD_ADDR_ULEB = 0xA0u, 317bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis BIND_OPCODE_DO_BIND_ADD_ADDR_IMM_SCALED = 0xB0u, 318bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis BIND_OPCODE_DO_BIND_ULEB_TIMES_SKIPPING_ULEB = 0xC0u 319bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis }; 32098cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton 321bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis enum { 322bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis EXPORT_SYMBOL_FLAGS_KIND_MASK = 0x03u, 323bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis EXPORT_SYMBOL_FLAGS_WEAK_DEFINITION = 0x04u, 3240d94d8f9f1f8b8d45560b1e30cb6b3504e682371Nick Kledzik EXPORT_SYMBOL_FLAGS_REEXPORT = 0x08u, 3250d94d8f9f1f8b8d45560b1e30cb6b3504e682371Nick Kledzik EXPORT_SYMBOL_FLAGS_STUB_AND_RESOLVER = 0x10u 326bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis }; 327bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis 328bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis enum ExportSymbolKind { 329bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis EXPORT_SYMBOL_FLAGS_KIND_REGULAR = 0x00u, 330bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis EXPORT_SYMBOL_FLAGS_KIND_THREAD_LOCAL = 0x01u 331bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis }; 332bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis 333bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis 334bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis enum { 33598cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton // Constant masks for the "n_type" field in llvm::MachO::nlist and 33698cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton // llvm::MachO::nlist_64 337bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis N_STAB = 0xe0, 338bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis N_PEXT = 0x10, 339bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis N_TYPE = 0x0e, 340bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis N_EXT = 0x01 341bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis }; 34298cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton 343bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis enum NListType { 34498cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton // Constants for the "n_type & N_TYPE" llvm::MachO::nlist and 34598cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton // llvm::MachO::nlist_64 346bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis N_UNDF = 0x0u, 347bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis N_ABS = 0x2u, 348bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis N_SECT = 0xeu, 349bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis N_PBUD = 0xcu, 350bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis N_INDR = 0xau 351bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis }; 35298cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton 353bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis enum SectionOrdinal { 354bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis // Constants for the "n_sect" field in llvm::MachO::nlist and 35598cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton // llvm::MachO::nlist_64 356bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis NO_SECT = 0u, 357bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis MAX_SECT = 0xffu 358bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis }; 35998cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton 360bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis enum { 361bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis // Constant masks for the "n_desc" field in llvm::MachO::nlist and 362bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis // llvm::MachO::nlist_64 363cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines // The low 3 bits are the for the REFERENCE_TYPE. 364cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines REFERENCE_TYPE = 0x7, 365cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines REFERENCE_FLAG_UNDEFINED_NON_LAZY = 0, 366cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines REFERENCE_FLAG_UNDEFINED_LAZY = 1, 367cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines REFERENCE_FLAG_DEFINED = 2, 368cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines REFERENCE_FLAG_PRIVATE_DEFINED = 3, 369cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines REFERENCE_FLAG_PRIVATE_UNDEFINED_NON_LAZY = 4, 370cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines REFERENCE_FLAG_PRIVATE_UNDEFINED_LAZY = 5, 371cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines // Flag bits (some overlap with the library ordinal bits). 372bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis N_ARM_THUMB_DEF = 0x0008u, 373cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines REFERENCED_DYNAMICALLY = 0x0010u, 374bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis N_NO_DEAD_STRIP = 0x0020u, 375bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis N_WEAK_REF = 0x0040u, 376bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis N_WEAK_DEF = 0x0080u, 377cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines N_SYMBOL_RESOLVER = 0x0100u, 378cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines N_ALT_ENTRY = 0x0200u, 379cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines // For undefined symbols coming from libraries, see GET_LIBRARY_ORDINAL() 380cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines // as these are in the top 8 bits. 381cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines SELF_LIBRARY_ORDINAL = 0x0, 382cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines MAX_LIBRARY_ORDINAL = 0xfd, 383cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines DYNAMIC_LOOKUP_ORDINAL = 0xfe, 384cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines EXECUTABLE_ORDINAL = 0xff 385bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis }; 386c38c36a8c44bd32bdfc2e48ab3e447f6dc1547bdMichael J. Spencer 387bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis enum StabType { 38898cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton // Constant values for the "n_type" field in llvm::MachO::nlist and 38998cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton // llvm::MachO::nlist_64 when "(n_type & NlistMaskStab) != 0" 390bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis N_GSYM = 0x20u, 391bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis N_FNAME = 0x22u, 392bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis N_FUN = 0x24u, 393bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis N_STSYM = 0x26u, 394bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis N_LCSYM = 0x28u, 395bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis N_BNSYM = 0x2Eu, 396bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis N_OPT = 0x3Cu, 397bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis N_RSYM = 0x40u, 398bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis N_SLINE = 0x44u, 399bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis N_ENSYM = 0x4Eu, 400bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis N_SSYM = 0x60u, 401bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis N_SO = 0x64u, 402bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis N_OSO = 0x66u, 403bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis N_LSYM = 0x80u, 404bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis N_BINCL = 0x82u, 405bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis N_SOL = 0x84u, 406bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis N_PARAMS = 0x86u, 407bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis N_VERSION = 0x88u, 408bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis N_OLEVEL = 0x8Au, 409bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis N_PSYM = 0xA0u, 410bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis N_EINCL = 0xA2u, 411bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis N_ENTRY = 0xA4u, 412bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis N_LBRAC = 0xC0u, 413bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis N_EXCL = 0xC2u, 414bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis N_RBRAC = 0xE0u, 415bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis N_BCOMM = 0xE2u, 416bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis N_ECOMM = 0xE4u, 417bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis N_ECOML = 0xE8u, 418bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis N_LENG = 0xFEu 419bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis }; 42098cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton 42136b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines enum : uint32_t { 422bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis // Constant values for the r_symbolnum field in an 423bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis // llvm::MachO::relocation_info structure when r_extern is 0. 424bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis R_ABS = 0, 425bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis 426bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis // Constant bits for the r_address field in an 427bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis // llvm::MachO::relocation_info structure. 428bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis R_SCATTERED = 0x80000000 429bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis }; 430bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis 431bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis enum RelocationInfoType { 432bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis // Constant values for the r_type field in an 433bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis // llvm::MachO::relocation_info or llvm::MachO::scattered_relocation_info 434bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis // structure. 435bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis GENERIC_RELOC_VANILLA = 0, 436bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis GENERIC_RELOC_PAIR = 1, 437bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis GENERIC_RELOC_SECTDIFF = 2, 438bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis GENERIC_RELOC_PB_LA_PTR = 3, 439bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis GENERIC_RELOC_LOCAL_SECTDIFF = 4, 440bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis GENERIC_RELOC_TLV = 5, 441bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis 442bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis // Constant values for the r_type field in a PowerPC architecture 443bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis // llvm::MachO::relocation_info or llvm::MachO::scattered_relocation_info 444bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis // structure. 445bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis PPC_RELOC_VANILLA = GENERIC_RELOC_VANILLA, 446bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis PPC_RELOC_PAIR = GENERIC_RELOC_PAIR, 447bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis PPC_RELOC_BR14 = 2, 448bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis PPC_RELOC_BR24 = 3, 449bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis PPC_RELOC_HI16 = 4, 450bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis PPC_RELOC_LO16 = 5, 451bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis PPC_RELOC_HA16 = 6, 452bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis PPC_RELOC_LO14 = 7, 453bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis PPC_RELOC_SECTDIFF = 8, 454bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis PPC_RELOC_PB_LA_PTR = 9, 455bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis PPC_RELOC_HI16_SECTDIFF = 10, 456bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis PPC_RELOC_LO16_SECTDIFF = 11, 457bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis PPC_RELOC_HA16_SECTDIFF = 12, 458bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis PPC_RELOC_JBSR = 13, 459bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis PPC_RELOC_LO14_SECTDIFF = 14, 460bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis PPC_RELOC_LOCAL_SECTDIFF = 15, 461bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis 462bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis // Constant values for the r_type field in an ARM architecture 463bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis // llvm::MachO::relocation_info or llvm::MachO::scattered_relocation_info 464bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis // structure. 465bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis ARM_RELOC_VANILLA = GENERIC_RELOC_VANILLA, 466bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis ARM_RELOC_PAIR = GENERIC_RELOC_PAIR, 467bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis ARM_RELOC_SECTDIFF = GENERIC_RELOC_SECTDIFF, 468bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis ARM_RELOC_LOCAL_SECTDIFF = 3, 469bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis ARM_RELOC_PB_LA_PTR = 4, 470bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis ARM_RELOC_BR24 = 5, 471bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis ARM_THUMB_RELOC_BR22 = 6, 472bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis ARM_THUMB_32BIT_BRANCH = 7, // obsolete 473bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis ARM_RELOC_HALF = 8, 474bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis ARM_RELOC_HALF_SECTDIFF = 9, 475bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis 47636b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines // Constant values for the r_type field in an ARM64 architecture 47736b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines // llvm::MachO::relocation_info or llvm::MachO::scattered_relocation_info 47836b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines // structure. 47936b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines 48036b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines // For pointers. 48136b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines ARM64_RELOC_UNSIGNED = 0, 48236b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines // Must be followed by an ARM64_RELOC_UNSIGNED 48336b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines ARM64_RELOC_SUBTRACTOR = 1, 48436b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines // A B/BL instruction with 26-bit displacement. 48536b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines ARM64_RELOC_BRANCH26 = 2, 48636b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines // PC-rel distance to page of target. 48736b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines ARM64_RELOC_PAGE21 = 3, 48836b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines // Offset within page, scaled by r_length. 48936b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines ARM64_RELOC_PAGEOFF12 = 4, 49036b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines // PC-rel distance to page of GOT slot. 49136b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines ARM64_RELOC_GOT_LOAD_PAGE21 = 5, 49236b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines // Offset within page of GOT slot, scaled by r_length. 49336b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines ARM64_RELOC_GOT_LOAD_PAGEOFF12 = 6, 49436b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines // For pointers to GOT slots. 49536b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines ARM64_RELOC_POINTER_TO_GOT = 7, 49636b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines // PC-rel distance to page of TLVP slot. 49736b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines ARM64_RELOC_TLVP_LOAD_PAGE21 = 8, 49836b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines // Offset within page of TLVP slot, scaled by r_length. 49936b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines ARM64_RELOC_TLVP_LOAD_PAGEOFF12 = 9, 50036b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines // Must be followed by ARM64_RELOC_PAGE21 or ARM64_RELOC_PAGEOFF12. 50136b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines ARM64_RELOC_ADDEND = 10, 50236b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines 50336b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines 504bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis // Constant values for the r_type field in an x86_64 architecture 505bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis // llvm::MachO::relocation_info or llvm::MachO::scattered_relocation_info 506bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis // structure 507bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis X86_64_RELOC_UNSIGNED = 0, 508bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis X86_64_RELOC_SIGNED = 1, 509bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis X86_64_RELOC_BRANCH = 2, 510bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis X86_64_RELOC_GOT_LOAD = 3, 511bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis X86_64_RELOC_GOT = 4, 512bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis X86_64_RELOC_SUBTRACTOR = 5, 513bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis X86_64_RELOC_SIGNED_1 = 6, 514bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis X86_64_RELOC_SIGNED_2 = 7, 515bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis X86_64_RELOC_SIGNED_4 = 8, 516bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis X86_64_RELOC_TLV = 9 51798cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton }; 5186bbf5eb32f35c6bbef5434ba06339a10c860d86cJim Grosbach 519a38c27be0ff5dd35fcd20cfce827f9dbdb24d1eaNick Kledzik // Values for segment_command.initprot. 520a38c27be0ff5dd35fcd20cfce827f9dbdb24d1eaNick Kledzik // From <mach/vm_prot.h> 521a38c27be0ff5dd35fcd20cfce827f9dbdb24d1eaNick Kledzik enum { 522a38c27be0ff5dd35fcd20cfce827f9dbdb24d1eaNick Kledzik VM_PROT_READ = 0x1, 523a38c27be0ff5dd35fcd20cfce827f9dbdb24d1eaNick Kledzik VM_PROT_WRITE = 0x2, 524a38c27be0ff5dd35fcd20cfce827f9dbdb24d1eaNick Kledzik VM_PROT_EXECUTE = 0x4 525a38c27be0ff5dd35fcd20cfce827f9dbdb24d1eaNick Kledzik }; 526a38c27be0ff5dd35fcd20cfce827f9dbdb24d1eaNick Kledzik 527a38c27be0ff5dd35fcd20cfce827f9dbdb24d1eaNick Kledzik 52898cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton // Structs from <mach-o/loader.h> 5296bbf5eb32f35c6bbef5434ba06339a10c860d86cJim Grosbach 53098cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton struct mach_header { 53198cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t magic; 53298cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t cputype; 53398cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t cpusubtype; 53498cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t filetype; 53598cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t ncmds; 53698cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t sizeofcmds; 53798cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t flags; 53898cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton }; 53998cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton 54098cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton struct mach_header_64 { 54198cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t magic; 54298cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t cputype; 54398cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t cpusubtype; 54498cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t filetype; 54598cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t ncmds; 54698cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t sizeofcmds; 54798cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t flags; 54898cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t reserved; 54998cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton }; 55098cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton 55198cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton struct load_command { 55298cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t cmd; 55398cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t cmdsize; 55498cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton }; 55598cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton 55698cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton struct segment_command { 55798cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t cmd; 55898cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t cmdsize; 55998cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton char segname[16]; 56098cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t vmaddr; 56198cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t vmsize; 56298cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t fileoff; 56398cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t filesize; 56498cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t maxprot; 56598cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t initprot; 56698cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t nsects; 56798cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t flags; 56898cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton }; 56998cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton 57098cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton struct segment_command_64 { 57198cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t cmd; 57298cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t cmdsize; 57398cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton char segname[16]; 57498cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint64_t vmaddr; 57598cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint64_t vmsize; 57698cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint64_t fileoff; 57798cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint64_t filesize; 57898cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t maxprot; 57998cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t initprot; 58098cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t nsects; 58198cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t flags; 58298cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton }; 58398cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton 58498cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton struct section { 58598cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton char sectname[16]; 58698cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton char segname[16]; 58798cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t addr; 58898cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t size; 58998cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t offset; 59098cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t align; 59198cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t reloff; 59298cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t nreloc; 59398cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t flags; 59498cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t reserved1; 59598cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t reserved2; 59698cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton }; 59798cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton 59898cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton struct section_64 { 59998cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton char sectname[16]; 60098cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton char segname[16]; 60198cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint64_t addr; 60298cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint64_t size; 60398cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t offset; 60498cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t align; 60598cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t reloff; 60698cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t nreloc; 60798cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t flags; 60898cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t reserved1; 60998cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t reserved2; 61098cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t reserved3; 61198cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton }; 61298cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton 61398cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton struct fvmlib { 61498cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t name; 61598cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t minor_version; 61698cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t header_addr; 61798cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton }; 61898cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton 61998cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton struct fvmlib_command { 62098cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t cmd; 62198cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t cmdsize; 62298cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton struct fvmlib fvmlib; 62398cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton }; 62498cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton 62598cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton struct dylib { 62698cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t name; 62798cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t timestamp; 62898cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t current_version; 62998cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t compatibility_version; 63098cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton }; 63198cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton 63298cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton struct dylib_command { 63398cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t cmd; 63498cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t cmdsize; 63598cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton struct dylib dylib; 63698cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton }; 63798cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton 63898cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton struct sub_framework_command { 63998cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t cmd; 64098cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t cmdsize; 64198cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t umbrella; 64298cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton }; 64398cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton 64498cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton struct sub_client_command { 64598cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t cmd; 64698cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t cmdsize; 64798cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t client; 64898cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton }; 64998cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton 65098cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton struct sub_umbrella_command { 65198cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t cmd; 65298cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t cmdsize; 65398cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t sub_umbrella; 65498cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton }; 65598cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton 65698cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton struct sub_library_command { 65798cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t cmd; 65898cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t cmdsize; 65998cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t sub_library; 66098cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton }; 66198cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton 66298cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton struct prebound_dylib_command { 66398cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t cmd; 66498cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t cmdsize; 66598cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t name; 66698cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t nmodules; 66798cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t linked_modules; 66898cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton }; 66998cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton 67098cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton struct dylinker_command { 67198cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t cmd; 67298cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t cmdsize; 67398cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t name; 67498cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton }; 67598cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton 67698cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton struct thread_command { 67798cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t cmd; 67898cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t cmdsize; 67998cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton }; 68098cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton 68198cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton struct routines_command { 68298cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t cmd; 68398cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t cmdsize; 68498cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t init_address; 68598cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t init_module; 68698cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t reserved1; 68798cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t reserved2; 68898cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t reserved3; 68998cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t reserved4; 69098cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t reserved5; 69198cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t reserved6; 69298cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton }; 69398cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton 69498cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton struct routines_command_64 { 69598cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t cmd; 69698cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t cmdsize; 69798cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint64_t init_address; 69898cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint64_t init_module; 69998cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint64_t reserved1; 70098cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint64_t reserved2; 70198cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint64_t reserved3; 70298cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint64_t reserved4; 70398cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint64_t reserved5; 70498cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint64_t reserved6; 70598cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton }; 70698cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton 70798cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton struct symtab_command { 70898cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t cmd; 70998cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t cmdsize; 71098cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t symoff; 71198cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t nsyms; 71298cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t stroff; 71398cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t strsize; 71498cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton }; 71598cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton 71698cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton struct dysymtab_command { 71798cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t cmd; 71898cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t cmdsize; 71998cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t ilocalsym; 72098cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t nlocalsym; 72198cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t iextdefsym; 72298cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t nextdefsym; 72398cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t iundefsym; 72498cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t nundefsym; 72598cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t tocoff; 72698cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t ntoc; 72798cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t modtaboff; 72898cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t nmodtab; 72998cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t extrefsymoff; 73098cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t nextrefsyms; 73198cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t indirectsymoff; 73298cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t nindirectsyms; 73398cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t extreloff; 73498cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t nextrel; 73598cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t locreloff; 73698cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t nlocrel; 73717689b13be2f3f6e56c3a9dc3bc6193b7c732abcBill Wendling }; 73898cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton 73998cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton struct dylib_table_of_contents { 74098cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t symbol_index; 74198cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t module_index; 74217689b13be2f3f6e56c3a9dc3bc6193b7c732abcBill Wendling }; 74398cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton 74498cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton struct dylib_module { 74598cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t module_name; 74698cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t iextdefsym; 74798cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t nextdefsym; 74898cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t irefsym; 74998cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t nrefsym; 75098cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t ilocalsym; 75198cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t nlocalsym; 75298cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t iextrel; 75398cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t nextrel; 75498cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t iinit_iterm; 75598cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t ninit_nterm; 75698cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t objc_module_info_addr; 75798cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t objc_module_info_size; 75817689b13be2f3f6e56c3a9dc3bc6193b7c732abcBill Wendling }; 75998cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton 76098cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton struct dylib_module_64 { 76198cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t module_name; 76298cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t iextdefsym; 76398cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t nextdefsym; 76498cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t irefsym; 76598cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t nrefsym; 76698cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t ilocalsym; 76798cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t nlocalsym; 76898cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t iextrel; 76998cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t nextrel; 77098cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t iinit_iterm; 77198cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t ninit_nterm; 77298cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t objc_module_info_size; 77398cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint64_t objc_module_info_addr; 77498cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton }; 77598cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton 77698cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton struct dylib_reference { 77798cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t isym:24, 77898cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton flags:8; 77998cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton }; 78098cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton 78198cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton 78298cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton struct twolevel_hints_command { 78398cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t cmd; 78498cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t cmdsize; 78598cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t offset; 78698cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t nhints; 78798cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton }; 78898cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton 78998cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton struct twolevel_hint { 79098cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t isub_image:8, 79198cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton itoc:24; 79298cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton }; 79398cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton 79498cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton struct prebind_cksum_command { 79598cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t cmd; 79698cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t cmdsize; 79798cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t cksum; 79898cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton }; 79998cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton 80098cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton struct uuid_command { 80198cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t cmd; 80298cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t cmdsize; 80398cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint8_t uuid[16]; 80498cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton }; 80598cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton 80698cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton struct rpath_command { 80798cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t cmd; 80898cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t cmdsize; 80998cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t path; 81098cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton }; 81198cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton 81298cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton struct linkedit_data_command { 81398cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t cmd; 81498cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t cmdsize; 81598cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t dataoff; 81698cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t datasize; 81798cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton }; 81898cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton 819bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis struct data_in_code_entry { 820bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis uint32_t offset; 821bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis uint16_t length; 822bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis uint16_t kind; 823bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis }; 824bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis 825bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis struct source_version_command { 826bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis uint32_t cmd; 827bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis uint32_t cmdsize; 828bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis uint64_t version; 829bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis }; 830bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis 83198cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton struct encryption_info_command { 83298cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t cmd; 83398cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t cmdsize; 83498cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t cryptoff; 83598cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t cryptsize; 83698cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t cryptid; 83798cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton }; 83898cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton 839bc6b89ed31ef77098803abe64af94f318ad716bbBenjamin Kramer struct version_min_command { 84036b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines uint32_t cmd; // LC_VERSION_MIN_MACOSX or 84136b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines // LC_VERSION_MIN_IPHONEOS 84236b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines uint32_t cmdsize; // sizeof(struct version_min_command) 84336b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines uint32_t version; // X.Y.Z is encoded in nibbles xxxx.yy.zz 844bc6b89ed31ef77098803abe64af94f318ad716bbBenjamin Kramer uint32_t reserved; 845bc6b89ed31ef77098803abe64af94f318ad716bbBenjamin Kramer }; 846bc6b89ed31ef77098803abe64af94f318ad716bbBenjamin Kramer 84798cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton struct dyld_info_command { 84898cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t cmd; 84998cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t cmdsize; 85098cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t rebase_off; 85198cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t rebase_size; 85298cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t bind_off; 85398cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t bind_size; 85498cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t weak_bind_off; 85598cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t weak_bind_size; 85698cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t lazy_bind_off; 85798cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t lazy_bind_size; 85898cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t export_off; 85998cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t export_size; 86098cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton }; 86198cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton 862bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis struct linker_options_command { 863bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis uint32_t cmd; 864bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis uint32_t cmdsize; 865bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis uint32_t count; 866bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis }; 867bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis 86898cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton struct symseg_command { 86998cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t cmd; 87098cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t cmdsize; 87198cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t offset; 87298cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t size; 87398cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton }; 87498cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton 87598cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton struct ident_command { 87698cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t cmd; 87798cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t cmdsize; 87898cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton }; 87998cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton 88098cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton struct fvmfile_command { 88198cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t cmd; 88298cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t cmdsize; 88398cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t name; 88498cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t header_addr; 88598cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton }; 88698cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton 887bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis struct tlv_descriptor_32 { 888bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis uint32_t thunk; 889bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis uint32_t key; 890bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis uint32_t offset; 891bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis }; 892bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis 893bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis struct tlv_descriptor_64 { 894bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis uint64_t thunk; 895bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis uint64_t key; 896bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis uint64_t offset; 897bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis }; 898bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis 899bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis struct tlv_descriptor { 900bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis uintptr_t thunk; 901bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis uintptr_t key; 902bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis uintptr_t offset; 903bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis }; 904bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis 905fe018c414542141010ef0706820ebfde0a4b3e41Ahmed Bougacha struct entry_point_command { 906fe018c414542141010ef0706820ebfde0a4b3e41Ahmed Bougacha uint32_t cmd; 907fe018c414542141010ef0706820ebfde0a4b3e41Ahmed Bougacha uint32_t cmdsize; 908fe018c414542141010ef0706820ebfde0a4b3e41Ahmed Bougacha uint64_t entryoff; 909fe018c414542141010ef0706820ebfde0a4b3e41Ahmed Bougacha uint64_t stacksize; 910fe018c414542141010ef0706820ebfde0a4b3e41Ahmed Bougacha }; 911fe018c414542141010ef0706820ebfde0a4b3e41Ahmed Bougacha 91298cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton 91398cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton // Structs from <mach-o/fat.h> 91498cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton struct fat_header { 91598cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t magic; 91698cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t nfat_arch; 91798cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton }; 91898cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton 91998cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton struct fat_arch { 92098cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t cputype; 92198cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t cpusubtype; 92298cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t offset; 92398cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t size; 92498cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t align; 92598cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton }; 92698cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton 927bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis // Structs from <mach-o/reloc.h> 928bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis struct relocation_info { 929bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis int32_t r_address; 930bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis uint32_t r_symbolnum:24, 931bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis r_pcrel:1, 932bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis r_length:2, 933bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis r_extern:1, 934bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis r_type:4; 935bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis }; 936bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis 937bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis struct scattered_relocation_info { 938bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis#if defined(BYTE_ORDER) && defined(BIG_ENDIAN) && (BYTE_ORDER == BIG_ENDIAN) 939bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis uint32_t r_scattered:1, 940bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis r_pcrel:1, 941bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis r_length:2, 942bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis r_type:4, 943bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis r_address:24; 944bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis#else 945bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis uint32_t r_address:24, 946bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis r_type:4, 947bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis r_length:2, 948bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis r_pcrel:1, 949bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis r_scattered:1; 950bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis#endif 951bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis int32_t r_value; 952bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis }; 953bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis 954bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis // Structs NOT from <mach-o/reloc.h>, but that make LLVM's life easier 955bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis struct any_relocation_info { 956bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis uint32_t r_word0, r_word1; 957bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis }; 958bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis 959bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis // Structs from <mach-o/nlist.h> 96098cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton struct nlist { 96198cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t n_strx; 96298cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint8_t n_type; 96398cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint8_t n_sect; 96498cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton int16_t n_desc; 96598cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t n_value; 96698cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton }; 96798cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton 96898cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton struct nlist_64 { 96998cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t n_strx; 97098cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint8_t n_type; 97198cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint8_t n_sect; 97298cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint16_t n_desc; 97398cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint64_t n_value; 97498cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton }; 97598cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton 97698cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton // Get/Set functions from <mach-o/nlist.h> 9776bbf5eb32f35c6bbef5434ba06339a10c860d86cJim Grosbach 978bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis static inline uint16_t GET_LIBRARY_ORDINAL(uint16_t n_desc) { 97998cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton return (((n_desc) >> 8u) & 0xffu); 98098cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton } 9816bbf5eb32f35c6bbef5434ba06339a10c860d86cJim Grosbach 982bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis static inline void SET_LIBRARY_ORDINAL(uint16_t &n_desc, uint8_t ordinal) { 98398cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton n_desc = (((n_desc) & 0x00ff) | (((ordinal) & 0xff) << 8)); 98498cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton } 98598cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton 986bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis static inline uint8_t GET_COMM_ALIGN (uint16_t n_desc) { 98798cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton return (n_desc >> 8u) & 0x0fu; 98898cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton } 9896bbf5eb32f35c6bbef5434ba06339a10c860d86cJim Grosbach 990bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis static inline void SET_COMM_ALIGN (uint16_t &n_desc, uint8_t align) { 99198cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton n_desc = ((n_desc & 0xf0ffu) | ((align & 0x0fu) << 8u)); 99298cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton } 99398cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton 99445f8c095ad94888716ceff54daf2fdf2f2f668a4Chris Lattner // Enums from <mach/machine.h> 99536b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines enum : uint32_t { 99645f8c095ad94888716ceff54daf2fdf2f2f668a4Chris Lattner // Capability bits used in the definition of cpu_type. 997bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis CPU_ARCH_MASK = 0xff000000, // Mask for architecture bits 998bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis CPU_ARCH_ABI64 = 0x01000000 // 64 bit ABI 999bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis }; 100045f8c095ad94888716ceff54daf2fdf2f2f668a4Chris Lattner 1001bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis // Constants for the cputype field. 1002bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis enum CPUType { 1003bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis CPU_TYPE_ANY = -1, 1004bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis CPU_TYPE_X86 = 7, 1005bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis CPU_TYPE_I386 = CPU_TYPE_X86, 1006bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis CPU_TYPE_X86_64 = CPU_TYPE_X86 | CPU_ARCH_ABI64, 1007bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis /* CPU_TYPE_MIPS = 8, */ 1008bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis CPU_TYPE_MC98000 = 10, // Old Motorola PowerPC 1009bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis CPU_TYPE_ARM = 12, 101036b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines CPU_TYPE_ARM64 = CPU_TYPE_ARM | CPU_ARCH_ABI64, 1011bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis CPU_TYPE_SPARC = 14, 1012bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis CPU_TYPE_POWERPC = 18, 1013bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis CPU_TYPE_POWERPC64 = CPU_TYPE_POWERPC | CPU_ARCH_ABI64 1014bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis }; 10156bbf5eb32f35c6bbef5434ba06339a10c860d86cJim Grosbach 101636b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines enum : uint32_t { 1017bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis // Capability bits used in the definition of cpusubtype. 1018cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines CPU_SUBTYPE_MASK = 0xff000000, // Mask for architecture bits 1019cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines CPU_SUBTYPE_LIB64 = 0x80000000, // 64 bit libraries 1020bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis 1021bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis // Special CPU subtype constants. 1022118a0659ab8a4d0e0af343b88e5fa71a5c1eb6a6Reid Kleckner CPU_SUBTYPE_MULTIPLE = ~0u 1023bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis }; 1024bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis 1025bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis // Constants for the cpusubtype field. 1026bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis enum CPUSubTypeX86 { 1027bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis CPU_SUBTYPE_I386_ALL = 3, 1028bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis CPU_SUBTYPE_386 = 3, 1029bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis CPU_SUBTYPE_486 = 4, 1030bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis CPU_SUBTYPE_486SX = 0x84, 1031bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis CPU_SUBTYPE_586 = 5, 1032bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis CPU_SUBTYPE_PENT = CPU_SUBTYPE_586, 1033bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis CPU_SUBTYPE_PENTPRO = 0x16, 1034bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis CPU_SUBTYPE_PENTII_M3 = 0x36, 1035bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis CPU_SUBTYPE_PENTII_M5 = 0x56, 1036bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis CPU_SUBTYPE_CELERON = 0x67, 1037bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis CPU_SUBTYPE_CELERON_MOBILE = 0x77, 1038bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis CPU_SUBTYPE_PENTIUM_3 = 0x08, 1039bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis CPU_SUBTYPE_PENTIUM_3_M = 0x18, 1040bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis CPU_SUBTYPE_PENTIUM_3_XEON = 0x28, 1041bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis CPU_SUBTYPE_PENTIUM_M = 0x09, 1042bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis CPU_SUBTYPE_PENTIUM_4 = 0x0a, 1043bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis CPU_SUBTYPE_PENTIUM_4_M = 0x1a, 1044bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis CPU_SUBTYPE_ITANIUM = 0x0b, 1045bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis CPU_SUBTYPE_ITANIUM_2 = 0x1b, 1046bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis CPU_SUBTYPE_XEON = 0x0c, 1047bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis CPU_SUBTYPE_XEON_MP = 0x1c, 1048bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis 1049bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis CPU_SUBTYPE_X86_ALL = 3, 1050bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis CPU_SUBTYPE_X86_64_ALL = 3, 105135de9946d5fc01d2fed970bdcc7966bad92bdbc4Jim Grosbach CPU_SUBTYPE_X86_ARCH1 = 4, 105235de9946d5fc01d2fed970bdcc7966bad92bdbc4Jim Grosbach CPU_SUBTYPE_X86_64_H = 8 1053bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis }; 1054bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis static inline int CPU_SUBTYPE_INTEL(int Family, int Model) { 1055bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis return Family | (Model << 4); 1056bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis } 1057bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis static inline int CPU_SUBTYPE_INTEL_FAMILY(CPUSubTypeX86 ST) { 1058bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis return ((int)ST) & 0x0f; 1059bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis } 1060bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis static inline int CPU_SUBTYPE_INTEL_MODEL(CPUSubTypeX86 ST) { 1061bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis return ((int)ST) >> 4; 1062bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis } 1063bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis enum { 1064bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis CPU_SUBTYPE_INTEL_FAMILY_MAX = 15, 1065bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis CPU_SUBTYPE_INTEL_MODEL_ALL = 0 1066bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis }; 1067bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis 1068bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis enum CPUSubTypeARM { 1069bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis CPU_SUBTYPE_ARM_ALL = 0, 1070bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis CPU_SUBTYPE_ARM_V4T = 5, 1071bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis CPU_SUBTYPE_ARM_V6 = 6, 1072bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis CPU_SUBTYPE_ARM_V5 = 7, 1073bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis CPU_SUBTYPE_ARM_V5TEJ = 7, 1074bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis CPU_SUBTYPE_ARM_XSCALE = 8, 1075bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis CPU_SUBTYPE_ARM_V7 = 9, 107636b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines // unused ARM_V7F = 10, 1077bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis CPU_SUBTYPE_ARM_V7S = 11, 1078bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis CPU_SUBTYPE_ARM_V7K = 12, 1079bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis CPU_SUBTYPE_ARM_V6M = 14, 1080bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis CPU_SUBTYPE_ARM_V7M = 15, 1081bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis CPU_SUBTYPE_ARM_V7EM = 16 1082bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis }; 1083bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis 108436b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines enum CPUSubTypeARM64 { 108536b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines CPU_SUBTYPE_ARM64_ALL = 0 108636b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines }; 108736b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines 1088bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis enum CPUSubTypeSPARC { 1089bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis CPU_SUBTYPE_SPARC_ALL = 0 1090bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis }; 1091bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis 1092bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis enum CPUSubTypePowerPC { 1093bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis CPU_SUBTYPE_POWERPC_ALL = 0, 1094bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis CPU_SUBTYPE_POWERPC_601 = 1, 1095bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis CPU_SUBTYPE_POWERPC_602 = 2, 1096bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis CPU_SUBTYPE_POWERPC_603 = 3, 1097bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis CPU_SUBTYPE_POWERPC_603e = 4, 1098bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis CPU_SUBTYPE_POWERPC_603ev = 5, 1099bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis CPU_SUBTYPE_POWERPC_604 = 6, 1100bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis CPU_SUBTYPE_POWERPC_604e = 7, 1101bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis CPU_SUBTYPE_POWERPC_620 = 8, 1102bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis CPU_SUBTYPE_POWERPC_750 = 9, 1103bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis CPU_SUBTYPE_POWERPC_7400 = 10, 1104bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis CPU_SUBTYPE_POWERPC_7450 = 11, 1105bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis CPU_SUBTYPE_POWERPC_970 = 100, 1106bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis 1107bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis CPU_SUBTYPE_MC980000_ALL = CPU_SUBTYPE_POWERPC_ALL, 1108bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis CPU_SUBTYPE_MC98601 = CPU_SUBTYPE_POWERPC_601 110945f8c095ad94888716ceff54daf2fdf2f2f668a4Chris Lattner }; 111045f8c095ad94888716ceff54daf2fdf2f2f668a4Chris Lattner } // end namespace MachO 111145f8c095ad94888716ceff54daf2fdf2f2f668a4Chris Lattner} // end namespace llvm 111245f8c095ad94888716ceff54daf2fdf2f2f668a4Chris Lattner 111345f8c095ad94888716ceff54daf2fdf2f2f668a4Chris Lattner#endif 1114