source: trunk/kLdr/kLdrModMachO.h@ 2949

Last change on this file since 2949 was 2949, checked in by bird, 19 years ago

Work in progress.

File size: 8.0 KB
Line 
1/* $Id $ */
2/** @file
3 * Mach-0 structures, types and defines.
4 */
5
6#ifndef __kLdrModMachO_h__
7#define __kLdrModMachO_h__
8
9
10#ifndef IMAGE_FAT_SIGNATURE
11/** The FAT signature (universal binaries). */
12# define IMAGE_FAT_SIGNATURE UINT32_C(0xcafebabe)
13#endif
14#ifndef IMAGE_FAT_SIGNATURE_OE
15/** The FAT signature (universal binaries), other endian. */
16# define IMAGE_FAT_SIGNATURE_OE UINT32_C(0xbebafeca)
17#endif
18
19/**
20 * The fat header found at the start of universal binaries.
21 * It is followed by \a nfat_arch numbers of \a fat_arch structures.
22 */
23typedef struct fat_header
24{
25 uint32_t magic;
26 uint32_t nfat_arch;
27} fat_header;
28
29/**
30 * Description of fat file item.
31 */
32struct fat_arch
33{
34 int32_t cputype;
35 int32_t cpusubtype;
36 uint32_t offset;
37 uint32_t size;
38 uint32_t align; /**< Power of 2. */
39} fat_arch;
40
41
42
43#ifdef IMAGE_MACHO32_SIGNATURE
44/** The 32-bit Mach-O signature. */
45# define IMAGE_MACHO32_SIGNATURE UINT32_C(0xfeedface)
46#endif
47#ifdef IMAGE_MACHO32_SIGNATURE_OE
48/** The 32-bit Mach-O signature, other endian. */
49# define IMAGE_MACHO32_SIGNATURE_OE UINT32_C(0xcefaedfe)
50#endif
51#define MH_MAGIC IMAGE_MACHO32_SIGNATURE
52#define MH_CIGAM IMAGE_MACHO32_SIGNATURE_OE
53
54/**
55 * 32-bit Mach-O header.
56 * This is followed by \a ncmds number of load commands.
57 * @see mach_header_64
58 */
59typedef struct mach_header_32
60{
61 uint32_t magic;
62 int32_t cputype;
63 int32_t cpusubtype;
64 uint32_t filetype;
65 uint32_t ncmds;
66 uint32_t sizeofcmds;
67 uint32_t flags;
68} mach_header_32;
69
70
71
72#ifdef IMAGE_MACHO64_SIGNATURE
73/** The 64-bit Mach-O signature. */
74# define IMAGE_MACHO64_SIGNATURE UINT32_C(0xfeedfacf)
75#endif
76#ifdef IMAGE_MACHO64_SIGNATURE_OE
77/** The 64-bit Mach-O signature, other endian. */
78# define IMAGE_MACHO64_SIGNATURE_OE UINT32_C(0xfefaedfe)
79#endif
80#define MH_MAGIC_64 IMAGE_MACHO64_SIGNATURE
81#define MH_CIGAM_64 IMAGE_MACHO64_SIGNATURE_OE
82
83/**
84 * 64-bit Mach-O header.
85 * This is followed by \a ncmds number of load commands.
86 * @see mach_header
87 */
88typedef struct mach_header_64
89{
90 uint32_t magic;
91 int32_t cputype;
92 int32_t cpusubtype;
93 uint32_t filetype;
94 uint32_t ncmds;
95 uint32_t sizeofcmds;
96 uint32_t flags;
97 uint32_t reserved; /**< (for proper struct and command alignment I guess) */
98} mach_header_64;
99
100
101
102/** @name CPU types / bits.
103 * @{
104 */
105#define CPU_ARCH_MASK INT32_C(0xff000000)
106#define CPU_ARCH_ABI64 INT32_C(0x01000000)
107#define CPU_TYPE_ANY INT32_C(-1)
108#define CPU_TYPE_VAX INT32_C(1)
109#define CPU_TYPE_MC680x0 INT32_C(6)
110#define CPU_TYPE_X86 INT32_C(7)
111#define CPU_TYPE_I386 CPU_TYPE_X86
112#define CPU_TYPE_X86_64 (CPU_TYPE_X86 | CPU_ARCH_ABI64)
113#define CPU_TYPE_MC98000 INT32_C(10)
114#define CPU_TYPE_HPPA INT32_C(11)
115#define CPU_TYPE_MC88000 INT32_C(13)
116#define CPU_TYPE_SPARC INT32_C(14)
117#define CPU_TYPE_I860 INT32_C(15)
118#define CPU_TYPE_POWERPC INT32_C(18)
119#define CPU_TYPE_POWERPC64 (CPU_TYPE_POWERPC | CPU_ARCH_ABI64)
120/** @} */
121
122/** @name CPU subtypes
123 * @{ */
124#define CPU_SUBTYPE_MULTIPLE INT32_C(-1)
125#define CPU_SUBTYPE_LITTLE_ENDIAN INT32_C(0) /**< figure this one out. */
126#define CPU_SUBTYPE_BIG_ENDIAN INT32_C(1) /**< ditto */
127
128/* VAX */
129#define CPU_SUBTYPE_VAX_ALL INT32_C(0)
130#define CPU_SUBTYPE_VAX780 INT32_C(1)
131#define CPU_SUBTYPE_VAX785 INT32_C(2)
132#define CPU_SUBTYPE_VAX750 INT32_C(3)
133#define CPU_SUBTYPE_VAX730 INT32_C(4)
134#define CPU_SUBTYPE_UVAXI INT32_C(5)
135#define CPU_SUBTYPE_UVAXII INT32_C(6)
136#define CPU_SUBTYPE_VAX8200 INT32_C(7)
137#define CPU_SUBTYPE_VAX8500 INT32_C(8)
138#define CPU_SUBTYPE_VAX8600 INT32_C(9)
139#define CPU_SUBTYPE_VAX8650 INT32_C(10)
140#define CPU_SUBTYPE_VAX8800 INT32_C(11)
141#define CPU_SUBTYPE_UVAXIII INT32_C(12)
142
143/* MC680xx */
144#define CPU_SUBTYPE_MC680x0_ALL INT32_C(1)
145#define CPU_SUBTYPE_MC68030 INT32_C(1)
146#define CPU_SUBTYPE_MC68040 INT32_C(2)
147#define CPU_SUBTYPE_MC68030_ONLY INT32_C(3)
148
149/* I386 */
150#define CPU_SUBTYPE_INTEL(fam, model) ( (int32_t)(((model) << 4) | (fam)) )
151#define CPU_SUBTYPE_INTEL_FAMILY(subtype) ( (subtype) & 0xf )
152#define CPU_SUBTYPE_INTEL_MODEL(subtype) ( (subtype) >> 4 )
153#define CPU_SUBTYPE_INTEL_FAMILY_MAX 0xf
154#define CPU_SUBTYPE_INTEL_MODEL_ALL 0
155
156#define CPU_SUBTYPE_I386_ALL CPU_SUBTYPE_INTEL(3, 0)
157#define CPU_SUBTYPE_386 CPU_SUBTYPE_INTEL(3, 0)
158#define CPU_SUBTYPE_486 CPU_SUBTYPE_INTEL(4, 0)
159#define CPU_SUBTYPE_486SX CPU_SUBTYPE_INTEL(4, 8)
160#define CPU_SUBTYPE_586 CPU_SUBTYPE_INTEL(5, 0)
161#define CPU_SUBTYPE_PENT CPU_SUBTYPE_INTEL(5, 0)
162#define CPU_SUBTYPE_PENTPRO CPU_SUBTYPE_INTEL(6, 1)
163#define CPU_SUBTYPE_PENTII_M3 CPU_SUBTYPE_INTEL(6, 3)
164#define CPU_SUBTYPE_PENTII_M5 CPU_SUBTYPE_INTEL(6, 5)
165#define CPU_SUBTYPE_CELERON CPU_SUBTYPE_INTEL(7, 6)
166#define CPU_SUBTYPE_CELERON_MOBILE CPU_SUBTYPE_INTEL(7, 7)
167#define CPU_SUBTYPE_PENTIUM_3 CPU_SUBTYPE_INTEL(8, 0)
168#define CPU_SUBTYPE_PENTIUM_3_M CPU_SUBTYPE_INTEL(8, 1)
169#define CPU_SUBTYPE_PENTIUM_3_XEON CPU_SUBTYPE_INTEL(8, 2)
170#define CPU_SUBTYPE_PENTIUM_M CPU_SUBTYPE_INTEL(9, 0)
171#define CPU_SUBTYPE_PENTIUM_4 CPU_SUBTYPE_INTEL(10, 0)
172#define CPU_SUBTYPE_PENTIUM_4_M CPU_SUBTYPE_INTEL(10, 1)
173#define CPU_SUBTYPE_ITANIUM CPU_SUBTYPE_INTEL(11, 0)
174#define CPU_SUBTYPE_ITANIUM_2 CPU_SUBTYPE_INTEL(11, 1)
175#define CPU_SUBTYPE_XEON CPU_SUBTYPE_INTEL(12, 0)
176#define CPU_SUBTYPE_XEON_MP CPU_SUBTYPE_INTEL(12, 1)
177
178/* X86 */
179#define CPU_SUBTYPE_X86_ALL INT32_C(3) /* CPU_SUBTYPE_I386_ALL */
180#define CPU_SUBTYPE_X86_64_ALL INT32_C(3) /* CPU_SUBTYPE_I386_ALL */
181#define CPU_SUBTYPE_X86_ARCH1 INT32_C(4) /* CPU_SUBTYPE_I486_ALL */
182
183/* MIPS */
184#define CPU_SUBTYPE_MIPS_ALL INT32_C(0)
185#define CPU_SUBTYPE_MIPS_R2300 INT32_C(1)
186#define CPU_SUBTYPE_MIPS_R2600 INT32_C(2)
187#define CPU_SUBTYPE_MIPS_R2800 INT32_C(3)
188#define CPU_SUBTYPE_MIPS_R2000a INT32_C(4)
189#define CPU_SUBTYPE_MIPS_R2000 INT32_C(5)
190#define CPU_SUBTYPE_MIPS_R3000a INT32_C(6)
191#define CPU_SUBTYPE_MIPS_R3000 INT32_C(7)
192
193/* MC98000 (PowerPC) */
194#define CPU_SUBTYPE_MC98000_ALL INT32_C(0)
195#define CPU_SUBTYPE_MC98601 INT32_C(1)
196
197/* HP-PA */
198#define CPU_SUBTYPE_HPPA_ALL INT32_C(0)
199#define CPU_SUBTYPE_HPPA_7100 INT32_C(0)
200#define CPU_SUBTYPE_HPPA_7100LC INT32_C(1)
201
202/* MC88000 */
203#define CPU_SUBTYPE_MC88000_ALL INT32_C(0)
204#define CPU_SUBTYPE_MC88100 INT32_C(1)
205#define CPU_SUBTYPE_MC88110 INT32_C(2)
206
207/* SPARC */
208#define CPU_SUBTYPE_SPARC_ALL INT32_C(0)
209
210/* I860 */
211#define CPU_SUBTYPE_I860_ALL INT32_C(0)
212#define CPU_SUBTYPE_I860_860 INT32_C(1)
213
214/* PowerPC */
215#define CPU_SUBTYPE_POWERPC_ALL INT32_C(0)
216#define CPU_SUBTYPE_POWERPC_601 INT32_C(1)
217#define CPU_SUBTYPE_POWERPC_602 INT32_C(2)
218#define CPU_SUBTYPE_POWERPC_603 INT32_C(3)
219#define CPU_SUBTYPE_POWERPC_603e INT32_C(4)
220#define CPU_SUBTYPE_POWERPC_603ev INT32_C(5)
221#define CPU_SUBTYPE_POWERPC_604 INT32_C(6)
222#define CPU_SUBTYPE_POWERPC_604e INT32_C(7)
223#define CPU_SUBTYPE_POWERPC_620 INT32_C(8)
224#define CPU_SUBTYPE_POWERPC_750 INT32_C(9)
225#define CPU_SUBTYPE_POWERPC_7400 INT32_C(10)
226#define CPU_SUBTYPE_POWERPC_7450 INT32_C(11)
227#define CPU_SUBTYPE_POWERPC_Max INT32_C(10)
228#define CPU_SUBTYPE_POWERPC_SCVger INT32_C(11)
229#define CPU_SUBTYPE_POWERPC_970 INT32_C(100)
230
231/** @} */
232
233#endif
234
Note: See TracBrowser for help on using the repository browser.