1203954Srdivacky//===-- llvm/Support/MachO.h - The MachO file format ------------*- C++ -*-===// 2203954Srdivacky// 3203954Srdivacky// The LLVM Compiler Infrastructure 4203954Srdivacky// 5203954Srdivacky// This file is distributed under the University of Illinois Open Source 6203954Srdivacky// License. See LICENSE.TXT for details. 7203954Srdivacky// 8203954Srdivacky//===----------------------------------------------------------------------===// 9203954Srdivacky// 10203954Srdivacky// This file defines manifest constants for the MachO object file format. 11203954Srdivacky// 12203954Srdivacky//===----------------------------------------------------------------------===// 13203954Srdivacky 14203954Srdivacky#ifndef LLVM_SUPPORT_MACHO_H 15203954Srdivacky#define LLVM_SUPPORT_MACHO_H 16203954Srdivacky 17263509Sdim#include "llvm/Support/Compiler.h" 18218893Sdim#include "llvm/Support/DataTypes.h" 19263509Sdim#include "llvm/Support/Host.h" 20212904Sdim 21203954Srdivackynamespace llvm { 22203954Srdivacky namespace MachO { 23212904Sdim // Enums from <mach-o/loader.h> 24263509Sdim enum LLVM_ENUM_INT_TYPE(uint32_t) { 25218893Sdim // Constants for the "magic" field in llvm::MachO::mach_header and 26212904Sdim // llvm::MachO::mach_header_64 27263509Sdim MH_MAGIC = 0xFEEDFACEu, 28263509Sdim MH_CIGAM = 0xCEFAEDFEu, 29263509Sdim MH_MAGIC_64 = 0xFEEDFACFu, 30263509Sdim MH_CIGAM_64 = 0xCFFAEDFEu, 31263509Sdim FAT_MAGIC = 0xCAFEBABEu, 32263509Sdim FAT_CIGAM = 0xBEBAFECAu 33263509Sdim }; 34212904Sdim 35263509Sdim enum HeaderFileType { 36212904Sdim // Constants for the "filetype" field in llvm::MachO::mach_header and 37212904Sdim // llvm::MachO::mach_header_64 38263509Sdim MH_OBJECT = 0x1u, 39263509Sdim MH_EXECUTE = 0x2u, 40263509Sdim MH_FVMLIB = 0x3u, 41263509Sdim MH_CORE = 0x4u, 42263509Sdim MH_PRELOAD = 0x5u, 43263509Sdim MH_DYLIB = 0x6u, 44263509Sdim MH_DYLINKER = 0x7u, 45263509Sdim MH_BUNDLE = 0x8u, 46263509Sdim MH_DYLIB_STUB = 0x9u, 47263509Sdim MH_DSYM = 0xAu, 48263509Sdim MH_KEXT_BUNDLE = 0xBu 49263509Sdim }; 50212904Sdim 51263509Sdim enum { 52212904Sdim // Constant bits for the "flags" field in llvm::MachO::mach_header and 53212904Sdim // llvm::MachO::mach_header_64 54263509Sdim MH_NOUNDEFS = 0x00000001u, 55263509Sdim MH_INCRLINK = 0x00000002u, 56263509Sdim MH_DYLDLINK = 0x00000004u, 57263509Sdim MH_BINDATLOAD = 0x00000008u, 58263509Sdim MH_PREBOUND = 0x00000010u, 59263509Sdim MH_SPLIT_SEGS = 0x00000020u, 60263509Sdim MH_LAZY_INIT = 0x00000040u, 61263509Sdim MH_TWOLEVEL = 0x00000080u, 62263509Sdim MH_FORCE_FLAT = 0x00000100u, 63263509Sdim MH_NOMULTIDEFS = 0x00000200u, 64263509Sdim MH_NOFIXPREBINDING = 0x00000400u, 65263509Sdim MH_PREBINDABLE = 0x00000800u, 66263509Sdim MH_ALLMODSBOUND = 0x00001000u, 67263509Sdim MH_SUBSECTIONS_VIA_SYMBOLS = 0x00002000u, 68263509Sdim MH_CANONICAL = 0x00004000u, 69263509Sdim MH_WEAK_DEFINES = 0x00008000u, 70263509Sdim MH_BINDS_TO_WEAK = 0x00010000u, 71263509Sdim MH_ALLOW_STACK_EXECUTION = 0x00020000u, 72263509Sdim MH_ROOT_SAFE = 0x00040000u, 73263509Sdim MH_SETUID_SAFE = 0x00080000u, 74263509Sdim MH_NO_REEXPORTED_DYLIBS = 0x00100000u, 75263509Sdim MH_PIE = 0x00200000u, 76263509Sdim MH_DEAD_STRIPPABLE_DYLIB = 0x00400000u 77263509Sdim }; 78218893Sdim 79263509Sdim enum LLVM_ENUM_INT_TYPE(uint32_t) { 80263509Sdim // Flags for the "cmd" field in llvm::MachO::load_command 81263509Sdim LC_REQ_DYLD = 0x80000000u 82263509Sdim }; 83263509Sdim 84263509Sdim enum LoadCommandType LLVM_ENUM_INT_TYPE(uint32_t) { 85212904Sdim // Constants for the "cmd" field in llvm::MachO::load_command 86263509Sdim LC_SEGMENT = 0x00000001u, 87263509Sdim LC_SYMTAB = 0x00000002u, 88263509Sdim LC_SYMSEG = 0x00000003u, 89263509Sdim LC_THREAD = 0x00000004u, 90263509Sdim LC_UNIXTHREAD = 0x00000005u, 91263509Sdim LC_LOADFVMLIB = 0x00000006u, 92263509Sdim LC_IDFVMLIB = 0x00000007u, 93263509Sdim LC_IDENT = 0x00000008u, 94263509Sdim LC_FVMFILE = 0x00000009u, 95263509Sdim LC_PREPAGE = 0x0000000Au, 96263509Sdim LC_DYSYMTAB = 0x0000000Bu, 97263509Sdim LC_LOAD_DYLIB = 0x0000000Cu, 98263509Sdim LC_ID_DYLIB = 0x0000000Du, 99263509Sdim LC_LOAD_DYLINKER = 0x0000000Eu, 100263509Sdim LC_ID_DYLINKER = 0x0000000Fu, 101263509Sdim LC_PREBOUND_DYLIB = 0x00000010u, 102263509Sdim LC_ROUTINES = 0x00000011u, 103263509Sdim LC_SUB_FRAMEWORK = 0x00000012u, 104263509Sdim LC_SUB_UMBRELLA = 0x00000013u, 105263509Sdim LC_SUB_CLIENT = 0x00000014u, 106263509Sdim LC_SUB_LIBRARY = 0x00000015u, 107263509Sdim LC_TWOLEVEL_HINTS = 0x00000016u, 108263509Sdim LC_PREBIND_CKSUM = 0x00000017u, 109263509Sdim LC_LOAD_WEAK_DYLIB = 0x80000018u, 110263509Sdim LC_SEGMENT_64 = 0x00000019u, 111263509Sdim LC_ROUTINES_64 = 0x0000001Au, 112263509Sdim LC_UUID = 0x0000001Bu, 113263509Sdim LC_RPATH = 0x8000001Cu, 114263509Sdim LC_CODE_SIGNATURE = 0x0000001Du, 115263509Sdim LC_SEGMENT_SPLIT_INFO = 0x0000001Eu, 116263509Sdim LC_REEXPORT_DYLIB = 0x8000001Fu, 117263509Sdim LC_LAZY_LOAD_DYLIB = 0x00000020u, 118263509Sdim LC_ENCRYPTION_INFO = 0x00000021u, 119263509Sdim LC_DYLD_INFO = 0x00000022u, 120263509Sdim LC_DYLD_INFO_ONLY = 0x80000022u, 121263509Sdim LC_LOAD_UPWARD_DYLIB = 0x80000023u, 122263509Sdim LC_VERSION_MIN_MACOSX = 0x00000024u, 123263509Sdim LC_VERSION_MIN_IPHONEOS = 0x00000025u, 124263509Sdim LC_FUNCTION_STARTS = 0x00000026u, 125263509Sdim LC_DYLD_ENVIRONMENT = 0x00000027u, 126263509Sdim LC_MAIN = 0x80000028u, 127263509Sdim LC_DATA_IN_CODE = 0x00000029u, 128263509Sdim LC_SOURCE_VERSION = 0x0000002Au, 129263509Sdim LC_DYLIB_CODE_SIGN_DRS = 0x0000002Bu, 130263509Sdim // 0x0000002Cu, 131263509Sdim LC_LINKER_OPTIONS = 0x0000002Du 132263509Sdim }; 133218893Sdim 134263509Sdim enum LLVM_ENUM_INT_TYPE(uint32_t) { 135212904Sdim // Constant bits for the "flags" field in llvm::MachO::segment_command 136263509Sdim SG_HIGHVM = 0x1u, 137263509Sdim SG_FVMLIB = 0x2u, 138263509Sdim SG_NORELOC = 0x4u, 139263509Sdim SG_PROTECTED_VERSION_1 = 0x8u, 140212904Sdim 141212904Sdim 142212904Sdim // Constant masks for the "flags" field in llvm::MachO::section and 143212904Sdim // llvm::MachO::section_64 144263509Sdim SECTION_TYPE = 0x000000ffu, // SECTION_TYPE 145263509Sdim SECTION_ATTRIBUTES = 0xffffff00u, // SECTION_ATTRIBUTES 146263509Sdim SECTION_ATTRIBUTES_USR = 0xff000000u, // SECTION_ATTRIBUTES_USR 147263509Sdim SECTION_ATTRIBUTES_SYS = 0x00ffff00u // SECTION_ATTRIBUTES_SYS 148263509Sdim }; 149212904Sdim 150263509Sdim enum SectionType { 151212904Sdim // Constant masks for the "flags[7:0]" field in llvm::MachO::section and 152212904Sdim // llvm::MachO::section_64 (mask "flags" with SECTION_TYPE) 153263509Sdim S_REGULAR = 0x00u, 154263509Sdim S_ZEROFILL = 0x01u, 155263509Sdim S_CSTRING_LITERALS = 0x02u, 156263509Sdim S_4BYTE_LITERALS = 0x03u, 157263509Sdim S_8BYTE_LITERALS = 0x04u, 158263509Sdim S_LITERAL_POINTERS = 0x05u, 159263509Sdim S_NON_LAZY_SYMBOL_POINTERS = 0x06u, 160263509Sdim S_LAZY_SYMBOL_POINTERS = 0x07u, 161263509Sdim S_SYMBOL_STUBS = 0x08u, 162263509Sdim S_MOD_INIT_FUNC_POINTERS = 0x09u, 163263509Sdim S_MOD_TERM_FUNC_POINTERS = 0x0au, 164263509Sdim S_COALESCED = 0x0bu, 165263509Sdim S_GB_ZEROFILL = 0x0cu, 166263509Sdim S_INTERPOSING = 0x0du, 167263509Sdim S_16BYTE_LITERALS = 0x0eu, 168263509Sdim S_DTRACE_DOF = 0x0fu, 169263509Sdim S_LAZY_DYLIB_SYMBOL_POINTERS = 0x10u, 170263509Sdim S_THREAD_LOCAL_REGULAR = 0x11u, 171263509Sdim S_THREAD_LOCAL_ZEROFILL = 0x12u, 172263509Sdim S_THREAD_LOCAL_VARIABLES = 0x13u, 173263509Sdim S_THREAD_LOCAL_VARIABLE_POINTERS = 0x14u, 174263509Sdim S_THREAD_LOCAL_INIT_FUNCTION_POINTERS = 0x15u 175263509Sdim }; 176212904Sdim 177263509Sdim enum LLVM_ENUM_INT_TYPE(uint32_t) { 178212904Sdim // Constant masks for the "flags[31:24]" field in llvm::MachO::section and 179212904Sdim // llvm::MachO::section_64 (mask "flags" with SECTION_ATTRIBUTES_USR) 180263509Sdim S_ATTR_PURE_INSTRUCTIONS = 0x80000000u, 181263509Sdim S_ATTR_NO_TOC = 0x40000000u, 182263509Sdim S_ATTR_STRIP_STATIC_SYMS = 0x20000000u, 183263509Sdim S_ATTR_NO_DEAD_STRIP = 0x10000000u, 184263509Sdim S_ATTR_LIVE_SUPPORT = 0x08000000u, 185263509Sdim S_ATTR_SELF_MODIFYING_CODE = 0x04000000u, 186263509Sdim S_ATTR_DEBUG = 0x02000000u, 187212904Sdim 188212904Sdim // Constant masks for the "flags[23:8]" field in llvm::MachO::section and 189212904Sdim // llvm::MachO::section_64 (mask "flags" with SECTION_ATTRIBUTES_SYS) 190263509Sdim S_ATTR_SOME_INSTRUCTIONS = 0x00000400u, 191263509Sdim S_ATTR_EXT_RELOC = 0x00000200u, 192263509Sdim S_ATTR_LOC_RELOC = 0x00000100u, 193212904Sdim 194263509Sdim // Constant masks for the value of an indirect symbol in an indirect 195263509Sdim // symbol table 196263509Sdim INDIRECT_SYMBOL_LOCAL = 0x80000000u, 197263509Sdim INDIRECT_SYMBOL_ABS = 0x40000000u 198263509Sdim }; 199212904Sdim 200263509Sdim enum DataRegionType { 201263509Sdim // Constants for the "kind" field in a data_in_code_entry structure 202263509Sdim DICE_KIND_DATA = 1u, 203263509Sdim DICE_KIND_JUMP_TABLE8 = 2u, 204263509Sdim DICE_KIND_JUMP_TABLE16 = 3u, 205263509Sdim DICE_KIND_JUMP_TABLE32 = 4u, 206263509Sdim DICE_KIND_ABS_JUMP_TABLE32 = 5u 207263509Sdim }; 208212904Sdim 209263509Sdim enum RebaseType { 210263509Sdim REBASE_TYPE_POINTER = 1u, 211263509Sdim REBASE_TYPE_TEXT_ABSOLUTE32 = 2u, 212263509Sdim REBASE_TYPE_TEXT_PCREL32 = 3u 213263509Sdim }; 214212904Sdim 215263509Sdim enum { 216263509Sdim REBASE_OPCODE_MASK = 0xF0u, 217263509Sdim REBASE_IMMEDIATE_MASK = 0x0Fu 218263509Sdim }; 219212904Sdim 220263509Sdim enum RebaseOpcode { 221263509Sdim REBASE_OPCODE_DONE = 0x00u, 222263509Sdim REBASE_OPCODE_SET_TYPE_IMM = 0x10u, 223263509Sdim REBASE_OPCODE_SET_SEGMENT_AND_OFFSET_ULEB = 0x20u, 224263509Sdim REBASE_OPCODE_ADD_ADDR_ULEB = 0x30u, 225263509Sdim REBASE_OPCODE_ADD_ADDR_IMM_SCALED = 0x40u, 226263509Sdim REBASE_OPCODE_DO_REBASE_IMM_TIMES = 0x50u, 227263509Sdim REBASE_OPCODE_DO_REBASE_ULEB_TIMES = 0x60u, 228263509Sdim REBASE_OPCODE_DO_REBASE_ADD_ADDR_ULEB = 0x70u, 229263509Sdim REBASE_OPCODE_DO_REBASE_ULEB_TIMES_SKIPPING_ULEB = 0x80u 230263509Sdim }; 231212904Sdim 232263509Sdim enum BindType { 233263509Sdim BIND_TYPE_POINTER = 1u, 234263509Sdim BIND_TYPE_TEXT_ABSOLUTE32 = 2u, 235263509Sdim BIND_TYPE_TEXT_PCREL32 = 3u 236263509Sdim }; 237212904Sdim 238263509Sdim enum BindSpecialDylib { 239263509Sdim BIND_SPECIAL_DYLIB_SELF = 0, 240263509Sdim BIND_SPECIAL_DYLIB_MAIN_EXECUTABLE = -1, 241263509Sdim BIND_SPECIAL_DYLIB_FLAT_LOOKUP = -2 242263509Sdim }; 243212904Sdim 244263509Sdim enum { 245263509Sdim BIND_SYMBOL_FLAGS_WEAK_IMPORT = 0x1u, 246263509Sdim BIND_SYMBOL_FLAGS_NON_WEAK_DEFINITION = 0x8u, 247212904Sdim 248263509Sdim BIND_OPCODE_MASK = 0xF0u, 249263509Sdim BIND_IMMEDIATE_MASK = 0x0Fu 250263509Sdim }; 251212904Sdim 252263509Sdim enum BindOpcode { 253263509Sdim BIND_OPCODE_DONE = 0x00u, 254263509Sdim BIND_OPCODE_SET_DYLIB_ORDINAL_IMM = 0x10u, 255263509Sdim BIND_OPCODE_SET_DYLIB_ORDINAL_ULEB = 0x20u, 256263509Sdim BIND_OPCODE_SET_DYLIB_SPECIAL_IMM = 0x30u, 257263509Sdim BIND_OPCODE_SET_SYMBOL_TRAILING_FLAGS_IMM = 0x40u, 258263509Sdim BIND_OPCODE_SET_TYPE_IMM = 0x50u, 259263509Sdim BIND_OPCODE_SET_ADDEND_SLEB = 0x60u, 260263509Sdim BIND_OPCODE_SET_SEGMENT_AND_OFFSET_ULEB = 0x70u, 261263509Sdim BIND_OPCODE_ADD_ADDR_ULEB = 0x80u, 262263509Sdim BIND_OPCODE_DO_BIND = 0x90u, 263263509Sdim BIND_OPCODE_DO_BIND_ADD_ADDR_ULEB = 0xA0u, 264263509Sdim BIND_OPCODE_DO_BIND_ADD_ADDR_IMM_SCALED = 0xB0u, 265263509Sdim BIND_OPCODE_DO_BIND_ULEB_TIMES_SKIPPING_ULEB = 0xC0u 266263509Sdim }; 267212904Sdim 268263509Sdim enum { 269263509Sdim EXPORT_SYMBOL_FLAGS_KIND_MASK = 0x03u, 270263509Sdim EXPORT_SYMBOL_FLAGS_WEAK_DEFINITION = 0x04u, 271263509Sdim EXPORT_SYMBOL_FLAGS_REEXPORT = 0x08u, 272263509Sdim EXPORT_SYMBOL_FLAGS_STUB_AND_RESOLVER = 0x10u 273263509Sdim }; 274263509Sdim 275263509Sdim enum ExportSymbolKind { 276263509Sdim EXPORT_SYMBOL_FLAGS_KIND_REGULAR = 0x00u, 277263509Sdim EXPORT_SYMBOL_FLAGS_KIND_THREAD_LOCAL = 0x01u 278263509Sdim }; 279263509Sdim 280263509Sdim 281263509Sdim enum { 282212904Sdim // Constant masks for the "n_type" field in llvm::MachO::nlist and 283212904Sdim // llvm::MachO::nlist_64 284263509Sdim N_STAB = 0xe0, 285263509Sdim N_PEXT = 0x10, 286263509Sdim N_TYPE = 0x0e, 287263509Sdim N_EXT = 0x01 288263509Sdim }; 289212904Sdim 290263509Sdim enum NListType { 291212904Sdim // Constants for the "n_type & N_TYPE" llvm::MachO::nlist and 292212904Sdim // llvm::MachO::nlist_64 293263509Sdim N_UNDF = 0x0u, 294263509Sdim N_ABS = 0x2u, 295263509Sdim N_SECT = 0xeu, 296263509Sdim N_PBUD = 0xcu, 297263509Sdim N_INDR = 0xau 298263509Sdim }; 299212904Sdim 300263509Sdim enum SectionOrdinal { 301263509Sdim // Constants for the "n_sect" field in llvm::MachO::nlist and 302212904Sdim // llvm::MachO::nlist_64 303263509Sdim NO_SECT = 0u, 304263509Sdim MAX_SECT = 0xffu 305263509Sdim }; 306212904Sdim 307263509Sdim enum { 308263509Sdim // Constant masks for the "n_desc" field in llvm::MachO::nlist and 309263509Sdim // llvm::MachO::nlist_64 310263509Sdim N_ARM_THUMB_DEF = 0x0008u, 311263509Sdim N_NO_DEAD_STRIP = 0x0020u, 312263509Sdim N_WEAK_REF = 0x0040u, 313263509Sdim N_WEAK_DEF = 0x0080u, 314263509Sdim N_SYMBOL_RESOLVER = 0x0100u 315263509Sdim }; 316235633Sdim 317263509Sdim enum StabType { 318212904Sdim // Constant values for the "n_type" field in llvm::MachO::nlist and 319212904Sdim // llvm::MachO::nlist_64 when "(n_type & NlistMaskStab) != 0" 320263509Sdim N_GSYM = 0x20u, 321263509Sdim N_FNAME = 0x22u, 322263509Sdim N_FUN = 0x24u, 323263509Sdim N_STSYM = 0x26u, 324263509Sdim N_LCSYM = 0x28u, 325263509Sdim N_BNSYM = 0x2Eu, 326263509Sdim N_OPT = 0x3Cu, 327263509Sdim N_RSYM = 0x40u, 328263509Sdim N_SLINE = 0x44u, 329263509Sdim N_ENSYM = 0x4Eu, 330263509Sdim N_SSYM = 0x60u, 331263509Sdim N_SO = 0x64u, 332263509Sdim N_OSO = 0x66u, 333263509Sdim N_LSYM = 0x80u, 334263509Sdim N_BINCL = 0x82u, 335263509Sdim N_SOL = 0x84u, 336263509Sdim N_PARAMS = 0x86u, 337263509Sdim N_VERSION = 0x88u, 338263509Sdim N_OLEVEL = 0x8Au, 339263509Sdim N_PSYM = 0xA0u, 340263509Sdim N_EINCL = 0xA2u, 341263509Sdim N_ENTRY = 0xA4u, 342263509Sdim N_LBRAC = 0xC0u, 343263509Sdim N_EXCL = 0xC2u, 344263509Sdim N_RBRAC = 0xE0u, 345263509Sdim N_BCOMM = 0xE2u, 346263509Sdim N_ECOMM = 0xE4u, 347263509Sdim N_ECOML = 0xE8u, 348263509Sdim N_LENG = 0xFEu 349263509Sdim }; 350212904Sdim 351263509Sdim enum LLVM_ENUM_INT_TYPE(uint32_t) { 352263509Sdim // Constant values for the r_symbolnum field in an 353263509Sdim // llvm::MachO::relocation_info structure when r_extern is 0. 354263509Sdim R_ABS = 0, 355263509Sdim 356263509Sdim // Constant bits for the r_address field in an 357263509Sdim // llvm::MachO::relocation_info structure. 358263509Sdim R_SCATTERED = 0x80000000 359212904Sdim }; 360218893Sdim 361263509Sdim enum RelocationInfoType { 362263509Sdim // Constant values for the r_type field in an 363263509Sdim // llvm::MachO::relocation_info or llvm::MachO::scattered_relocation_info 364263509Sdim // structure. 365263509Sdim GENERIC_RELOC_VANILLA = 0, 366263509Sdim GENERIC_RELOC_PAIR = 1, 367263509Sdim GENERIC_RELOC_SECTDIFF = 2, 368263509Sdim GENERIC_RELOC_PB_LA_PTR = 3, 369263509Sdim GENERIC_RELOC_LOCAL_SECTDIFF = 4, 370263509Sdim GENERIC_RELOC_TLV = 5, 371263509Sdim 372263509Sdim // Constant values for the r_type field in a PowerPC architecture 373263509Sdim // llvm::MachO::relocation_info or llvm::MachO::scattered_relocation_info 374263509Sdim // structure. 375263509Sdim PPC_RELOC_VANILLA = GENERIC_RELOC_VANILLA, 376263509Sdim PPC_RELOC_PAIR = GENERIC_RELOC_PAIR, 377263509Sdim PPC_RELOC_BR14 = 2, 378263509Sdim PPC_RELOC_BR24 = 3, 379263509Sdim PPC_RELOC_HI16 = 4, 380263509Sdim PPC_RELOC_LO16 = 5, 381263509Sdim PPC_RELOC_HA16 = 6, 382263509Sdim PPC_RELOC_LO14 = 7, 383263509Sdim PPC_RELOC_SECTDIFF = 8, 384263509Sdim PPC_RELOC_PB_LA_PTR = 9, 385263509Sdim PPC_RELOC_HI16_SECTDIFF = 10, 386263509Sdim PPC_RELOC_LO16_SECTDIFF = 11, 387263509Sdim PPC_RELOC_HA16_SECTDIFF = 12, 388263509Sdim PPC_RELOC_JBSR = 13, 389263509Sdim PPC_RELOC_LO14_SECTDIFF = 14, 390263509Sdim PPC_RELOC_LOCAL_SECTDIFF = 15, 391263509Sdim 392263509Sdim // Constant values for the r_type field in an ARM architecture 393263509Sdim // llvm::MachO::relocation_info or llvm::MachO::scattered_relocation_info 394263509Sdim // structure. 395263509Sdim ARM_RELOC_VANILLA = GENERIC_RELOC_VANILLA, 396263509Sdim ARM_RELOC_PAIR = GENERIC_RELOC_PAIR, 397263509Sdim ARM_RELOC_SECTDIFF = GENERIC_RELOC_SECTDIFF, 398263509Sdim ARM_RELOC_LOCAL_SECTDIFF = 3, 399263509Sdim ARM_RELOC_PB_LA_PTR = 4, 400263509Sdim ARM_RELOC_BR24 = 5, 401263509Sdim ARM_THUMB_RELOC_BR22 = 6, 402263509Sdim ARM_THUMB_32BIT_BRANCH = 7, // obsolete 403263509Sdim ARM_RELOC_HALF = 8, 404263509Sdim ARM_RELOC_HALF_SECTDIFF = 9, 405263509Sdim 406263509Sdim // Constant values for the r_type field in an x86_64 architecture 407263509Sdim // llvm::MachO::relocation_info or llvm::MachO::scattered_relocation_info 408263509Sdim // structure 409263509Sdim X86_64_RELOC_UNSIGNED = 0, 410263509Sdim X86_64_RELOC_SIGNED = 1, 411263509Sdim X86_64_RELOC_BRANCH = 2, 412263509Sdim X86_64_RELOC_GOT_LOAD = 3, 413263509Sdim X86_64_RELOC_GOT = 4, 414263509Sdim X86_64_RELOC_SUBTRACTOR = 5, 415263509Sdim X86_64_RELOC_SIGNED_1 = 6, 416263509Sdim X86_64_RELOC_SIGNED_2 = 7, 417263509Sdim X86_64_RELOC_SIGNED_4 = 8, 418263509Sdim X86_64_RELOC_TLV = 9 419263509Sdim }; 420263509Sdim 421263509Sdim // Values for segment_command.initprot. 422263509Sdim // From <mach/vm_prot.h> 423263509Sdim enum { 424263509Sdim VM_PROT_READ = 0x1, 425263509Sdim VM_PROT_WRITE = 0x2, 426263509Sdim VM_PROT_EXECUTE = 0x4 427263509Sdim }; 428263509Sdim 429263509Sdim 430212904Sdim // Structs from <mach-o/loader.h> 431218893Sdim 432212904Sdim struct mach_header { 433212904Sdim uint32_t magic; 434212904Sdim uint32_t cputype; 435212904Sdim uint32_t cpusubtype; 436212904Sdim uint32_t filetype; 437212904Sdim uint32_t ncmds; 438212904Sdim uint32_t sizeofcmds; 439212904Sdim uint32_t flags; 440212904Sdim }; 441212904Sdim 442212904Sdim struct mach_header_64 { 443212904Sdim uint32_t magic; 444212904Sdim uint32_t cputype; 445212904Sdim uint32_t cpusubtype; 446212904Sdim uint32_t filetype; 447212904Sdim uint32_t ncmds; 448212904Sdim uint32_t sizeofcmds; 449212904Sdim uint32_t flags; 450212904Sdim uint32_t reserved; 451212904Sdim }; 452212904Sdim 453212904Sdim struct load_command { 454212904Sdim uint32_t cmd; 455212904Sdim uint32_t cmdsize; 456212904Sdim }; 457212904Sdim 458212904Sdim struct segment_command { 459212904Sdim uint32_t cmd; 460212904Sdim uint32_t cmdsize; 461212904Sdim char segname[16]; 462212904Sdim uint32_t vmaddr; 463212904Sdim uint32_t vmsize; 464212904Sdim uint32_t fileoff; 465212904Sdim uint32_t filesize; 466212904Sdim uint32_t maxprot; 467212904Sdim uint32_t initprot; 468212904Sdim uint32_t nsects; 469212904Sdim uint32_t flags; 470212904Sdim }; 471212904Sdim 472212904Sdim struct segment_command_64 { 473212904Sdim uint32_t cmd; 474212904Sdim uint32_t cmdsize; 475212904Sdim char segname[16]; 476212904Sdim uint64_t vmaddr; 477212904Sdim uint64_t vmsize; 478212904Sdim uint64_t fileoff; 479212904Sdim uint64_t filesize; 480212904Sdim uint32_t maxprot; 481212904Sdim uint32_t initprot; 482212904Sdim uint32_t nsects; 483212904Sdim uint32_t flags; 484212904Sdim }; 485212904Sdim 486212904Sdim struct section { 487212904Sdim char sectname[16]; 488212904Sdim char segname[16]; 489212904Sdim uint32_t addr; 490212904Sdim uint32_t size; 491212904Sdim uint32_t offset; 492212904Sdim uint32_t align; 493212904Sdim uint32_t reloff; 494212904Sdim uint32_t nreloc; 495212904Sdim uint32_t flags; 496212904Sdim uint32_t reserved1; 497212904Sdim uint32_t reserved2; 498212904Sdim }; 499212904Sdim 500212904Sdim struct section_64 { 501212904Sdim char sectname[16]; 502212904Sdim char segname[16]; 503212904Sdim uint64_t addr; 504212904Sdim uint64_t size; 505212904Sdim uint32_t offset; 506212904Sdim uint32_t align; 507212904Sdim uint32_t reloff; 508212904Sdim uint32_t nreloc; 509212904Sdim uint32_t flags; 510212904Sdim uint32_t reserved1; 511212904Sdim uint32_t reserved2; 512212904Sdim uint32_t reserved3; 513212904Sdim }; 514212904Sdim 515212904Sdim struct fvmlib { 516212904Sdim uint32_t name; 517212904Sdim uint32_t minor_version; 518212904Sdim uint32_t header_addr; 519212904Sdim }; 520212904Sdim 521212904Sdim struct fvmlib_command { 522212904Sdim uint32_t cmd; 523212904Sdim uint32_t cmdsize; 524212904Sdim struct fvmlib fvmlib; 525212904Sdim }; 526212904Sdim 527212904Sdim struct dylib { 528212904Sdim uint32_t name; 529212904Sdim uint32_t timestamp; 530212904Sdim uint32_t current_version; 531212904Sdim uint32_t compatibility_version; 532212904Sdim }; 533212904Sdim 534212904Sdim struct dylib_command { 535212904Sdim uint32_t cmd; 536212904Sdim uint32_t cmdsize; 537212904Sdim struct dylib dylib; 538212904Sdim }; 539212904Sdim 540212904Sdim struct sub_framework_command { 541212904Sdim uint32_t cmd; 542212904Sdim uint32_t cmdsize; 543212904Sdim uint32_t umbrella; 544212904Sdim }; 545212904Sdim 546212904Sdim struct sub_client_command { 547212904Sdim uint32_t cmd; 548212904Sdim uint32_t cmdsize; 549212904Sdim uint32_t client; 550212904Sdim }; 551212904Sdim 552212904Sdim struct sub_umbrella_command { 553212904Sdim uint32_t cmd; 554212904Sdim uint32_t cmdsize; 555212904Sdim uint32_t sub_umbrella; 556212904Sdim }; 557212904Sdim 558212904Sdim struct sub_library_command { 559212904Sdim uint32_t cmd; 560212904Sdim uint32_t cmdsize; 561212904Sdim uint32_t sub_library; 562212904Sdim }; 563212904Sdim 564212904Sdim struct prebound_dylib_command { 565212904Sdim uint32_t cmd; 566212904Sdim uint32_t cmdsize; 567212904Sdim uint32_t name; 568212904Sdim uint32_t nmodules; 569212904Sdim uint32_t linked_modules; 570212904Sdim }; 571212904Sdim 572212904Sdim struct dylinker_command { 573212904Sdim uint32_t cmd; 574212904Sdim uint32_t cmdsize; 575212904Sdim uint32_t name; 576212904Sdim }; 577212904Sdim 578212904Sdim struct thread_command { 579212904Sdim uint32_t cmd; 580212904Sdim uint32_t cmdsize; 581212904Sdim }; 582212904Sdim 583212904Sdim struct routines_command { 584212904Sdim uint32_t cmd; 585212904Sdim uint32_t cmdsize; 586212904Sdim uint32_t init_address; 587212904Sdim uint32_t init_module; 588212904Sdim uint32_t reserved1; 589212904Sdim uint32_t reserved2; 590212904Sdim uint32_t reserved3; 591212904Sdim uint32_t reserved4; 592212904Sdim uint32_t reserved5; 593212904Sdim uint32_t reserved6; 594212904Sdim }; 595212904Sdim 596212904Sdim struct routines_command_64 { 597212904Sdim uint32_t cmd; 598212904Sdim uint32_t cmdsize; 599212904Sdim uint64_t init_address; 600212904Sdim uint64_t init_module; 601212904Sdim uint64_t reserved1; 602212904Sdim uint64_t reserved2; 603212904Sdim uint64_t reserved3; 604212904Sdim uint64_t reserved4; 605212904Sdim uint64_t reserved5; 606212904Sdim uint64_t reserved6; 607212904Sdim }; 608212904Sdim 609212904Sdim struct symtab_command { 610212904Sdim uint32_t cmd; 611212904Sdim uint32_t cmdsize; 612212904Sdim uint32_t symoff; 613212904Sdim uint32_t nsyms; 614212904Sdim uint32_t stroff; 615212904Sdim uint32_t strsize; 616212904Sdim }; 617212904Sdim 618212904Sdim struct dysymtab_command { 619212904Sdim uint32_t cmd; 620212904Sdim uint32_t cmdsize; 621212904Sdim uint32_t ilocalsym; 622212904Sdim uint32_t nlocalsym; 623212904Sdim uint32_t iextdefsym; 624212904Sdim uint32_t nextdefsym; 625212904Sdim uint32_t iundefsym; 626212904Sdim uint32_t nundefsym; 627212904Sdim uint32_t tocoff; 628212904Sdim uint32_t ntoc; 629212904Sdim uint32_t modtaboff; 630212904Sdim uint32_t nmodtab; 631212904Sdim uint32_t extrefsymoff; 632212904Sdim uint32_t nextrefsyms; 633212904Sdim uint32_t indirectsymoff; 634212904Sdim uint32_t nindirectsyms; 635212904Sdim uint32_t extreloff; 636212904Sdim uint32_t nextrel; 637212904Sdim uint32_t locreloff; 638212904Sdim uint32_t nlocrel; 639245431Sdim }; 640212904Sdim 641212904Sdim struct dylib_table_of_contents { 642212904Sdim uint32_t symbol_index; 643212904Sdim uint32_t module_index; 644245431Sdim }; 645212904Sdim 646212904Sdim struct dylib_module { 647212904Sdim uint32_t module_name; 648212904Sdim uint32_t iextdefsym; 649212904Sdim uint32_t nextdefsym; 650212904Sdim uint32_t irefsym; 651212904Sdim uint32_t nrefsym; 652212904Sdim uint32_t ilocalsym; 653212904Sdim uint32_t nlocalsym; 654212904Sdim uint32_t iextrel; 655212904Sdim uint32_t nextrel; 656212904Sdim uint32_t iinit_iterm; 657212904Sdim uint32_t ninit_nterm; 658212904Sdim uint32_t objc_module_info_addr; 659212904Sdim uint32_t objc_module_info_size; 660245431Sdim }; 661212904Sdim 662212904Sdim struct dylib_module_64 { 663212904Sdim uint32_t module_name; 664212904Sdim uint32_t iextdefsym; 665212904Sdim uint32_t nextdefsym; 666212904Sdim uint32_t irefsym; 667212904Sdim uint32_t nrefsym; 668212904Sdim uint32_t ilocalsym; 669212904Sdim uint32_t nlocalsym; 670212904Sdim uint32_t iextrel; 671212904Sdim uint32_t nextrel; 672212904Sdim uint32_t iinit_iterm; 673212904Sdim uint32_t ninit_nterm; 674212904Sdim uint32_t objc_module_info_size; 675212904Sdim uint64_t objc_module_info_addr; 676212904Sdim }; 677212904Sdim 678212904Sdim struct dylib_reference { 679212904Sdim uint32_t isym:24, 680212904Sdim flags:8; 681212904Sdim }; 682212904Sdim 683212904Sdim 684212904Sdim struct twolevel_hints_command { 685212904Sdim uint32_t cmd; 686212904Sdim uint32_t cmdsize; 687212904Sdim uint32_t offset; 688212904Sdim uint32_t nhints; 689212904Sdim }; 690212904Sdim 691212904Sdim struct twolevel_hint { 692212904Sdim uint32_t isub_image:8, 693212904Sdim itoc:24; 694212904Sdim }; 695212904Sdim 696212904Sdim struct prebind_cksum_command { 697212904Sdim uint32_t cmd; 698212904Sdim uint32_t cmdsize; 699212904Sdim uint32_t cksum; 700212904Sdim }; 701212904Sdim 702212904Sdim struct uuid_command { 703212904Sdim uint32_t cmd; 704212904Sdim uint32_t cmdsize; 705212904Sdim uint8_t uuid[16]; 706212904Sdim }; 707212904Sdim 708212904Sdim struct rpath_command { 709212904Sdim uint32_t cmd; 710212904Sdim uint32_t cmdsize; 711212904Sdim uint32_t path; 712212904Sdim }; 713212904Sdim 714212904Sdim struct linkedit_data_command { 715212904Sdim uint32_t cmd; 716212904Sdim uint32_t cmdsize; 717212904Sdim uint32_t dataoff; 718212904Sdim uint32_t datasize; 719212904Sdim }; 720212904Sdim 721263509Sdim struct data_in_code_entry { 722263509Sdim uint32_t offset; 723263509Sdim uint16_t length; 724263509Sdim uint16_t kind; 725263509Sdim }; 726263509Sdim 727263509Sdim struct source_version_command { 728263509Sdim uint32_t cmd; 729263509Sdim uint32_t cmdsize; 730263509Sdim uint64_t version; 731263509Sdim }; 732263509Sdim 733212904Sdim struct encryption_info_command { 734212904Sdim uint32_t cmd; 735212904Sdim uint32_t cmdsize; 736212904Sdim uint32_t cryptoff; 737212904Sdim uint32_t cryptsize; 738212904Sdim uint32_t cryptid; 739212904Sdim }; 740212904Sdim 741226890Sdim struct version_min_command { 742226890Sdim uint32_t cmd; 743226890Sdim uint32_t cmdsize; 744226890Sdim uint32_t version; 745226890Sdim uint32_t reserved; 746226890Sdim }; 747226890Sdim 748212904Sdim struct dyld_info_command { 749212904Sdim uint32_t cmd; 750212904Sdim uint32_t cmdsize; 751212904Sdim uint32_t rebase_off; 752212904Sdim uint32_t rebase_size; 753212904Sdim uint32_t bind_off; 754212904Sdim uint32_t bind_size; 755212904Sdim uint32_t weak_bind_off; 756212904Sdim uint32_t weak_bind_size; 757212904Sdim uint32_t lazy_bind_off; 758212904Sdim uint32_t lazy_bind_size; 759212904Sdim uint32_t export_off; 760212904Sdim uint32_t export_size; 761212904Sdim }; 762212904Sdim 763263509Sdim struct linker_options_command { 764263509Sdim uint32_t cmd; 765263509Sdim uint32_t cmdsize; 766263509Sdim uint32_t count; 767263509Sdim }; 768263509Sdim 769212904Sdim struct symseg_command { 770212904Sdim uint32_t cmd; 771212904Sdim uint32_t cmdsize; 772212904Sdim uint32_t offset; 773212904Sdim uint32_t size; 774212904Sdim }; 775212904Sdim 776212904Sdim struct ident_command { 777212904Sdim uint32_t cmd; 778212904Sdim uint32_t cmdsize; 779212904Sdim }; 780212904Sdim 781212904Sdim struct fvmfile_command { 782212904Sdim uint32_t cmd; 783212904Sdim uint32_t cmdsize; 784212904Sdim uint32_t name; 785212904Sdim uint32_t header_addr; 786212904Sdim }; 787212904Sdim 788263509Sdim struct tlv_descriptor_32 { 789263509Sdim uint32_t thunk; 790263509Sdim uint32_t key; 791263509Sdim uint32_t offset; 792263509Sdim }; 793212904Sdim 794263509Sdim struct tlv_descriptor_64 { 795263509Sdim uint64_t thunk; 796263509Sdim uint64_t key; 797263509Sdim uint64_t offset; 798263509Sdim }; 799263509Sdim 800263509Sdim struct tlv_descriptor { 801263509Sdim uintptr_t thunk; 802263509Sdim uintptr_t key; 803263509Sdim uintptr_t offset; 804263509Sdim }; 805263509Sdim 806263509Sdim struct entry_point_command { 807263509Sdim uint32_t cmd; 808263509Sdim uint32_t cmdsize; 809263509Sdim uint64_t entryoff; 810263509Sdim uint64_t stacksize; 811263509Sdim }; 812263509Sdim 813263509Sdim 814212904Sdim // Structs from <mach-o/fat.h> 815212904Sdim struct fat_header { 816212904Sdim uint32_t magic; 817212904Sdim uint32_t nfat_arch; 818212904Sdim }; 819212904Sdim 820212904Sdim struct fat_arch { 821212904Sdim uint32_t cputype; 822212904Sdim uint32_t cpusubtype; 823212904Sdim uint32_t offset; 824212904Sdim uint32_t size; 825212904Sdim uint32_t align; 826212904Sdim }; 827212904Sdim 828263509Sdim // Structs from <mach-o/reloc.h> 829263509Sdim struct relocation_info { 830263509Sdim int32_t r_address; 831263509Sdim uint32_t r_symbolnum:24, 832263509Sdim r_pcrel:1, 833263509Sdim r_length:2, 834263509Sdim r_extern:1, 835263509Sdim r_type:4; 836263509Sdim }; 837263509Sdim 838263509Sdim struct scattered_relocation_info { 839263509Sdim#if defined(BYTE_ORDER) && defined(BIG_ENDIAN) && (BYTE_ORDER == BIG_ENDIAN) 840263509Sdim uint32_t r_scattered:1, 841263509Sdim r_pcrel:1, 842263509Sdim r_length:2, 843263509Sdim r_type:4, 844263509Sdim r_address:24; 845263509Sdim#else 846263509Sdim uint32_t r_address:24, 847263509Sdim r_type:4, 848263509Sdim r_length:2, 849263509Sdim r_pcrel:1, 850263509Sdim r_scattered:1; 851263509Sdim#endif 852263509Sdim int32_t r_value; 853263509Sdim }; 854263509Sdim 855263509Sdim // Structs NOT from <mach-o/reloc.h>, but that make LLVM's life easier 856263509Sdim struct any_relocation_info { 857263509Sdim uint32_t r_word0, r_word1; 858263509Sdim }; 859263509Sdim 860263509Sdim // Structs from <mach-o/nlist.h> 861212904Sdim struct nlist { 862212904Sdim uint32_t n_strx; 863212904Sdim uint8_t n_type; 864212904Sdim uint8_t n_sect; 865212904Sdim int16_t n_desc; 866212904Sdim uint32_t n_value; 867212904Sdim }; 868212904Sdim 869212904Sdim struct nlist_64 { 870212904Sdim uint32_t n_strx; 871212904Sdim uint8_t n_type; 872212904Sdim uint8_t n_sect; 873212904Sdim uint16_t n_desc; 874212904Sdim uint64_t n_value; 875212904Sdim }; 876212904Sdim 877212904Sdim // Get/Set functions from <mach-o/nlist.h> 878218893Sdim 879263509Sdim static inline uint16_t GET_LIBRARY_ORDINAL(uint16_t n_desc) { 880212904Sdim return (((n_desc) >> 8u) & 0xffu); 881212904Sdim } 882218893Sdim 883263509Sdim static inline void SET_LIBRARY_ORDINAL(uint16_t &n_desc, uint8_t ordinal) { 884212904Sdim n_desc = (((n_desc) & 0x00ff) | (((ordinal) & 0xff) << 8)); 885212904Sdim } 886212904Sdim 887263509Sdim static inline uint8_t GET_COMM_ALIGN (uint16_t n_desc) { 888212904Sdim return (n_desc >> 8u) & 0x0fu; 889212904Sdim } 890218893Sdim 891263509Sdim static inline void SET_COMM_ALIGN (uint16_t &n_desc, uint8_t align) { 892212904Sdim n_desc = ((n_desc & 0xf0ffu) | ((align & 0x0fu) << 8u)); 893212904Sdim } 894212904Sdim 895203954Srdivacky // Enums from <mach/machine.h> 896263509Sdim enum LLVM_ENUM_INT_TYPE(uint32_t) { 897203954Srdivacky // Capability bits used in the definition of cpu_type. 898263509Sdim CPU_ARCH_MASK = 0xff000000, // Mask for architecture bits 899263509Sdim CPU_ARCH_ABI64 = 0x01000000 // 64 bit ABI 900263509Sdim }; 901218893Sdim 902263509Sdim // Constants for the cputype field. 903263509Sdim enum CPUType { 904263509Sdim CPU_TYPE_ANY = -1, 905263509Sdim CPU_TYPE_X86 = 7, 906263509Sdim CPU_TYPE_I386 = CPU_TYPE_X86, 907263509Sdim CPU_TYPE_X86_64 = CPU_TYPE_X86 | CPU_ARCH_ABI64, 908263509Sdim /* CPU_TYPE_MIPS = 8, */ 909263509Sdim CPU_TYPE_MC98000 = 10, // Old Motorola PowerPC 910263509Sdim CPU_TYPE_ARM = 12, 911263509Sdim CPU_TYPE_SPARC = 14, 912263509Sdim CPU_TYPE_POWERPC = 18, 913263509Sdim CPU_TYPE_POWERPC64 = CPU_TYPE_POWERPC | CPU_ARCH_ABI64 914263509Sdim }; 915203954Srdivacky 916263509Sdim enum LLVM_ENUM_INT_TYPE(uint32_t) { 917263509Sdim // Capability bits used in the definition of cpusubtype. 918263509Sdim CPU_SUB_TYPE_MASK = 0xff000000, // Mask for architecture bits 919263509Sdim CPU_SUB_TYPE_LIB64 = 0x80000000, // 64 bit libraries 920203954Srdivacky 921263509Sdim // Special CPU subtype constants. 922263509Sdim CPU_SUBTYPE_MULTIPLE = ~0u 923263509Sdim }; 924218893Sdim 925263509Sdim // Constants for the cpusubtype field. 926263509Sdim enum CPUSubTypeX86 { 927263509Sdim CPU_SUBTYPE_I386_ALL = 3, 928263509Sdim CPU_SUBTYPE_386 = 3, 929263509Sdim CPU_SUBTYPE_486 = 4, 930263509Sdim CPU_SUBTYPE_486SX = 0x84, 931263509Sdim CPU_SUBTYPE_586 = 5, 932263509Sdim CPU_SUBTYPE_PENT = CPU_SUBTYPE_586, 933263509Sdim CPU_SUBTYPE_PENTPRO = 0x16, 934263509Sdim CPU_SUBTYPE_PENTII_M3 = 0x36, 935263509Sdim CPU_SUBTYPE_PENTII_M5 = 0x56, 936263509Sdim CPU_SUBTYPE_CELERON = 0x67, 937263509Sdim CPU_SUBTYPE_CELERON_MOBILE = 0x77, 938263509Sdim CPU_SUBTYPE_PENTIUM_3 = 0x08, 939263509Sdim CPU_SUBTYPE_PENTIUM_3_M = 0x18, 940263509Sdim CPU_SUBTYPE_PENTIUM_3_XEON = 0x28, 941263509Sdim CPU_SUBTYPE_PENTIUM_M = 0x09, 942263509Sdim CPU_SUBTYPE_PENTIUM_4 = 0x0a, 943263509Sdim CPU_SUBTYPE_PENTIUM_4_M = 0x1a, 944263509Sdim CPU_SUBTYPE_ITANIUM = 0x0b, 945263509Sdim CPU_SUBTYPE_ITANIUM_2 = 0x1b, 946263509Sdim CPU_SUBTYPE_XEON = 0x0c, 947263509Sdim CPU_SUBTYPE_XEON_MP = 0x1c, 948218893Sdim 949263509Sdim CPU_SUBTYPE_X86_ALL = 3, 950263509Sdim CPU_SUBTYPE_X86_64_ALL = 3, 951263509Sdim CPU_SUBTYPE_X86_ARCH1 = 4, 952263509Sdim CPU_SUBTYPE_X86_64_H = 8 953263509Sdim }; 954263509Sdim static inline int CPU_SUBTYPE_INTEL(int Family, int Model) { 955263509Sdim return Family | (Model << 4); 956263509Sdim } 957263509Sdim static inline int CPU_SUBTYPE_INTEL_FAMILY(CPUSubTypeX86 ST) { 958263509Sdim return ((int)ST) & 0x0f; 959263509Sdim } 960263509Sdim static inline int CPU_SUBTYPE_INTEL_MODEL(CPUSubTypeX86 ST) { 961263509Sdim return ((int)ST) >> 4; 962263509Sdim } 963263509Sdim enum { 964263509Sdim CPU_SUBTYPE_INTEL_FAMILY_MAX = 15, 965263509Sdim CPU_SUBTYPE_INTEL_MODEL_ALL = 0 966263509Sdim }; 967203954Srdivacky 968263509Sdim enum CPUSubTypeARM { 969263509Sdim CPU_SUBTYPE_ARM_ALL = 0, 970263509Sdim CPU_SUBTYPE_ARM_V4T = 5, 971263509Sdim CPU_SUBTYPE_ARM_V6 = 6, 972263509Sdim CPU_SUBTYPE_ARM_V5 = 7, 973263509Sdim CPU_SUBTYPE_ARM_V5TEJ = 7, 974263509Sdim CPU_SUBTYPE_ARM_XSCALE = 8, 975263509Sdim CPU_SUBTYPE_ARM_V7 = 9, 976263509Sdim CPU_SUBTYPE_ARM_V7F = 10, 977263509Sdim CPU_SUBTYPE_ARM_V7S = 11, 978263509Sdim CPU_SUBTYPE_ARM_V7K = 12, 979263509Sdim CPU_SUBTYPE_ARM_V6M = 14, 980263509Sdim CPU_SUBTYPE_ARM_V7M = 15, 981263509Sdim CPU_SUBTYPE_ARM_V7EM = 16 982263509Sdim }; 983218893Sdim 984263509Sdim enum CPUSubTypeSPARC { 985263509Sdim CPU_SUBTYPE_SPARC_ALL = 0 986203954Srdivacky }; 987263509Sdim 988263509Sdim enum CPUSubTypePowerPC { 989263509Sdim CPU_SUBTYPE_POWERPC_ALL = 0, 990263509Sdim CPU_SUBTYPE_POWERPC_601 = 1, 991263509Sdim CPU_SUBTYPE_POWERPC_602 = 2, 992263509Sdim CPU_SUBTYPE_POWERPC_603 = 3, 993263509Sdim CPU_SUBTYPE_POWERPC_603e = 4, 994263509Sdim CPU_SUBTYPE_POWERPC_603ev = 5, 995263509Sdim CPU_SUBTYPE_POWERPC_604 = 6, 996263509Sdim CPU_SUBTYPE_POWERPC_604e = 7, 997263509Sdim CPU_SUBTYPE_POWERPC_620 = 8, 998263509Sdim CPU_SUBTYPE_POWERPC_750 = 9, 999263509Sdim CPU_SUBTYPE_POWERPC_7400 = 10, 1000263509Sdim CPU_SUBTYPE_POWERPC_7450 = 11, 1001263509Sdim CPU_SUBTYPE_POWERPC_970 = 100, 1002263509Sdim 1003263509Sdim CPU_SUBTYPE_MC980000_ALL = CPU_SUBTYPE_POWERPC_ALL, 1004263509Sdim CPU_SUBTYPE_MC98601 = CPU_SUBTYPE_POWERPC_601 1005263509Sdim }; 1006203954Srdivacky } // end namespace MachO 1007203954Srdivacky} // end namespace llvm 1008203954Srdivacky 1009203954Srdivacky#endif 1010