1 /* 2 * Copyright (c) 1999 Apple Computer, Inc. All rights reserved. 3 * 4 * @APPLE_LICENSE_HEADER_START@ 5 * 6 * This file contains Original Code and/or Modifications of Original Code 7 * as defined in and that are subject to the Apple Public Source License 8 * Version 2.0 (the 'License'). You may not use this file except in 9 * compliance with the License. Please obtain a copy of the License at 10 * http://www.opensource.apple.com/apsl/ and read it before using this 11 * file. 12 * 13 * The Original Code and all software distributed under the License are 14 * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER 15 * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES, 16 * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY, 17 * FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT. 18 * Please see the License for the specific language governing rights and 19 * limitations under the License. 20 * 21 * @APPLE_LICENSE_HEADER_END@ 22 */ 23 #ifndef _MACH_O_ARCH_H_ 24 #define _MACH_O_ARCH_H_ 25 /* 26 * Copyright (c) 1997 Apple Computer, Inc. 27 * 28 * Functions that deal with information about architectures. 29 * 30 */ 31 32 #include <stdint.h> 33 #include <mach/machine.h> 34 #include <architecture/byte_order.h> 35 36 /* The NXArchInfo structs contain the architectures symbolic name 37 * (such as "ppc"), its CPU type and CPU subtype as defined in 38 * mach/machine.h, the byte order for the architecture, and a 39 * describing string (such as "PowerPC"). 40 * There will both be entries for specific CPUs (such as ppc604e) as 41 * well as generic "family" entries (such as ppc). 42 */ 43 typedef struct { 44 const char *name; 45 cpu_type_t cputype; 46 cpu_subtype_t cpusubtype; 47 enum NXByteOrder byteorder; 48 const char *description; 49 } NXArchInfo; 50 51 #if __cplusplus 52 extern "C" { 53 #endif /* __cplusplus */ 54 55 /* NXGetAllArchInfos() returns a pointer to an array of all known 56 * NXArchInfo structures. The last NXArchInfo is marked by a NULL name. 57 */ 58 extern const NXArchInfo *NXGetAllArchInfos(void); 59 60 /* NXGetLocalArchInfo() returns the NXArchInfo for the local host, or NULL 61 * if none is known. 62 */ 63 extern const NXArchInfo *NXGetLocalArchInfo(void); 64 65 /* NXGetArchInfoFromName() and NXGetArchInfoFromCpuType() return the 66 * NXArchInfo from the architecture's name or cputype/cpusubtype 67 * combination. A cpusubtype of CPU_SUBTYPE_MULTIPLE can be used 68 * to request the most general NXArchInfo known for the given cputype. 69 * NULL is returned if no matching NXArchInfo can be found. 70 */ 71 extern const NXArchInfo *NXGetArchInfoFromName(const char *name); 72 extern const NXArchInfo *NXGetArchInfoFromCpuType(cpu_type_t cputype, 73 cpu_subtype_t cpusubtype); 74 75 /* NXFindBestFatArch() is passed a cputype and cpusubtype and a set of 76 * fat_arch structs and selects the best one that matches (if any) and returns 77 * a pointer to that fat_arch struct (or NULL). The fat_arch structs must be 78 * in the host byte order and correct such that the fat_archs really points to 79 * enough memory for nfat_arch structs. It is possible that this routine could 80 * fail if new cputypes or cpusubtypes are added and an old version of this 81 * routine is used. But if there is an exact match between the cputype and 82 * cpusubtype and one of the fat_arch structs this routine will always succeed. 83 */ 84 extern struct fat_arch *NXFindBestFatArch(cpu_type_t cputype, 85 cpu_subtype_t cpusubtype, 86 struct fat_arch *fat_archs, 87 uint32_t nfat_archs); 88 89 /* NXCombineCpuSubtypes() returns the resulting cpusubtype when combining two 90 * different cpusubtypes for the specified cputype. If the two cpusubtypes 91 * can't be combined (the specific subtypes are mutually exclusive) -1 is 92 * returned indicating it is an error to combine them. This can also fail and 93 * return -1 if new cputypes or cpusubtypes are added and an old version of 94 * this routine is used. But if the cpusubtypes are the same they can always 95 * be combined and this routine will return the cpusubtype pass in. 96 */ 97 extern cpu_subtype_t NXCombineCpuSubtypes(cpu_type_t cputype, 98 cpu_subtype_t cpusubtype1, 99 cpu_subtype_t cpusubtype2); 100 101 #if __cplusplus 102 } 103 #endif /* __cplusplus */ 104 105 #endif /* _MACH_O_ARCH_H_ */ 106