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, 7637ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines MH_DEAD_STRIPPABLE_DYLIB = 0x00400000u, 7737ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines MH_HAS_TLV_DESCRIPTORS = 0x00800000u, 7837ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines MH_NO_HEAP_EXECUTION = 0x01000000u, 7937ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines MH_APP_EXTENSION_SAFE = 0x02000000u 80bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis }; 816bbf5eb32f35c6bbef5434ba06339a10c860d86cJim Grosbach 8236b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines enum : uint32_t { 83bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis // Flags for the "cmd" field in llvm::MachO::load_command 84bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis LC_REQ_DYLD = 0x80000000u 85bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis }; 86bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis 8736b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines enum LoadCommandType : uint32_t { 8898cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton // Constants for the "cmd" field in llvm::MachO::load_command 89bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis LC_SEGMENT = 0x00000001u, 90bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis LC_SYMTAB = 0x00000002u, 91bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis LC_SYMSEG = 0x00000003u, 92bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis LC_THREAD = 0x00000004u, 93bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis LC_UNIXTHREAD = 0x00000005u, 94bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis LC_LOADFVMLIB = 0x00000006u, 95bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis LC_IDFVMLIB = 0x00000007u, 96bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis LC_IDENT = 0x00000008u, 97bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis LC_FVMFILE = 0x00000009u, 98bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis LC_PREPAGE = 0x0000000Au, 99bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis LC_DYSYMTAB = 0x0000000Bu, 100bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis LC_LOAD_DYLIB = 0x0000000Cu, 101bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis LC_ID_DYLIB = 0x0000000Du, 102bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis LC_LOAD_DYLINKER = 0x0000000Eu, 103bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis LC_ID_DYLINKER = 0x0000000Fu, 104bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis LC_PREBOUND_DYLIB = 0x00000010u, 105bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis LC_ROUTINES = 0x00000011u, 106bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis LC_SUB_FRAMEWORK = 0x00000012u, 107bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis LC_SUB_UMBRELLA = 0x00000013u, 108bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis LC_SUB_CLIENT = 0x00000014u, 109bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis LC_SUB_LIBRARY = 0x00000015u, 110bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis LC_TWOLEVEL_HINTS = 0x00000016u, 111bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis LC_PREBIND_CKSUM = 0x00000017u, 112bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis LC_LOAD_WEAK_DYLIB = 0x80000018u, 113bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis LC_SEGMENT_64 = 0x00000019u, 114bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis LC_ROUTINES_64 = 0x0000001Au, 115bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis LC_UUID = 0x0000001Bu, 116bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis LC_RPATH = 0x8000001Cu, 117bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis LC_CODE_SIGNATURE = 0x0000001Du, 118bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis LC_SEGMENT_SPLIT_INFO = 0x0000001Eu, 119bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis LC_REEXPORT_DYLIB = 0x8000001Fu, 120bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis LC_LAZY_LOAD_DYLIB = 0x00000020u, 121bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis LC_ENCRYPTION_INFO = 0x00000021u, 122bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis LC_DYLD_INFO = 0x00000022u, 123bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis LC_DYLD_INFO_ONLY = 0x80000022u, 124bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis LC_LOAD_UPWARD_DYLIB = 0x80000023u, 125bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis LC_VERSION_MIN_MACOSX = 0x00000024u, 126bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis LC_VERSION_MIN_IPHONEOS = 0x00000025u, 127bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis LC_FUNCTION_STARTS = 0x00000026u, 128bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis LC_DYLD_ENVIRONMENT = 0x00000027u, 129bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis LC_MAIN = 0x80000028u, 130bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis LC_DATA_IN_CODE = 0x00000029u, 131bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis LC_SOURCE_VERSION = 0x0000002Au, 132bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis LC_DYLIB_CODE_SIGN_DRS = 0x0000002Bu, 133ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines LC_ENCRYPTION_INFO_64 = 0x0000002Cu, 134ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines LC_LINKER_OPTION = 0x0000002Du, 13536b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines LC_LINKER_OPTIMIZATION_HINT = 0x0000002Eu 136bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis }; 1376bbf5eb32f35c6bbef5434ba06339a10c860d86cJim Grosbach 13836b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines enum : uint32_t { 13998cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton // Constant bits for the "flags" field in llvm::MachO::segment_command 140bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis SG_HIGHVM = 0x1u, 141bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis SG_FVMLIB = 0x2u, 142bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis SG_NORELOC = 0x4u, 143bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis SG_PROTECTED_VERSION_1 = 0x8u, 14498cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton 14598cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton 14698cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton // Constant masks for the "flags" field in llvm::MachO::section and 14798cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton // llvm::MachO::section_64 148bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis SECTION_TYPE = 0x000000ffu, // SECTION_TYPE 149bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis SECTION_ATTRIBUTES = 0xffffff00u, // SECTION_ATTRIBUTES 150bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis SECTION_ATTRIBUTES_USR = 0xff000000u, // SECTION_ATTRIBUTES_USR 151bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis SECTION_ATTRIBUTES_SYS = 0x00ffff00u // SECTION_ATTRIBUTES_SYS 152bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis }; 15398cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton 15436b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines /// These are the section type and attributes fields. A MachO section can 15536b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines /// have only one Type, but can have any of the attributes specified. 15636b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines enum SectionType : uint32_t { 15798cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton // Constant masks for the "flags[7:0]" field in llvm::MachO::section and 15898cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton // llvm::MachO::section_64 (mask "flags" with SECTION_TYPE) 159dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines 160dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines /// S_REGULAR - Regular section. 161bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis S_REGULAR = 0x00u, 162dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines /// S_ZEROFILL - Zero fill on demand section. 163bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis S_ZEROFILL = 0x01u, 164dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines /// S_CSTRING_LITERALS - Section with literal C strings. 165bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis S_CSTRING_LITERALS = 0x02u, 166dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines /// S_4BYTE_LITERALS - Section with 4 byte literals. 167bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis S_4BYTE_LITERALS = 0x03u, 168dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines /// S_8BYTE_LITERALS - Section with 8 byte literals. 169bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis S_8BYTE_LITERALS = 0x04u, 170dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines /// S_LITERAL_POINTERS - Section with pointers to literals. 171bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis S_LITERAL_POINTERS = 0x05u, 172dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines /// S_NON_LAZY_SYMBOL_POINTERS - Section with non-lazy symbol pointers. 173bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis S_NON_LAZY_SYMBOL_POINTERS = 0x06u, 174dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines /// S_LAZY_SYMBOL_POINTERS - Section with lazy symbol pointers. 175bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis S_LAZY_SYMBOL_POINTERS = 0x07u, 176dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines /// S_SYMBOL_STUBS - Section with symbol stubs, byte size of stub in 177dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines /// the Reserved2 field. 178bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis S_SYMBOL_STUBS = 0x08u, 179dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines /// S_MOD_INIT_FUNC_POINTERS - Section with only function pointers for 180dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines /// initialization. 181bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis S_MOD_INIT_FUNC_POINTERS = 0x09u, 182dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines /// S_MOD_TERM_FUNC_POINTERS - Section with only function pointers for 183dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines /// termination. 184bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis S_MOD_TERM_FUNC_POINTERS = 0x0au, 185dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines /// S_COALESCED - Section contains symbols that are to be coalesced. 186bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis S_COALESCED = 0x0bu, 187dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines /// S_GB_ZEROFILL - Zero fill on demand section (that can be larger than 4 188dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines /// gigabytes). 189bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis S_GB_ZEROFILL = 0x0cu, 190dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines /// S_INTERPOSING - Section with only pairs of function pointers for 191dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines /// interposing. 192bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis S_INTERPOSING = 0x0du, 193dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines /// S_16BYTE_LITERALS - Section with only 16 byte literals. 194bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis S_16BYTE_LITERALS = 0x0eu, 195dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines /// S_DTRACE_DOF - Section contains DTrace Object Format. 196bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis S_DTRACE_DOF = 0x0fu, 197dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines /// S_LAZY_DYLIB_SYMBOL_POINTERS - Section with lazy symbol pointers to 198dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines /// lazy loaded dylibs. 199bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis S_LAZY_DYLIB_SYMBOL_POINTERS = 0x10u, 200dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines /// S_THREAD_LOCAL_REGULAR - Thread local data section. 201bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis S_THREAD_LOCAL_REGULAR = 0x11u, 202dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines /// S_THREAD_LOCAL_ZEROFILL - Thread local zerofill section. 203bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis S_THREAD_LOCAL_ZEROFILL = 0x12u, 204dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines /// S_THREAD_LOCAL_VARIABLES - Section with thread local variable 205dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines /// structure data. 206bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis S_THREAD_LOCAL_VARIABLES = 0x13u, 207dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines /// S_THREAD_LOCAL_VARIABLE_POINTERS - Section with pointers to thread 208dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines /// local structures. 2095b34493843fee70dd0aba300466da2b020676d65Nick Kledzik S_THREAD_LOCAL_VARIABLE_POINTERS = 0x14u, 210dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines /// S_THREAD_LOCAL_INIT_FUNCTION_POINTERS - Section with thread local 211dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines /// variable initialization pointers to functions. 21236b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines S_THREAD_LOCAL_INIT_FUNCTION_POINTERS = 0x15u, 21336b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines 21436b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines LAST_KNOWN_SECTION_TYPE = S_THREAD_LOCAL_INIT_FUNCTION_POINTERS 215bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis }; 21698cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton 21736b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines enum : uint32_t { 21898cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton // Constant masks for the "flags[31:24]" field in llvm::MachO::section and 21998cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton // llvm::MachO::section_64 (mask "flags" with SECTION_ATTRIBUTES_USR) 220dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines 221dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines /// S_ATTR_PURE_INSTRUCTIONS - Section contains only true machine 222dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines /// instructions. 223bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis S_ATTR_PURE_INSTRUCTIONS = 0x80000000u, 224dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines /// S_ATTR_NO_TOC - Section contains coalesced symbols that are not to be 225dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines /// in a ranlib table of contents. 226bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis S_ATTR_NO_TOC = 0x40000000u, 227dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines /// S_ATTR_STRIP_STATIC_SYMS - Ok to strip static symbols in this section 228dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines /// in files with the MY_DYLDLINK flag. 229bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis S_ATTR_STRIP_STATIC_SYMS = 0x20000000u, 230dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines /// S_ATTR_NO_DEAD_STRIP - No dead stripping. 231bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis S_ATTR_NO_DEAD_STRIP = 0x10000000u, 232dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines /// S_ATTR_LIVE_SUPPORT - Blocks are live if they reference live blocks. 233bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis S_ATTR_LIVE_SUPPORT = 0x08000000u, 234dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines /// S_ATTR_SELF_MODIFYING_CODE - Used with i386 code stubs written on by 235dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines /// dyld. 236bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis S_ATTR_SELF_MODIFYING_CODE = 0x04000000u, 237dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines /// S_ATTR_DEBUG - A debug section. 238bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis S_ATTR_DEBUG = 0x02000000u, 23998cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton 24098cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton // Constant masks for the "flags[23:8]" field in llvm::MachO::section and 24198cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton // llvm::MachO::section_64 (mask "flags" with SECTION_ATTRIBUTES_SYS) 242dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines 243dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines /// S_ATTR_SOME_INSTRUCTIONS - Section contains some machine instructions. 244bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis S_ATTR_SOME_INSTRUCTIONS = 0x00000400u, 245dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines /// S_ATTR_EXT_RELOC - Section has external relocation entries. 246bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis S_ATTR_EXT_RELOC = 0x00000200u, 247dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines /// S_ATTR_LOC_RELOC - Section has local relocation entries. 248bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis S_ATTR_LOC_RELOC = 0x00000100u, 249bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis 250bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis // Constant masks for the value of an indirect symbol in an indirect 251bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis // symbol table 252bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis INDIRECT_SYMBOL_LOCAL = 0x80000000u, 253bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis INDIRECT_SYMBOL_ABS = 0x40000000u 254bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis }; 255bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis 256bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis enum DataRegionType { 257bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis // Constants for the "kind" field in a data_in_code_entry structure 258bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis DICE_KIND_DATA = 1u, 259bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis DICE_KIND_JUMP_TABLE8 = 2u, 260bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis DICE_KIND_JUMP_TABLE16 = 3u, 261bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis DICE_KIND_JUMP_TABLE32 = 4u, 262bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis DICE_KIND_ABS_JUMP_TABLE32 = 5u 263bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis }; 264bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis 265bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis enum RebaseType { 266bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis REBASE_TYPE_POINTER = 1u, 267bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis REBASE_TYPE_TEXT_ABSOLUTE32 = 2u, 268bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis REBASE_TYPE_TEXT_PCREL32 = 3u 269bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis }; 270bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis 271bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis enum { 272bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis REBASE_OPCODE_MASK = 0xF0u, 273bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis REBASE_IMMEDIATE_MASK = 0x0Fu 274bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis }; 27598cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton 276bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis enum RebaseOpcode { 277bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis REBASE_OPCODE_DONE = 0x00u, 278bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis REBASE_OPCODE_SET_TYPE_IMM = 0x10u, 279bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis REBASE_OPCODE_SET_SEGMENT_AND_OFFSET_ULEB = 0x20u, 280bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis REBASE_OPCODE_ADD_ADDR_ULEB = 0x30u, 281bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis REBASE_OPCODE_ADD_ADDR_IMM_SCALED = 0x40u, 282bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis REBASE_OPCODE_DO_REBASE_IMM_TIMES = 0x50u, 283bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis REBASE_OPCODE_DO_REBASE_ULEB_TIMES = 0x60u, 284bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis REBASE_OPCODE_DO_REBASE_ADD_ADDR_ULEB = 0x70u, 285bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis REBASE_OPCODE_DO_REBASE_ULEB_TIMES_SKIPPING_ULEB = 0x80u 286bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis }; 287bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis 288bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis enum BindType { 289bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis BIND_TYPE_POINTER = 1u, 290bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis BIND_TYPE_TEXT_ABSOLUTE32 = 2u, 291bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis BIND_TYPE_TEXT_PCREL32 = 3u 292bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis }; 293bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis 294bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis enum BindSpecialDylib { 295118a0659ab8a4d0e0af343b88e5fa71a5c1eb6a6Reid Kleckner BIND_SPECIAL_DYLIB_SELF = 0, 296118a0659ab8a4d0e0af343b88e5fa71a5c1eb6a6Reid Kleckner BIND_SPECIAL_DYLIB_MAIN_EXECUTABLE = -1, 297118a0659ab8a4d0e0af343b88e5fa71a5c1eb6a6Reid Kleckner BIND_SPECIAL_DYLIB_FLAT_LOOKUP = -2 298bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis }; 299bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis 300bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis enum { 301bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis BIND_SYMBOL_FLAGS_WEAK_IMPORT = 0x1u, 302bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis BIND_SYMBOL_FLAGS_NON_WEAK_DEFINITION = 0x8u, 303bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis 304bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis BIND_OPCODE_MASK = 0xF0u, 305bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis BIND_IMMEDIATE_MASK = 0x0Fu 306bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis }; 307bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis 308bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis enum BindOpcode { 309bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis BIND_OPCODE_DONE = 0x00u, 310bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis BIND_OPCODE_SET_DYLIB_ORDINAL_IMM = 0x10u, 311bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis BIND_OPCODE_SET_DYLIB_ORDINAL_ULEB = 0x20u, 312bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis BIND_OPCODE_SET_DYLIB_SPECIAL_IMM = 0x30u, 313bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis BIND_OPCODE_SET_SYMBOL_TRAILING_FLAGS_IMM = 0x40u, 314bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis BIND_OPCODE_SET_TYPE_IMM = 0x50u, 315bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis BIND_OPCODE_SET_ADDEND_SLEB = 0x60u, 316bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis BIND_OPCODE_SET_SEGMENT_AND_OFFSET_ULEB = 0x70u, 317bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis BIND_OPCODE_ADD_ADDR_ULEB = 0x80u, 318bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis BIND_OPCODE_DO_BIND = 0x90u, 319bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis BIND_OPCODE_DO_BIND_ADD_ADDR_ULEB = 0xA0u, 320bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis BIND_OPCODE_DO_BIND_ADD_ADDR_IMM_SCALED = 0xB0u, 321bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis BIND_OPCODE_DO_BIND_ULEB_TIMES_SKIPPING_ULEB = 0xC0u 322bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis }; 32398cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton 324bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis enum { 325bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis EXPORT_SYMBOL_FLAGS_KIND_MASK = 0x03u, 326bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis EXPORT_SYMBOL_FLAGS_WEAK_DEFINITION = 0x04u, 3270d94d8f9f1f8b8d45560b1e30cb6b3504e682371Nick Kledzik EXPORT_SYMBOL_FLAGS_REEXPORT = 0x08u, 3280d94d8f9f1f8b8d45560b1e30cb6b3504e682371Nick Kledzik EXPORT_SYMBOL_FLAGS_STUB_AND_RESOLVER = 0x10u 329bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis }; 330bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis 331bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis enum ExportSymbolKind { 332bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis EXPORT_SYMBOL_FLAGS_KIND_REGULAR = 0x00u, 33337ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines EXPORT_SYMBOL_FLAGS_KIND_THREAD_LOCAL = 0x01u, 33437ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines EXPORT_SYMBOL_FLAGS_KIND_ABSOLUTE = 0x02u 335bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis }; 336bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis 337bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis 338bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis enum { 33998cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton // Constant masks for the "n_type" field in llvm::MachO::nlist and 34098cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton // llvm::MachO::nlist_64 341bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis N_STAB = 0xe0, 342bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis N_PEXT = 0x10, 343bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis N_TYPE = 0x0e, 344bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis N_EXT = 0x01 345bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis }; 34698cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton 347bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis enum NListType { 34898cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton // Constants for the "n_type & N_TYPE" llvm::MachO::nlist and 34998cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton // llvm::MachO::nlist_64 350bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis N_UNDF = 0x0u, 351bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis N_ABS = 0x2u, 352bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis N_SECT = 0xeu, 353bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis N_PBUD = 0xcu, 354bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis N_INDR = 0xau 355bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis }; 35698cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton 357bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis enum SectionOrdinal { 358bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis // Constants for the "n_sect" field in llvm::MachO::nlist and 35998cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton // llvm::MachO::nlist_64 360bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis NO_SECT = 0u, 361bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis MAX_SECT = 0xffu 362bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis }; 36398cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton 364bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis enum { 365bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis // Constant masks for the "n_desc" field in llvm::MachO::nlist and 366bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis // llvm::MachO::nlist_64 367c6a4f5e819217e1e12c458aed8e7b122e23a3a58Stephen Hines // The low 3 bits are the for the REFERENCE_TYPE. 368c6a4f5e819217e1e12c458aed8e7b122e23a3a58Stephen Hines REFERENCE_TYPE = 0x7, 369c6a4f5e819217e1e12c458aed8e7b122e23a3a58Stephen Hines REFERENCE_FLAG_UNDEFINED_NON_LAZY = 0, 370c6a4f5e819217e1e12c458aed8e7b122e23a3a58Stephen Hines REFERENCE_FLAG_UNDEFINED_LAZY = 1, 371c6a4f5e819217e1e12c458aed8e7b122e23a3a58Stephen Hines REFERENCE_FLAG_DEFINED = 2, 372c6a4f5e819217e1e12c458aed8e7b122e23a3a58Stephen Hines REFERENCE_FLAG_PRIVATE_DEFINED = 3, 373c6a4f5e819217e1e12c458aed8e7b122e23a3a58Stephen Hines REFERENCE_FLAG_PRIVATE_UNDEFINED_NON_LAZY = 4, 374c6a4f5e819217e1e12c458aed8e7b122e23a3a58Stephen Hines REFERENCE_FLAG_PRIVATE_UNDEFINED_LAZY = 5, 375c6a4f5e819217e1e12c458aed8e7b122e23a3a58Stephen Hines // Flag bits (some overlap with the library ordinal bits). 376bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis N_ARM_THUMB_DEF = 0x0008u, 377c6a4f5e819217e1e12c458aed8e7b122e23a3a58Stephen Hines REFERENCED_DYNAMICALLY = 0x0010u, 378bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis N_NO_DEAD_STRIP = 0x0020u, 379bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis N_WEAK_REF = 0x0040u, 380bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis N_WEAK_DEF = 0x0080u, 381c6a4f5e819217e1e12c458aed8e7b122e23a3a58Stephen Hines N_SYMBOL_RESOLVER = 0x0100u, 382c6a4f5e819217e1e12c458aed8e7b122e23a3a58Stephen Hines N_ALT_ENTRY = 0x0200u, 383c6a4f5e819217e1e12c458aed8e7b122e23a3a58Stephen Hines // For undefined symbols coming from libraries, see GET_LIBRARY_ORDINAL() 384c6a4f5e819217e1e12c458aed8e7b122e23a3a58Stephen Hines // as these are in the top 8 bits. 385c6a4f5e819217e1e12c458aed8e7b122e23a3a58Stephen Hines SELF_LIBRARY_ORDINAL = 0x0, 386c6a4f5e819217e1e12c458aed8e7b122e23a3a58Stephen Hines MAX_LIBRARY_ORDINAL = 0xfd, 387c6a4f5e819217e1e12c458aed8e7b122e23a3a58Stephen Hines DYNAMIC_LOOKUP_ORDINAL = 0xfe, 388c6a4f5e819217e1e12c458aed8e7b122e23a3a58Stephen Hines EXECUTABLE_ORDINAL = 0xff 389bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis }; 390c38c36a8c44bd32bdfc2e48ab3e447f6dc1547bdMichael J. Spencer 391bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis enum StabType { 39298cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton // Constant values for the "n_type" field in llvm::MachO::nlist and 39337ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines // llvm::MachO::nlist_64 when "(n_type & N_STAB) != 0" 394bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis N_GSYM = 0x20u, 395bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis N_FNAME = 0x22u, 396bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis N_FUN = 0x24u, 397bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis N_STSYM = 0x26u, 398bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis N_LCSYM = 0x28u, 399bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis N_BNSYM = 0x2Eu, 40037ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines N_PC = 0x30u, 40137ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines N_AST = 0x32u, 402bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis N_OPT = 0x3Cu, 403bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis N_RSYM = 0x40u, 404bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis N_SLINE = 0x44u, 405bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis N_ENSYM = 0x4Eu, 406bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis N_SSYM = 0x60u, 407bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis N_SO = 0x64u, 408bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis N_OSO = 0x66u, 409bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis N_LSYM = 0x80u, 410bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis N_BINCL = 0x82u, 411bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis N_SOL = 0x84u, 412bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis N_PARAMS = 0x86u, 413bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis N_VERSION = 0x88u, 414bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis N_OLEVEL = 0x8Au, 415bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis N_PSYM = 0xA0u, 416bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis N_EINCL = 0xA2u, 417bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis N_ENTRY = 0xA4u, 418bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis N_LBRAC = 0xC0u, 419bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis N_EXCL = 0xC2u, 420bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis N_RBRAC = 0xE0u, 421bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis N_BCOMM = 0xE2u, 422bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis N_ECOMM = 0xE4u, 423bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis N_ECOML = 0xE8u, 424bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis N_LENG = 0xFEu 425bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis }; 42698cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton 42736b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines enum : uint32_t { 428bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis // Constant values for the r_symbolnum field in an 429bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis // llvm::MachO::relocation_info structure when r_extern is 0. 430bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis R_ABS = 0, 431bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis 432bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis // Constant bits for the r_address field in an 433bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis // llvm::MachO::relocation_info structure. 434bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis R_SCATTERED = 0x80000000 435bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis }; 436bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis 437bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis enum RelocationInfoType { 438bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis // Constant values for the r_type field in an 439bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis // llvm::MachO::relocation_info or llvm::MachO::scattered_relocation_info 440bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis // structure. 441bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis GENERIC_RELOC_VANILLA = 0, 442bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis GENERIC_RELOC_PAIR = 1, 443bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis GENERIC_RELOC_SECTDIFF = 2, 444bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis GENERIC_RELOC_PB_LA_PTR = 3, 445bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis GENERIC_RELOC_LOCAL_SECTDIFF = 4, 446bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis GENERIC_RELOC_TLV = 5, 447bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis 448bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis // Constant values for the r_type field in a PowerPC architecture 449bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis // llvm::MachO::relocation_info or llvm::MachO::scattered_relocation_info 450bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis // structure. 451bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis PPC_RELOC_VANILLA = GENERIC_RELOC_VANILLA, 452bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis PPC_RELOC_PAIR = GENERIC_RELOC_PAIR, 453bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis PPC_RELOC_BR14 = 2, 454bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis PPC_RELOC_BR24 = 3, 455bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis PPC_RELOC_HI16 = 4, 456bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis PPC_RELOC_LO16 = 5, 457bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis PPC_RELOC_HA16 = 6, 458bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis PPC_RELOC_LO14 = 7, 459bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis PPC_RELOC_SECTDIFF = 8, 460bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis PPC_RELOC_PB_LA_PTR = 9, 461bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis PPC_RELOC_HI16_SECTDIFF = 10, 462bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis PPC_RELOC_LO16_SECTDIFF = 11, 463bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis PPC_RELOC_HA16_SECTDIFF = 12, 464bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis PPC_RELOC_JBSR = 13, 465bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis PPC_RELOC_LO14_SECTDIFF = 14, 466bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis PPC_RELOC_LOCAL_SECTDIFF = 15, 467bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis 468bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis // Constant values for the r_type field in an ARM architecture 469bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis // llvm::MachO::relocation_info or llvm::MachO::scattered_relocation_info 470bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis // structure. 471bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis ARM_RELOC_VANILLA = GENERIC_RELOC_VANILLA, 472bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis ARM_RELOC_PAIR = GENERIC_RELOC_PAIR, 473bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis ARM_RELOC_SECTDIFF = GENERIC_RELOC_SECTDIFF, 474bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis ARM_RELOC_LOCAL_SECTDIFF = 3, 475bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis ARM_RELOC_PB_LA_PTR = 4, 476bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis ARM_RELOC_BR24 = 5, 477bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis ARM_THUMB_RELOC_BR22 = 6, 478bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis ARM_THUMB_32BIT_BRANCH = 7, // obsolete 479bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis ARM_RELOC_HALF = 8, 480bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis ARM_RELOC_HALF_SECTDIFF = 9, 481bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis 48236b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines // Constant values for the r_type field in an ARM64 architecture 48336b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines // llvm::MachO::relocation_info or llvm::MachO::scattered_relocation_info 48436b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines // structure. 48536b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines 48636b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines // For pointers. 48736b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines ARM64_RELOC_UNSIGNED = 0, 48836b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines // Must be followed by an ARM64_RELOC_UNSIGNED 48936b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines ARM64_RELOC_SUBTRACTOR = 1, 49036b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines // A B/BL instruction with 26-bit displacement. 49136b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines ARM64_RELOC_BRANCH26 = 2, 49236b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines // PC-rel distance to page of target. 49336b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines ARM64_RELOC_PAGE21 = 3, 49436b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines // Offset within page, scaled by r_length. 49536b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines ARM64_RELOC_PAGEOFF12 = 4, 49636b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines // PC-rel distance to page of GOT slot. 49736b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines ARM64_RELOC_GOT_LOAD_PAGE21 = 5, 49836b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines // Offset within page of GOT slot, scaled by r_length. 49936b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines ARM64_RELOC_GOT_LOAD_PAGEOFF12 = 6, 50036b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines // For pointers to GOT slots. 50136b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines ARM64_RELOC_POINTER_TO_GOT = 7, 50236b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines // PC-rel distance to page of TLVP slot. 50336b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines ARM64_RELOC_TLVP_LOAD_PAGE21 = 8, 50436b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines // Offset within page of TLVP slot, scaled by r_length. 50536b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines ARM64_RELOC_TLVP_LOAD_PAGEOFF12 = 9, 50636b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines // Must be followed by ARM64_RELOC_PAGE21 or ARM64_RELOC_PAGEOFF12. 50736b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines ARM64_RELOC_ADDEND = 10, 50836b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines 50936b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines 510bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis // Constant values for the r_type field in an x86_64 architecture 511bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis // llvm::MachO::relocation_info or llvm::MachO::scattered_relocation_info 512bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis // structure 513bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis X86_64_RELOC_UNSIGNED = 0, 514bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis X86_64_RELOC_SIGNED = 1, 515bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis X86_64_RELOC_BRANCH = 2, 516bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis X86_64_RELOC_GOT_LOAD = 3, 517bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis X86_64_RELOC_GOT = 4, 518bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis X86_64_RELOC_SUBTRACTOR = 5, 519bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis X86_64_RELOC_SIGNED_1 = 6, 520bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis X86_64_RELOC_SIGNED_2 = 7, 521bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis X86_64_RELOC_SIGNED_4 = 8, 522bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis X86_64_RELOC_TLV = 9 52398cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton }; 5246bbf5eb32f35c6bbef5434ba06339a10c860d86cJim Grosbach 525a38c27be0ff5dd35fcd20cfce827f9dbdb24d1eaNick Kledzik // Values for segment_command.initprot. 526a38c27be0ff5dd35fcd20cfce827f9dbdb24d1eaNick Kledzik // From <mach/vm_prot.h> 527a38c27be0ff5dd35fcd20cfce827f9dbdb24d1eaNick Kledzik enum { 528a38c27be0ff5dd35fcd20cfce827f9dbdb24d1eaNick Kledzik VM_PROT_READ = 0x1, 529a38c27be0ff5dd35fcd20cfce827f9dbdb24d1eaNick Kledzik VM_PROT_WRITE = 0x2, 530a38c27be0ff5dd35fcd20cfce827f9dbdb24d1eaNick Kledzik VM_PROT_EXECUTE = 0x4 531a38c27be0ff5dd35fcd20cfce827f9dbdb24d1eaNick Kledzik }; 532a38c27be0ff5dd35fcd20cfce827f9dbdb24d1eaNick Kledzik 533a38c27be0ff5dd35fcd20cfce827f9dbdb24d1eaNick Kledzik 53498cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton // Structs from <mach-o/loader.h> 5356bbf5eb32f35c6bbef5434ba06339a10c860d86cJim Grosbach 53698cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton struct mach_header { 53798cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t magic; 53898cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t cputype; 53998cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t cpusubtype; 54098cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t filetype; 54198cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t ncmds; 54298cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t sizeofcmds; 54398cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t flags; 54498cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton }; 54598cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton 54698cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton struct mach_header_64 { 54798cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t magic; 54898cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t cputype; 54998cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t cpusubtype; 55098cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t filetype; 55198cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t ncmds; 55298cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t sizeofcmds; 55398cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t flags; 55498cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t reserved; 55598cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton }; 55698cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton 55798cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton struct load_command { 55898cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t cmd; 55998cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t cmdsize; 56098cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton }; 56198cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton 56298cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton struct segment_command { 56398cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t cmd; 56498cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t cmdsize; 56598cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton char segname[16]; 56698cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t vmaddr; 56798cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t vmsize; 56898cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t fileoff; 56998cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t filesize; 57098cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t maxprot; 57198cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t initprot; 57298cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t nsects; 57398cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t flags; 57498cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton }; 57598cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton 57698cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton struct segment_command_64 { 57798cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t cmd; 57898cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t cmdsize; 57998cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton char segname[16]; 58098cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint64_t vmaddr; 58198cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint64_t vmsize; 58298cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint64_t fileoff; 58398cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint64_t filesize; 58498cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t maxprot; 58598cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t initprot; 58698cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t nsects; 58798cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t flags; 58898cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton }; 58998cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton 59098cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton struct section { 59198cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton char sectname[16]; 59298cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton char segname[16]; 59398cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t addr; 59498cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t size; 59598cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t offset; 59698cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t align; 59798cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t reloff; 59898cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t nreloc; 59998cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t flags; 60098cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t reserved1; 60198cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t reserved2; 60298cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton }; 60398cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton 60498cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton struct section_64 { 60598cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton char sectname[16]; 60698cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton char segname[16]; 60798cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint64_t addr; 60898cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint64_t size; 60998cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t offset; 61098cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t align; 61198cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t reloff; 61298cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t nreloc; 61398cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t flags; 61498cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t reserved1; 61598cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t reserved2; 61698cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t reserved3; 61798cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton }; 61898cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton 61998cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton struct fvmlib { 62098cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t name; 62198cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t minor_version; 62298cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t header_addr; 62398cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton }; 62498cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton 62598cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton struct fvmlib_command { 62698cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t cmd; 62798cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t cmdsize; 62898cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton struct fvmlib fvmlib; 62998cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton }; 63098cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton 63198cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton struct dylib { 63298cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t name; 63398cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t timestamp; 63498cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t current_version; 63598cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t compatibility_version; 63698cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton }; 63798cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton 63898cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton struct dylib_command { 63998cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t cmd; 64098cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t cmdsize; 64198cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton struct dylib dylib; 64298cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton }; 64398cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton 64498cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton struct sub_framework_command { 64598cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t cmd; 64698cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t cmdsize; 64798cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t umbrella; 64898cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton }; 64998cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton 65098cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton struct sub_client_command { 65198cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t cmd; 65298cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t cmdsize; 65398cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t client; 65498cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton }; 65598cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton 65698cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton struct sub_umbrella_command { 65798cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t cmd; 65898cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t cmdsize; 65998cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t sub_umbrella; 66098cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton }; 66198cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton 66298cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton struct sub_library_command { 66398cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t cmd; 66498cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t cmdsize; 66598cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t sub_library; 66698cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton }; 66798cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton 66898cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton struct prebound_dylib_command { 66998cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t cmd; 67098cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t cmdsize; 67198cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t name; 67298cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t nmodules; 67398cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t linked_modules; 67498cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton }; 67598cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton 67698cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton struct dylinker_command { 67798cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t cmd; 67898cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t cmdsize; 67998cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t name; 68098cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton }; 68198cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton 68298cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton struct thread_command { 68398cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t cmd; 68498cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t cmdsize; 68598cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton }; 68698cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton 68798cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton struct routines_command { 68898cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t cmd; 68998cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t cmdsize; 69098cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t init_address; 69198cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t init_module; 69298cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t reserved1; 69398cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t reserved2; 69498cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t reserved3; 69598cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t reserved4; 69698cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t reserved5; 69798cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t reserved6; 69898cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton }; 69998cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton 70098cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton struct routines_command_64 { 70198cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t cmd; 70298cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t cmdsize; 70398cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint64_t init_address; 70498cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint64_t init_module; 70598cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint64_t reserved1; 70698cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint64_t reserved2; 70798cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint64_t reserved3; 70898cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint64_t reserved4; 70998cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint64_t reserved5; 71098cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint64_t reserved6; 71198cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton }; 71298cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton 71398cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton struct symtab_command { 71498cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t cmd; 71598cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t cmdsize; 71698cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t symoff; 71798cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t nsyms; 71898cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t stroff; 71998cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t strsize; 72098cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton }; 72198cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton 72298cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton struct dysymtab_command { 72398cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t cmd; 72498cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t cmdsize; 72598cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t ilocalsym; 72698cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t nlocalsym; 72798cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t iextdefsym; 72898cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t nextdefsym; 72998cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t iundefsym; 73098cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t nundefsym; 73198cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t tocoff; 73298cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t ntoc; 73398cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t modtaboff; 73498cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t nmodtab; 73598cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t extrefsymoff; 73698cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t nextrefsyms; 73798cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t indirectsymoff; 73898cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t nindirectsyms; 73998cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t extreloff; 74098cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t nextrel; 74198cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t locreloff; 74298cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t nlocrel; 74317689b13be2f3f6e56c3a9dc3bc6193b7c732abcBill Wendling }; 74498cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton 74598cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton struct dylib_table_of_contents { 74698cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t symbol_index; 74798cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t module_index; 74817689b13be2f3f6e56c3a9dc3bc6193b7c732abcBill Wendling }; 74998cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton 75098cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton struct dylib_module { 75198cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t module_name; 75298cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t iextdefsym; 75398cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t nextdefsym; 75498cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t irefsym; 75598cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t nrefsym; 75698cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t ilocalsym; 75798cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t nlocalsym; 75898cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t iextrel; 75998cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t nextrel; 76098cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t iinit_iterm; 76198cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t ninit_nterm; 76298cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t objc_module_info_addr; 76398cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t objc_module_info_size; 76417689b13be2f3f6e56c3a9dc3bc6193b7c732abcBill Wendling }; 76598cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton 76698cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton struct dylib_module_64 { 76798cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t module_name; 76898cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t iextdefsym; 76998cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t nextdefsym; 77098cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t irefsym; 77198cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t nrefsym; 77298cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t ilocalsym; 77398cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t nlocalsym; 77498cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t iextrel; 77598cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t nextrel; 77698cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t iinit_iterm; 77798cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t ninit_nterm; 77898cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t objc_module_info_size; 77998cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint64_t objc_module_info_addr; 78098cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton }; 78198cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton 78298cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton struct dylib_reference { 78398cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t isym:24, 78498cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton flags:8; 78598cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton }; 78698cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton 78798cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton 78898cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton struct twolevel_hints_command { 78998cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t cmd; 79098cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t cmdsize; 79198cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t offset; 79298cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t nhints; 79398cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton }; 79498cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton 79598cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton struct twolevel_hint { 79698cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t isub_image:8, 79798cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton itoc:24; 79898cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton }; 79998cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton 80098cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton struct prebind_cksum_command { 80198cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t cmd; 80298cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t cmdsize; 80398cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t cksum; 80498cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton }; 80598cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton 80698cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton struct uuid_command { 80798cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t cmd; 80898cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t cmdsize; 80998cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint8_t uuid[16]; 81098cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton }; 81198cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton 81298cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton struct rpath_command { 81398cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t cmd; 81498cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t cmdsize; 81598cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t path; 81698cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton }; 81798cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton 81898cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton struct linkedit_data_command { 81998cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t cmd; 82098cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t cmdsize; 82198cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t dataoff; 82298cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t datasize; 82398cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton }; 82498cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton 825bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis struct data_in_code_entry { 826bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis uint32_t offset; 827bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis uint16_t length; 828bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis uint16_t kind; 829bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis }; 830bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis 831bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis struct source_version_command { 832bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis uint32_t cmd; 833bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis uint32_t cmdsize; 834bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis uint64_t version; 835bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis }; 836bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis 83798cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton struct encryption_info_command { 83898cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t cmd; 83998cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t cmdsize; 84098cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t cryptoff; 84198cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t cryptsize; 84298cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t cryptid; 84398cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton }; 84498cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton 845ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines struct encryption_info_command_64 { 846ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines uint32_t cmd; 847ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines uint32_t cmdsize; 848ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines uint32_t cryptoff; 849ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines uint32_t cryptsize; 850ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines uint32_t cryptid; 851ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines uint32_t pad; 852ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines }; 853ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines 854bc6b89ed31ef77098803abe64af94f318ad716bbBenjamin Kramer struct version_min_command { 85536b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines uint32_t cmd; // LC_VERSION_MIN_MACOSX or 85636b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines // LC_VERSION_MIN_IPHONEOS 85736b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines uint32_t cmdsize; // sizeof(struct version_min_command) 85836b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines uint32_t version; // X.Y.Z is encoded in nibbles xxxx.yy.zz 85937ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines uint32_t sdk; // X.Y.Z is encoded in nibbles xxxx.yy.zz 860bc6b89ed31ef77098803abe64af94f318ad716bbBenjamin Kramer }; 861bc6b89ed31ef77098803abe64af94f318ad716bbBenjamin Kramer 86298cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton struct dyld_info_command { 86398cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t cmd; 86498cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t cmdsize; 86598cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t rebase_off; 86698cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t rebase_size; 86798cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t bind_off; 86898cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t bind_size; 86998cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t weak_bind_off; 87098cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t weak_bind_size; 87198cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t lazy_bind_off; 87298cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t lazy_bind_size; 87398cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t export_off; 87498cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t export_size; 87598cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton }; 87698cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton 877ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines struct linker_option_command { 878bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis uint32_t cmd; 879bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis uint32_t cmdsize; 880bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis uint32_t count; 881bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis }; 882bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis 88398cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton struct symseg_command { 88498cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t cmd; 88598cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t cmdsize; 88698cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t offset; 88798cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t size; 88898cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton }; 88998cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton 89098cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton struct ident_command { 89198cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t cmd; 89298cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t cmdsize; 89398cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton }; 89498cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton 89598cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton struct fvmfile_command { 89698cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t cmd; 89798cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t cmdsize; 89898cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t name; 89998cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t header_addr; 90098cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton }; 90198cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton 902bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis struct tlv_descriptor_32 { 903bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis uint32_t thunk; 904bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis uint32_t key; 905bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis uint32_t offset; 906bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis }; 907bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis 908bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis struct tlv_descriptor_64 { 909bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis uint64_t thunk; 910bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis uint64_t key; 911bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis uint64_t offset; 912bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis }; 913bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis 914bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis struct tlv_descriptor { 915bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis uintptr_t thunk; 916bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis uintptr_t key; 917bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis uintptr_t offset; 918bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis }; 919bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis 920fe018c414542141010ef0706820ebfde0a4b3e41Ahmed Bougacha struct entry_point_command { 921fe018c414542141010ef0706820ebfde0a4b3e41Ahmed Bougacha uint32_t cmd; 922fe018c414542141010ef0706820ebfde0a4b3e41Ahmed Bougacha uint32_t cmdsize; 923fe018c414542141010ef0706820ebfde0a4b3e41Ahmed Bougacha uint64_t entryoff; 924fe018c414542141010ef0706820ebfde0a4b3e41Ahmed Bougacha uint64_t stacksize; 925fe018c414542141010ef0706820ebfde0a4b3e41Ahmed Bougacha }; 926fe018c414542141010ef0706820ebfde0a4b3e41Ahmed Bougacha 92798cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton 92898cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton // Structs from <mach-o/fat.h> 92998cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton struct fat_header { 93098cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t magic; 93198cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t nfat_arch; 93298cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton }; 93398cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton 93498cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton struct fat_arch { 93598cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t cputype; 93698cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t cpusubtype; 93798cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t offset; 93898cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t size; 93998cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t align; 94098cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton }; 94198cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton 942bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis // Structs from <mach-o/reloc.h> 943bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis struct relocation_info { 944bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis int32_t r_address; 945bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis uint32_t r_symbolnum:24, 946bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis r_pcrel:1, 947bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis r_length:2, 948bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis r_extern:1, 949bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis r_type:4; 950bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis }; 951bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis 952bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis struct scattered_relocation_info { 953bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis#if defined(BYTE_ORDER) && defined(BIG_ENDIAN) && (BYTE_ORDER == BIG_ENDIAN) 954bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis uint32_t r_scattered:1, 955bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis r_pcrel:1, 956bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis r_length:2, 957bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis r_type:4, 958bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis r_address:24; 959bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis#else 960bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis uint32_t r_address:24, 961bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis r_type:4, 962bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis r_length:2, 963bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis r_pcrel:1, 964bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis r_scattered:1; 965bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis#endif 966bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis int32_t r_value; 967bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis }; 968bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis 969bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis // Structs NOT from <mach-o/reloc.h>, but that make LLVM's life easier 970bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis struct any_relocation_info { 971bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis uint32_t r_word0, r_word1; 972bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis }; 973bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis 974bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis // Structs from <mach-o/nlist.h> 97537ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines struct nlist_base { 97637ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines uint32_t n_strx; 97737ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines uint8_t n_type; 97837ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines uint8_t n_sect; 97937ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines uint16_t n_desc; 98037ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines }; 98137ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines 98298cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton struct nlist { 98398cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t n_strx; 98498cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint8_t n_type; 98598cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint8_t n_sect; 98698cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton int16_t n_desc; 98798cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t n_value; 98898cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton }; 98998cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton 99098cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton struct nlist_64 { 99198cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint32_t n_strx; 99298cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint8_t n_type; 99398cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint8_t n_sect; 99498cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint16_t n_desc; 99598cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton uint64_t n_value; 99698cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton }; 99798cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton 99837ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines 99937ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines // Byte order swapping functions for MachO structs 100037ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines 100137ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines inline void swapStruct(mach_header &mh) { 100237ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines sys::swapByteOrder(mh.magic); 100337ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines sys::swapByteOrder(mh.cputype); 100437ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines sys::swapByteOrder(mh.cpusubtype); 100537ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines sys::swapByteOrder(mh.filetype); 100637ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines sys::swapByteOrder(mh.ncmds); 100737ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines sys::swapByteOrder(mh.sizeofcmds); 100837ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines sys::swapByteOrder(mh.flags); 100937ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines } 101037ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines 101137ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines inline void swapStruct(mach_header_64 &H) { 101237ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines sys::swapByteOrder(H.magic); 101337ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines sys::swapByteOrder(H.cputype); 101437ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines sys::swapByteOrder(H.cpusubtype); 101537ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines sys::swapByteOrder(H.filetype); 101637ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines sys::swapByteOrder(H.ncmds); 101737ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines sys::swapByteOrder(H.sizeofcmds); 101837ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines sys::swapByteOrder(H.flags); 101937ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines sys::swapByteOrder(H.reserved); 102037ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines } 102137ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines 102237ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines inline void swapStruct(load_command &lc) { 102337ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines sys::swapByteOrder(lc.cmd); 102437ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines sys::swapByteOrder(lc.cmdsize); 102537ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines } 102637ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines 102737ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines inline void swapStruct(symtab_command &lc) { 102837ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines sys::swapByteOrder(lc.cmd); 102937ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines sys::swapByteOrder(lc.cmdsize); 103037ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines sys::swapByteOrder(lc.symoff); 103137ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines sys::swapByteOrder(lc.nsyms); 103237ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines sys::swapByteOrder(lc.stroff); 103337ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines sys::swapByteOrder(lc.strsize); 103437ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines } 103537ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines 103637ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines inline void swapStruct(segment_command_64 &seg) { 103737ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines sys::swapByteOrder(seg.cmd); 103837ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines sys::swapByteOrder(seg.cmdsize); 103937ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines sys::swapByteOrder(seg.vmaddr); 104037ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines sys::swapByteOrder(seg.vmsize); 104137ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines sys::swapByteOrder(seg.fileoff); 104237ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines sys::swapByteOrder(seg.filesize); 104337ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines sys::swapByteOrder(seg.maxprot); 104437ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines sys::swapByteOrder(seg.initprot); 104537ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines sys::swapByteOrder(seg.nsects); 104637ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines sys::swapByteOrder(seg.flags); 104737ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines } 104837ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines 104937ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines inline void swapStruct(segment_command &seg) { 105037ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines sys::swapByteOrder(seg.cmd); 105137ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines sys::swapByteOrder(seg.cmdsize); 105237ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines sys::swapByteOrder(seg.vmaddr); 105337ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines sys::swapByteOrder(seg.vmsize); 105437ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines sys::swapByteOrder(seg.fileoff); 105537ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines sys::swapByteOrder(seg.filesize); 105637ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines sys::swapByteOrder(seg.maxprot); 105737ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines sys::swapByteOrder(seg.initprot); 105837ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines sys::swapByteOrder(seg.nsects); 105937ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines sys::swapByteOrder(seg.flags); 106037ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines } 106137ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines 106237ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines inline void swapStruct(section_64 §) { 106337ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines sys::swapByteOrder(sect.addr); 106437ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines sys::swapByteOrder(sect.size); 106537ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines sys::swapByteOrder(sect.offset); 106637ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines sys::swapByteOrder(sect.align); 106737ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines sys::swapByteOrder(sect.reloff); 106837ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines sys::swapByteOrder(sect.nreloc); 106937ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines sys::swapByteOrder(sect.flags); 107037ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines sys::swapByteOrder(sect.reserved1); 107137ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines sys::swapByteOrder(sect.reserved2); 107237ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines } 107337ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines 107437ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines inline void swapStruct(section §) { 107537ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines sys::swapByteOrder(sect.addr); 107637ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines sys::swapByteOrder(sect.size); 107737ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines sys::swapByteOrder(sect.offset); 107837ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines sys::swapByteOrder(sect.align); 107937ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines sys::swapByteOrder(sect.reloff); 108037ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines sys::swapByteOrder(sect.nreloc); 108137ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines sys::swapByteOrder(sect.flags); 108237ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines sys::swapByteOrder(sect.reserved1); 108337ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines sys::swapByteOrder(sect.reserved2); 108437ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines } 108537ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines 108637ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines inline void swapStruct(dyld_info_command &info) { 108737ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines sys::swapByteOrder(info.cmd); 108837ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines sys::swapByteOrder(info.cmdsize); 108937ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines sys::swapByteOrder(info.rebase_off); 109037ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines sys::swapByteOrder(info.rebase_size); 109137ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines sys::swapByteOrder(info.bind_off); 109237ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines sys::swapByteOrder(info.bind_size); 109337ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines sys::swapByteOrder(info.weak_bind_off); 109437ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines sys::swapByteOrder(info.weak_bind_size); 109537ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines sys::swapByteOrder(info.lazy_bind_off); 109637ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines sys::swapByteOrder(info.lazy_bind_size); 109737ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines sys::swapByteOrder(info.export_off); 109837ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines sys::swapByteOrder(info.export_size); 109937ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines } 110037ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines 110137ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines inline void swapStruct(dylib_command &d) { 110237ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines sys::swapByteOrder(d.cmd); 110337ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines sys::swapByteOrder(d.cmdsize); 110437ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines sys::swapByteOrder(d.dylib.name); 110537ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines sys::swapByteOrder(d.dylib.timestamp); 110637ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines sys::swapByteOrder(d.dylib.current_version); 110737ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines sys::swapByteOrder(d.dylib.compatibility_version); 110837ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines } 110937ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines 1110ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines inline void swapStruct(sub_framework_command &s) { 1111ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines sys::swapByteOrder(s.cmd); 1112ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines sys::swapByteOrder(s.cmdsize); 1113ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines sys::swapByteOrder(s.umbrella); 1114ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines } 1115ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines 1116ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines inline void swapStruct(sub_umbrella_command &s) { 1117ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines sys::swapByteOrder(s.cmd); 1118ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines sys::swapByteOrder(s.cmdsize); 1119ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines sys::swapByteOrder(s.sub_umbrella); 1120ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines } 1121ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines 1122ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines inline void swapStruct(sub_library_command &s) { 1123ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines sys::swapByteOrder(s.cmd); 1124ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines sys::swapByteOrder(s.cmdsize); 1125ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines sys::swapByteOrder(s.sub_library); 1126ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines } 1127ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines 1128ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines inline void swapStruct(sub_client_command &s) { 1129ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines sys::swapByteOrder(s.cmd); 1130ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines sys::swapByteOrder(s.cmdsize); 1131ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines sys::swapByteOrder(s.client); 1132ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines } 1133ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines 1134ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines inline void swapStruct(routines_command &r) { 1135ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines sys::swapByteOrder(r.cmd); 1136ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines sys::swapByteOrder(r.cmdsize); 1137ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines sys::swapByteOrder(r.init_address); 1138ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines sys::swapByteOrder(r.init_module); 1139ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines sys::swapByteOrder(r.reserved1); 1140ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines sys::swapByteOrder(r.reserved2); 1141ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines sys::swapByteOrder(r.reserved3); 1142ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines sys::swapByteOrder(r.reserved4); 1143ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines sys::swapByteOrder(r.reserved5); 1144ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines sys::swapByteOrder(r.reserved6); 1145ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines } 1146ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines 1147ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines inline void swapStruct(routines_command_64 &r) { 1148ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines sys::swapByteOrder(r.cmd); 1149ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines sys::swapByteOrder(r.cmdsize); 1150ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines sys::swapByteOrder(r.init_address); 1151ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines sys::swapByteOrder(r.init_module); 1152ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines sys::swapByteOrder(r.reserved1); 1153ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines sys::swapByteOrder(r.reserved2); 1154ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines sys::swapByteOrder(r.reserved3); 1155ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines sys::swapByteOrder(r.reserved4); 1156ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines sys::swapByteOrder(r.reserved5); 1157ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines sys::swapByteOrder(r.reserved6); 1158ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines } 1159ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines 1160ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines inline void swapStruct(thread_command &t) { 1161ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines sys::swapByteOrder(t.cmd); 1162ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines sys::swapByteOrder(t.cmdsize); 1163ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines } 1164ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines 116537ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines inline void swapStruct(dylinker_command &d) { 116637ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines sys::swapByteOrder(d.cmd); 116737ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines sys::swapByteOrder(d.cmdsize); 116837ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines sys::swapByteOrder(d.name); 116937ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines } 117037ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines 117137ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines inline void swapStruct(uuid_command &u) { 117237ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines sys::swapByteOrder(u.cmd); 117337ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines sys::swapByteOrder(u.cmdsize); 117437ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines } 117537ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines 1176ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines inline void swapStruct(rpath_command &r) { 1177ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines sys::swapByteOrder(r.cmd); 1178ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines sys::swapByteOrder(r.cmdsize); 1179ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines sys::swapByteOrder(r.path); 1180ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines } 1181ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines 118237ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines inline void swapStruct(source_version_command &s) { 118337ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines sys::swapByteOrder(s.cmd); 118437ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines sys::swapByteOrder(s.cmdsize); 118537ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines sys::swapByteOrder(s.version); 118637ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines } 118737ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines 118837ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines inline void swapStruct(entry_point_command &e) { 118937ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines sys::swapByteOrder(e.cmd); 119037ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines sys::swapByteOrder(e.cmdsize); 119137ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines sys::swapByteOrder(e.entryoff); 119237ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines sys::swapByteOrder(e.stacksize); 119337ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines } 119437ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines 1195ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines inline void swapStruct(encryption_info_command &e) { 1196ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines sys::swapByteOrder(e.cmd); 1197ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines sys::swapByteOrder(e.cmdsize); 1198ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines sys::swapByteOrder(e.cryptoff); 1199ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines sys::swapByteOrder(e.cryptsize); 1200ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines sys::swapByteOrder(e.cryptid); 1201ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines } 1202ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines 1203ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines inline void swapStruct(encryption_info_command_64 &e) { 1204ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines sys::swapByteOrder(e.cmd); 1205ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines sys::swapByteOrder(e.cmdsize); 1206ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines sys::swapByteOrder(e.cryptoff); 1207ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines sys::swapByteOrder(e.cryptsize); 1208ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines sys::swapByteOrder(e.cryptid); 1209ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines sys::swapByteOrder(e.pad); 1210ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines } 1211ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines 121237ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines inline void swapStruct(dysymtab_command &dst) { 121337ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines sys::swapByteOrder(dst.cmd); 121437ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines sys::swapByteOrder(dst.cmdsize); 121537ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines sys::swapByteOrder(dst.ilocalsym); 121637ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines sys::swapByteOrder(dst.nlocalsym); 121737ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines sys::swapByteOrder(dst.iextdefsym); 121837ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines sys::swapByteOrder(dst.nextdefsym); 121937ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines sys::swapByteOrder(dst.iundefsym); 122037ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines sys::swapByteOrder(dst.nundefsym); 122137ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines sys::swapByteOrder(dst.tocoff); 122237ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines sys::swapByteOrder(dst.ntoc); 122337ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines sys::swapByteOrder(dst.modtaboff); 122437ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines sys::swapByteOrder(dst.nmodtab); 122537ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines sys::swapByteOrder(dst.extrefsymoff); 122637ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines sys::swapByteOrder(dst.nextrefsyms); 122737ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines sys::swapByteOrder(dst.indirectsymoff); 122837ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines sys::swapByteOrder(dst.nindirectsyms); 122937ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines sys::swapByteOrder(dst.extreloff); 123037ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines sys::swapByteOrder(dst.nextrel); 123137ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines sys::swapByteOrder(dst.locreloff); 123237ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines sys::swapByteOrder(dst.nlocrel); 123337ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines } 123437ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines 123537ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines inline void swapStruct(any_relocation_info &reloc) { 123637ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines sys::swapByteOrder(reloc.r_word0); 123737ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines sys::swapByteOrder(reloc.r_word1); 123837ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines } 123937ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines 124037ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines inline void swapStruct(nlist_base &S) { 124137ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines sys::swapByteOrder(S.n_strx); 124237ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines sys::swapByteOrder(S.n_desc); 124337ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines } 124437ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines 124537ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines inline void swapStruct(nlist &sym) { 124637ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines sys::swapByteOrder(sym.n_strx); 124737ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines sys::swapByteOrder(sym.n_desc); 124837ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines sys::swapByteOrder(sym.n_value); 124937ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines } 125037ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines 125137ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines inline void swapStruct(nlist_64 &sym) { 125237ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines sys::swapByteOrder(sym.n_strx); 125337ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines sys::swapByteOrder(sym.n_desc); 125437ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines sys::swapByteOrder(sym.n_value); 125537ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines } 125637ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines 125737ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines inline void swapStruct(linkedit_data_command &C) { 125837ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines sys::swapByteOrder(C.cmd); 125937ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines sys::swapByteOrder(C.cmdsize); 126037ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines sys::swapByteOrder(C.dataoff); 126137ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines sys::swapByteOrder(C.datasize); 126237ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines } 126337ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines 1264ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines inline void swapStruct(linker_option_command &C) { 126537ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines sys::swapByteOrder(C.cmd); 126637ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines sys::swapByteOrder(C.cmdsize); 126737ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines sys::swapByteOrder(C.count); 126837ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines } 126937ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines 127037ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines inline void swapStruct(version_min_command&C) { 127137ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines sys::swapByteOrder(C.cmd); 127237ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines sys::swapByteOrder(C.cmdsize); 127337ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines sys::swapByteOrder(C.version); 127437ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines sys::swapByteOrder(C.sdk); 127537ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines } 127637ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines 127737ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines inline void swapStruct(data_in_code_entry &C) { 127837ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines sys::swapByteOrder(C.offset); 127937ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines sys::swapByteOrder(C.length); 128037ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines sys::swapByteOrder(C.kind); 128137ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines } 128237ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines 128337ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines inline void swapStruct(uint32_t &C) { 128437ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines sys::swapByteOrder(C); 128537ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines } 128637ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines 128798cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton // Get/Set functions from <mach-o/nlist.h> 12886bbf5eb32f35c6bbef5434ba06339a10c860d86cJim Grosbach 1289bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis static inline uint16_t GET_LIBRARY_ORDINAL(uint16_t n_desc) { 129098cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton return (((n_desc) >> 8u) & 0xffu); 129198cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton } 12926bbf5eb32f35c6bbef5434ba06339a10c860d86cJim Grosbach 1293bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis static inline void SET_LIBRARY_ORDINAL(uint16_t &n_desc, uint8_t ordinal) { 129498cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton n_desc = (((n_desc) & 0x00ff) | (((ordinal) & 0xff) << 8)); 129598cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton } 129698cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton 1297bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis static inline uint8_t GET_COMM_ALIGN (uint16_t n_desc) { 129898cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton return (n_desc >> 8u) & 0x0fu; 129998cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton } 13006bbf5eb32f35c6bbef5434ba06339a10c860d86cJim Grosbach 1301bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis static inline void SET_COMM_ALIGN (uint16_t &n_desc, uint8_t align) { 130298cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton n_desc = ((n_desc & 0xf0ffu) | ((align & 0x0fu) << 8u)); 130398cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton } 130498cfb53af473d10bedf3cdc8d4cc62497d086186Greg Clayton 130545f8c095ad94888716ceff54daf2fdf2f2f668a4Chris Lattner // Enums from <mach/machine.h> 130636b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines enum : uint32_t { 130745f8c095ad94888716ceff54daf2fdf2f2f668a4Chris Lattner // Capability bits used in the definition of cpu_type. 1308bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis CPU_ARCH_MASK = 0xff000000, // Mask for architecture bits 1309bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis CPU_ARCH_ABI64 = 0x01000000 // 64 bit ABI 1310bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis }; 131145f8c095ad94888716ceff54daf2fdf2f2f668a4Chris Lattner 1312bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis // Constants for the cputype field. 1313bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis enum CPUType { 1314bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis CPU_TYPE_ANY = -1, 1315bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis CPU_TYPE_X86 = 7, 1316bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis CPU_TYPE_I386 = CPU_TYPE_X86, 1317bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis CPU_TYPE_X86_64 = CPU_TYPE_X86 | CPU_ARCH_ABI64, 1318bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis /* CPU_TYPE_MIPS = 8, */ 1319bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis CPU_TYPE_MC98000 = 10, // Old Motorola PowerPC 1320bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis CPU_TYPE_ARM = 12, 132136b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines CPU_TYPE_ARM64 = CPU_TYPE_ARM | CPU_ARCH_ABI64, 1322bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis CPU_TYPE_SPARC = 14, 1323bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis CPU_TYPE_POWERPC = 18, 1324bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis CPU_TYPE_POWERPC64 = CPU_TYPE_POWERPC | CPU_ARCH_ABI64 1325bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis }; 13266bbf5eb32f35c6bbef5434ba06339a10c860d86cJim Grosbach 132736b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines enum : uint32_t { 1328bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis // Capability bits used in the definition of cpusubtype. 1329c6a4f5e819217e1e12c458aed8e7b122e23a3a58Stephen Hines CPU_SUBTYPE_MASK = 0xff000000, // Mask for architecture bits 1330c6a4f5e819217e1e12c458aed8e7b122e23a3a58Stephen Hines CPU_SUBTYPE_LIB64 = 0x80000000, // 64 bit libraries 1331bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis 1332bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis // Special CPU subtype constants. 1333118a0659ab8a4d0e0af343b88e5fa71a5c1eb6a6Reid Kleckner CPU_SUBTYPE_MULTIPLE = ~0u 1334bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis }; 1335bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis 1336bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis // Constants for the cpusubtype field. 1337bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis enum CPUSubTypeX86 { 1338bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis CPU_SUBTYPE_I386_ALL = 3, 1339bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis CPU_SUBTYPE_386 = 3, 1340bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis CPU_SUBTYPE_486 = 4, 1341bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis CPU_SUBTYPE_486SX = 0x84, 1342bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis CPU_SUBTYPE_586 = 5, 1343bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis CPU_SUBTYPE_PENT = CPU_SUBTYPE_586, 1344bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis CPU_SUBTYPE_PENTPRO = 0x16, 1345bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis CPU_SUBTYPE_PENTII_M3 = 0x36, 1346bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis CPU_SUBTYPE_PENTII_M5 = 0x56, 1347bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis CPU_SUBTYPE_CELERON = 0x67, 1348bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis CPU_SUBTYPE_CELERON_MOBILE = 0x77, 1349bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis CPU_SUBTYPE_PENTIUM_3 = 0x08, 1350bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis CPU_SUBTYPE_PENTIUM_3_M = 0x18, 1351bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis CPU_SUBTYPE_PENTIUM_3_XEON = 0x28, 1352bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis CPU_SUBTYPE_PENTIUM_M = 0x09, 1353bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis CPU_SUBTYPE_PENTIUM_4 = 0x0a, 1354bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis CPU_SUBTYPE_PENTIUM_4_M = 0x1a, 1355bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis CPU_SUBTYPE_ITANIUM = 0x0b, 1356bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis CPU_SUBTYPE_ITANIUM_2 = 0x1b, 1357bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis CPU_SUBTYPE_XEON = 0x0c, 1358bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis CPU_SUBTYPE_XEON_MP = 0x1c, 1359bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis 1360bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis CPU_SUBTYPE_X86_ALL = 3, 1361bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis CPU_SUBTYPE_X86_64_ALL = 3, 136235de9946d5fc01d2fed970bdcc7966bad92bdbc4Jim Grosbach CPU_SUBTYPE_X86_ARCH1 = 4, 136335de9946d5fc01d2fed970bdcc7966bad92bdbc4Jim Grosbach CPU_SUBTYPE_X86_64_H = 8 1364bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis }; 1365bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis static inline int CPU_SUBTYPE_INTEL(int Family, int Model) { 1366bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis return Family | (Model << 4); 1367bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis } 1368bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis static inline int CPU_SUBTYPE_INTEL_FAMILY(CPUSubTypeX86 ST) { 1369bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis return ((int)ST) & 0x0f; 1370bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis } 1371bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis static inline int CPU_SUBTYPE_INTEL_MODEL(CPUSubTypeX86 ST) { 1372bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis return ((int)ST) >> 4; 1373bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis } 1374bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis enum { 1375bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis CPU_SUBTYPE_INTEL_FAMILY_MAX = 15, 1376bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis CPU_SUBTYPE_INTEL_MODEL_ALL = 0 1377bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis }; 1378bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis 1379bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis enum CPUSubTypeARM { 1380bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis CPU_SUBTYPE_ARM_ALL = 0, 1381bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis CPU_SUBTYPE_ARM_V4T = 5, 1382bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis CPU_SUBTYPE_ARM_V6 = 6, 1383bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis CPU_SUBTYPE_ARM_V5 = 7, 1384bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis CPU_SUBTYPE_ARM_V5TEJ = 7, 1385bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis CPU_SUBTYPE_ARM_XSCALE = 8, 1386bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis CPU_SUBTYPE_ARM_V7 = 9, 138736b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines // unused ARM_V7F = 10, 1388bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis CPU_SUBTYPE_ARM_V7S = 11, 1389bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis CPU_SUBTYPE_ARM_V7K = 12, 1390bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis CPU_SUBTYPE_ARM_V6M = 14, 1391bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis CPU_SUBTYPE_ARM_V7M = 15, 1392bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis CPU_SUBTYPE_ARM_V7EM = 16 1393bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis }; 1394bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis 139536b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines enum CPUSubTypeARM64 { 139636b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines CPU_SUBTYPE_ARM64_ALL = 0 139736b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines }; 139836b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines 1399bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis enum CPUSubTypeSPARC { 1400bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis CPU_SUBTYPE_SPARC_ALL = 0 1401bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis }; 1402bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis 1403bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis enum CPUSubTypePowerPC { 1404bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis CPU_SUBTYPE_POWERPC_ALL = 0, 1405bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis CPU_SUBTYPE_POWERPC_601 = 1, 1406bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis CPU_SUBTYPE_POWERPC_602 = 2, 1407bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis CPU_SUBTYPE_POWERPC_603 = 3, 1408bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis CPU_SUBTYPE_POWERPC_603e = 4, 1409bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis CPU_SUBTYPE_POWERPC_603ev = 5, 1410bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis CPU_SUBTYPE_POWERPC_604 = 6, 1411bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis CPU_SUBTYPE_POWERPC_604e = 7, 1412bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis CPU_SUBTYPE_POWERPC_620 = 8, 1413bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis CPU_SUBTYPE_POWERPC_750 = 9, 1414bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis CPU_SUBTYPE_POWERPC_7400 = 10, 1415bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis CPU_SUBTYPE_POWERPC_7450 = 11, 1416bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis CPU_SUBTYPE_POWERPC_970 = 100, 1417bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis 1418bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis CPU_SUBTYPE_MC980000_ALL = CPU_SUBTYPE_POWERPC_ALL, 1419bf778d0546a4d8814339d946ca5c7e52291cc00cCharles Davis CPU_SUBTYPE_MC98601 = CPU_SUBTYPE_POWERPC_601 142045f8c095ad94888716ceff54daf2fdf2f2f668a4Chris Lattner }; 1421ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines 1422ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines struct x86_thread_state64_t { 1423ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines uint64_t rax; 1424ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines uint64_t rbx; 1425ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines uint64_t rcx; 1426ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines uint64_t rdx; 1427ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines uint64_t rdi; 1428ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines uint64_t rsi; 1429ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines uint64_t rbp; 1430ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines uint64_t rsp; 1431ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines uint64_t r8; 1432ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines uint64_t r9; 1433ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines uint64_t r10; 1434ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines uint64_t r11; 1435ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines uint64_t r12; 1436ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines uint64_t r13; 1437ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines uint64_t r14; 1438ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines uint64_t r15; 1439ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines uint64_t rip; 1440ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines uint64_t rflags; 1441ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines uint64_t cs; 1442ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines uint64_t fs; 1443ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines uint64_t gs; 1444ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines }; 1445ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines 1446ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines enum x86_fp_control_precis { 1447ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines x86_FP_PREC_24B = 0, 1448ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines x86_FP_PREC_53B = 2, 1449ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines x86_FP_PREC_64B = 3 1450ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines }; 1451ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines 1452ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines enum x86_fp_control_rc { 1453ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines x86_FP_RND_NEAR = 0, 1454ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines x86_FP_RND_DOWN = 1, 1455ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines x86_FP_RND_UP = 2, 1456ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines x86_FP_CHOP = 3 1457ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines }; 1458ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines 1459ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines struct fp_control_t { 1460ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines unsigned short 1461ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines invalid :1, 1462ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines denorm :1, 1463ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines zdiv :1, 1464ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines ovrfl :1, 1465ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines undfl :1, 1466ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines precis :1, 1467ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines :2, 1468ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines pc :2, 1469ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines rc :2, 1470ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines :1, 1471ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines :3; 1472ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines }; 1473ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines 1474ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines struct fp_status_t { 1475ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines unsigned short 1476ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines invalid :1, 1477ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines denorm :1, 1478ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines zdiv :1, 1479ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines ovrfl :1, 1480ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines undfl :1, 1481ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines precis :1, 1482ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines stkflt :1, 1483ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines errsumm :1, 1484ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines c0 :1, 1485ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines c1 :1, 1486ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines c2 :1, 1487ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines tos :3, 1488ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines c3 :1, 1489ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines busy :1; 1490ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines }; 1491ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines 1492ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines struct mmst_reg_t { 1493ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines char mmst_reg[10]; 1494ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines char mmst_rsrv[6]; 1495ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines }; 1496ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines 1497ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines struct xmm_reg_t { 1498ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines char xmm_reg[16]; 1499ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines }; 1500ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines 1501ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines struct x86_float_state64_t { 1502ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines int32_t fpu_reserved[2]; 1503ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines fp_control_t fpu_fcw; 1504ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines fp_status_t fpu_fsw; 1505ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines uint8_t fpu_ftw; 1506ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines uint8_t fpu_rsrv1; 1507ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines uint16_t fpu_fop; 1508ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines uint32_t fpu_ip; 1509ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines uint16_t fpu_cs; 1510ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines uint16_t fpu_rsrv2; 1511ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines uint32_t fpu_dp; 1512ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines uint16_t fpu_ds; 1513ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines uint16_t fpu_rsrv3; 1514ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines uint32_t fpu_mxcsr; 1515ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines uint32_t fpu_mxcsrmask; 1516ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines mmst_reg_t fpu_stmm0; 1517ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines mmst_reg_t fpu_stmm1; 1518ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines mmst_reg_t fpu_stmm2; 1519ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines mmst_reg_t fpu_stmm3; 1520ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines mmst_reg_t fpu_stmm4; 1521ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines mmst_reg_t fpu_stmm5; 1522ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines mmst_reg_t fpu_stmm6; 1523ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines mmst_reg_t fpu_stmm7; 1524ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines xmm_reg_t fpu_xmm0; 1525ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines xmm_reg_t fpu_xmm1; 1526ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines xmm_reg_t fpu_xmm2; 1527ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines xmm_reg_t fpu_xmm3; 1528ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines xmm_reg_t fpu_xmm4; 1529ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines xmm_reg_t fpu_xmm5; 1530ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines xmm_reg_t fpu_xmm6; 1531ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines xmm_reg_t fpu_xmm7; 1532ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines xmm_reg_t fpu_xmm8; 1533ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines xmm_reg_t fpu_xmm9; 1534ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines xmm_reg_t fpu_xmm10; 1535ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines xmm_reg_t fpu_xmm11; 1536ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines xmm_reg_t fpu_xmm12; 1537ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines xmm_reg_t fpu_xmm13; 1538ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines xmm_reg_t fpu_xmm14; 1539ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines xmm_reg_t fpu_xmm15; 1540ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines char fpu_rsrv4[6*16]; 1541ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines uint32_t fpu_reserved1; 1542ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines }; 1543ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines 1544ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines struct x86_exception_state64_t { 1545ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines uint16_t trapno; 1546ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines uint16_t cpu; 1547ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines uint32_t err; 1548ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines uint64_t faultvaddr; 1549ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines }; 1550ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines 1551ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines inline void swapStruct(x86_thread_state64_t &x) { 1552ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines sys::swapByteOrder(x.rax); 1553ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines sys::swapByteOrder(x.rbx); 1554ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines sys::swapByteOrder(x.rcx); 1555ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines sys::swapByteOrder(x.rdx); 1556ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines sys::swapByteOrder(x.rdi); 1557ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines sys::swapByteOrder(x.rsi); 1558ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines sys::swapByteOrder(x.rbp); 1559ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines sys::swapByteOrder(x.rsp); 1560ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines sys::swapByteOrder(x.r8); 1561ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines sys::swapByteOrder(x.r9); 1562ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines sys::swapByteOrder(x.r10); 1563ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines sys::swapByteOrder(x.r11); 1564ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines sys::swapByteOrder(x.r12); 1565ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines sys::swapByteOrder(x.r13); 1566ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines sys::swapByteOrder(x.r14); 1567ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines sys::swapByteOrder(x.r15); 1568ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines sys::swapByteOrder(x.rip); 1569ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines sys::swapByteOrder(x.rflags); 1570ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines sys::swapByteOrder(x.cs); 1571ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines sys::swapByteOrder(x.fs); 1572ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines sys::swapByteOrder(x.gs); 1573ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines } 1574ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines 1575ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines inline void swapStruct(x86_float_state64_t &x) { 1576ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines sys::swapByteOrder(x.fpu_reserved[0]); 1577ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines sys::swapByteOrder(x.fpu_reserved[1]); 1578ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines // TODO swap: fp_control_t fpu_fcw; 1579ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines // TODO swap: fp_status_t fpu_fsw; 1580ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines sys::swapByteOrder(x.fpu_fop); 1581ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines sys::swapByteOrder(x.fpu_ip); 1582ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines sys::swapByteOrder(x.fpu_cs); 1583ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines sys::swapByteOrder(x.fpu_rsrv2); 1584ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines sys::swapByteOrder(x.fpu_dp); 1585ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines sys::swapByteOrder(x.fpu_ds); 1586ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines sys::swapByteOrder(x.fpu_rsrv3); 1587ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines sys::swapByteOrder(x.fpu_mxcsr); 1588ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines sys::swapByteOrder(x.fpu_mxcsrmask); 1589ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines sys::swapByteOrder(x.fpu_reserved1); 1590ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines } 1591ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines 1592ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines inline void swapStruct(x86_exception_state64_t &x) { 1593ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines sys::swapByteOrder(x.trapno); 1594ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines sys::swapByteOrder(x.cpu); 1595ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines sys::swapByteOrder(x.err); 1596ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines sys::swapByteOrder(x.faultvaddr); 1597ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines } 1598ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines 1599ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines struct x86_state_hdr_t { 1600ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines uint32_t flavor; 1601ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines uint32_t count; 1602ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines }; 1603ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines 1604ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines struct x86_thread_state_t { 1605ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines x86_state_hdr_t tsh; 1606ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines union { 1607ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines x86_thread_state64_t ts64; 1608ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines } uts; 1609ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines }; 1610ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines 1611ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines struct x86_float_state_t { 1612ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines x86_state_hdr_t fsh; 1613ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines union { 1614ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines x86_float_state64_t fs64; 1615ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines } ufs; 1616ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines }; 1617ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines 1618ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines struct x86_exception_state_t { 1619ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines x86_state_hdr_t esh; 1620ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines union { 1621ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines x86_exception_state64_t es64; 1622ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines } ues; 1623ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines }; 1624ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines 1625ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines inline void swapStruct(x86_state_hdr_t &x) { 1626ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines sys::swapByteOrder(x.flavor); 1627ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines sys::swapByteOrder(x.count); 1628ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines } 1629ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines 1630ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines enum X86ThreadFlavors { 1631ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines x86_THREAD_STATE32 = 1, 1632ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines x86_FLOAT_STATE32 = 2, 1633ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines x86_EXCEPTION_STATE32 = 3, 1634ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines x86_THREAD_STATE64 = 4, 1635ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines x86_FLOAT_STATE64 = 5, 1636ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines x86_EXCEPTION_STATE64 = 6, 1637ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines x86_THREAD_STATE = 7, 1638ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines x86_FLOAT_STATE = 8, 1639ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines x86_EXCEPTION_STATE = 9, 1640ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines x86_DEBUG_STATE32 = 10, 1641ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines x86_DEBUG_STATE64 = 11, 1642ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines x86_DEBUG_STATE = 12 1643ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines }; 1644ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines 1645ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines inline void swapStruct(x86_thread_state_t &x) { 1646ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines swapStruct(x.tsh); 1647ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines if (x.tsh.flavor == x86_THREAD_STATE64) 1648ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines swapStruct(x.uts.ts64); 1649ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines } 1650ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines 1651ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines inline void swapStruct(x86_float_state_t &x) { 1652ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines swapStruct(x.fsh); 1653ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines if (x.fsh.flavor == x86_FLOAT_STATE64) 1654ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines swapStruct(x.ufs.fs64); 1655ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines } 1656ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines 1657ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines inline void swapStruct(x86_exception_state_t &x) { 1658ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines swapStruct(x.esh); 1659ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines if (x.esh.flavor == x86_EXCEPTION_STATE64) 1660ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines swapStruct(x.ues.es64); 1661ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines } 1662ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines 1663ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines const uint32_t x86_THREAD_STATE64_COUNT = 1664ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines sizeof(x86_thread_state64_t) / sizeof(uint32_t); 1665ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines const uint32_t x86_FLOAT_STATE64_COUNT = 1666ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines sizeof(x86_float_state64_t) / sizeof(uint32_t); 1667ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines const uint32_t x86_EXCEPTION_STATE64_COUNT = 1668ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines sizeof(x86_exception_state64_t) / sizeof(uint32_t); 1669ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines 1670ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines const uint32_t x86_THREAD_STATE_COUNT = 1671ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines sizeof(x86_thread_state_t) / sizeof(uint32_t); 1672ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines const uint32_t x86_FLOAT_STATE_COUNT = 1673ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines sizeof(x86_float_state_t) / sizeof(uint32_t); 1674ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines const uint32_t x86_EXCEPTION_STATE_COUNT = 1675ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines sizeof(x86_exception_state_t) / sizeof(uint32_t); 1676ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines 167745f8c095ad94888716ceff54daf2fdf2f2f668a4Chris Lattner } // end namespace MachO 167845f8c095ad94888716ceff54daf2fdf2f2f668a4Chris Lattner} // end namespace llvm 167945f8c095ad94888716ceff54daf2fdf2f2f668a4Chris Lattner 168045f8c095ad94888716ceff54daf2fdf2f2f668a4Chris Lattner#endif 1681