Replaced direct access to the WND structure by corresponding calls to
[wine] / include / peexe.h
1 /*
2  * Copyright  Eric Youngdale (1994)
3  */
4 #ifndef __WINE_PEEXE_H
5 #define __WINE_PEEXE_H
6
7 #include "wintypes.h"
8
9 typedef struct _IMAGE_FILE_HEADER {
10         WORD    Machine;                        /* 00 */
11         WORD    NumberOfSections;               /* 02 */
12         DWORD   TimeDateStamp;                  /* 04 */
13         DWORD   PointerToSymbolTable;           /* 08 */
14         DWORD   NumberOfSymbols;                /* 0c */
15         WORD    SizeOfOptionalHeader;           /* 10 */
16         WORD    Characteristics;                /* 12 */
17 } IMAGE_FILE_HEADER,*PIMAGE_FILE_HEADER;
18
19 #define IMAGE_SIZEOF_FILE_HEADER        20
20
21 /* These defines describe the meanings of the bits in the Characteristics
22    field */
23
24 #define IMAGE_FILE_RELOCS_STRIPPED      1 /* No relocation info */
25 #define IMAGE_FILE_EXECUTABLE_IMAGE     2
26 #define IMAGE_FILE_LINE_NUMS_STRIPPED   4
27 #define IMAGE_FILE_LOCAL_SYMS_STRIPPED  8
28 #define IMAGE_FILE_16BIT_MACHINE        0x40
29 #define IMAGE_FILE_BYTES_REVERSED_LO    0x80
30 #define IMAGE_FILE_32BIT_MACHINE        0x100
31 #define IMAGE_FILE_DEBUG_STRIPPED       0x200
32 #define IMAGE_FILE_SYSTEM               0x1000
33 #define IMAGE_FILE_DLL                  0x2000
34 #define IMAGE_FILE_BYTES_REVERSED_HI    0x8000
35
36 /* These are the settings of the Machine field. */
37 #define IMAGE_FILE_MACHINE_UNKNOWN      0
38 #define IMAGE_FILE_MACHINE_I860         0x14d
39 #define IMAGE_FILE_MACHINE_I386         0x14c
40 #define IMAGE_FILE_MACHINE_R3000        0x162
41 #define IMAGE_FILE_MACHINE_R4000        0x166
42 #define IMAGE_FILE_MACHINE_R10000       0x168
43 #define IMAGE_FILE_MACHINE_ALPHA        0x184
44 #define IMAGE_FILE_MACHINE_POWERPC      0x1F0  
45
46 typedef struct _IMAGE_DATA_DIRECTORY
47 {
48         DWORD   VirtualAddress;
49         DWORD   Size;
50 } IMAGE_DATA_DIRECTORY,*PIMAGE_DATA_DIRECTORY;
51
52 #define IMAGE_NUMBEROF_DIRECTORY_ENTRIES 16
53
54 /* Optional coff header - used by NT to provide additional information. */
55 typedef struct _IMAGE_OPTIONAL_HEADER
56 {
57         /*
58          * Standard fields.
59          */
60
61         WORD    Magic;                          /* 00 */
62         BYTE    MajorLinkerVersion;             /* 02 */
63         BYTE    MinorLinkerVersion;             /* 03 */
64         DWORD   SizeOfCode;                     /* 04 */
65         DWORD   SizeOfInitializedData;          /* 08 */
66         DWORD   SizeOfUninitializedData;        /* 0C */
67         DWORD   AddressOfEntryPoint;            /* 10 */
68         DWORD   BaseOfCode;                     /* 14 */
69         DWORD   BaseOfData;                     /* 18 */
70
71         /*
72          * NT additional fields.
73          */
74
75         DWORD   ImageBase;                      /* 1C */
76         DWORD   SectionAlignment;               /* 20 */
77         DWORD   FileAlignment;                  /* 24 */
78         WORD    MajorOperatingSystemVersion;    /* 28 */
79         WORD    MinorOperatingSystemVersion;    /* 2A */
80         WORD    MajorImageVersion;              /* 2C */
81         WORD    MinorImageVersion;              /* 2E */
82         WORD    MajorSubsystemVersion;          /* 30 */
83         WORD    MinorSubsystemVersion;          /* 32 */
84         DWORD   Reserved1;                      /* 34 */
85         DWORD   SizeOfImage;                    /* 38 */
86         DWORD   SizeOfHeaders;                  /* 3C */
87         DWORD   CheckSum;                       /* 40 */
88         WORD    Subsystem;                      /* 44 */
89         WORD    DllCharacteristics;             /* 46 */
90         DWORD   SizeOfStackReserve;             /* 48 */
91         DWORD   SizeOfStackCommit;              /* 4C */
92         DWORD   SizeOfHeapReserve;              /* 50 */
93         DWORD   SizeOfHeapCommit;               /* 54 */
94         DWORD   LoaderFlags;                    /* 58 */
95         DWORD   NumberOfRvaAndSizes;            /* 5C */
96                                                 /* 60: */
97         IMAGE_DATA_DIRECTORY DataDirectory[IMAGE_NUMBEROF_DIRECTORY_ENTRIES];
98 } IMAGE_OPTIONAL_HEADER,*PIMAGE_OPTIONAL_HEADER;
99
100 /* Possible Magic values */
101 #define IMAGE_NT_OPTIONAL_HDR_MAGIC        0x10b
102 #define IMAGE_ROM_OPTIONAL_HDR_MAGIC       0x107
103
104 /* These are indexes into the DataDirectory array */
105 #define IMAGE_FILE_EXPORT_DIRECTORY             0
106 #define IMAGE_FILE_IMPORT_DIRECTORY             1
107 #define IMAGE_FILE_RESOURCE_DIRECTORY           2
108 #define IMAGE_FILE_EXCEPTION_DIRECTORY          3
109 #define IMAGE_FILE_SECURITY_DIRECTORY           4
110 #define IMAGE_FILE_BASE_RELOCATION_TABLE        5
111 #define IMAGE_FILE_DEBUG_DIRECTORY              6
112 #define IMAGE_FILE_DESCRIPTION_STRING           7
113 #define IMAGE_FILE_MACHINE_VALUE                8  /* Mips */
114 #define IMAGE_FILE_THREAD_LOCAL_STORAGE         9
115 #define IMAGE_FILE_CALLBACK_DIRECTORY           10
116
117 /* Directory Entries, indices into the DataDirectory array */
118
119 #define IMAGE_DIRECTORY_ENTRY_EXPORT            0
120 #define IMAGE_DIRECTORY_ENTRY_IMPORT            1
121 #define IMAGE_DIRECTORY_ENTRY_RESOURCE          2
122 #define IMAGE_DIRECTORY_ENTRY_EXCEPTION         3
123 #define IMAGE_DIRECTORY_ENTRY_SECURITY          4
124 #define IMAGE_DIRECTORY_ENTRY_BASERELOC         5
125 #define IMAGE_DIRECTORY_ENTRY_DEBUG             6
126 #define IMAGE_DIRECTORY_ENTRY_COPYRIGHT         7
127 #define IMAGE_DIRECTORY_ENTRY_GLOBALPTR         8   /* (MIPS GP) */
128 #define IMAGE_DIRECTORY_ENTRY_TLS               9
129 #define IMAGE_DIRECTORY_ENTRY_LOAD_CONFIG       10
130 #define IMAGE_DIRECTORY_ENTRY_BOUND_IMPORT      11
131 #define IMAGE_DIRECTORY_ENTRY_IAT               12  /* Import Address Table */
132 #define IMAGE_DIRECTORY_ENTRY_DELAY_IMPORT      13
133
134 /* Subsystem Values */
135
136 #define IMAGE_SUBSYSTEM_UNKNOWN         0
137 #define IMAGE_SUBSYSTEM_NATIVE          1
138 #define IMAGE_SUBSYSTEM_WINDOWS_GUI     2       /* Windows GUI subsystem */
139 #define IMAGE_SUBSYSTEM_WINDOWS_CUI     3       /* Windows character subsystem*/
140 #define IMAGE_SUBSYSTEM_OS2_CUI         5
141 #define IMAGE_SUBSYSTEM_POSIX_CUI       7
142
143 typedef struct _IMAGE_NT_HEADERS {
144         DWORD                   Signature;      /* 00: PE\0\0 */
145         IMAGE_FILE_HEADER       FileHeader;     /* 04: Fileheader */
146         IMAGE_OPTIONAL_HEADER   OptionalHeader; /* 18: Optional Header */
147 } IMAGE_NT_HEADERS,*PIMAGE_NT_HEADERS;
148
149
150 #define PE_HEADER(module) \
151     ((IMAGE_NT_HEADERS*)((LPBYTE)(module) + \
152                          (((IMAGE_DOS_HEADER*)(module))->e_lfanew)))
153
154 #define PE_SECTIONS(module) \
155     ((IMAGE_SECTION_HEADER*)((LPBYTE)&PE_HEADER(module)->OptionalHeader + \
156                            PE_HEADER(module)->FileHeader.SizeOfOptionalHeader))
157
158 #define RVA_PTR(module,field) ((LPBYTE)(module) + PE_HEADER(module)->field)
159
160 /* Section header format */
161
162 #define IMAGE_SIZEOF_SHORT_NAME 8
163
164 typedef struct _IMAGE_SECTION_HEADER {
165         BYTE    Name[IMAGE_SIZEOF_SHORT_NAME];  /* 00: */
166         union {
167                 DWORD   PhysicalAddress;        /* 04: */
168                 DWORD   VirtualSize;            /* 04: */
169         } Misc;
170         DWORD   VirtualAddress;                 /* 08: */
171         DWORD   SizeOfRawData;                  /* 0C: */
172         DWORD   PointerToRawData;               /* 10: */
173         DWORD   PointerToRelocations;           /* 14: */
174         DWORD   PointerToLinenumbers;           /* 18: */
175         WORD    NumberOfRelocations;            /* 1C: */
176         WORD    NumberOfLinenumbers;            /* 1E: */
177         DWORD   Characteristics;                /* 20: */
178                                                 /* 24: */
179 } IMAGE_SECTION_HEADER,*PIMAGE_SECTION_HEADER;
180
181 #define IMAGE_SIZEOF_SECTION_HEADER 40
182
183 /* These defines are for the Characteristics bitfield. */
184 /* #define IMAGE_SCN_TYPE_REG                   0x00000000 - Reserved */
185 /* #define IMAGE_SCN_TYPE_DSECT                 0x00000001 - Reserved */
186 /* #define IMAGE_SCN_TYPE_NOLOAD                0x00000002 - Reserved */
187 /* #define IMAGE_SCN_TYPE_GROUP                 0x00000004 - Reserved */
188 /* #define IMAGE_SCN_TYPE_NO_PAD                0x00000008 - Reserved */
189 /* #define IMAGE_SCN_TYPE_COPY                  0x00000010 - Reserved */
190
191 #define IMAGE_SCN_CNT_CODE                      0x00000020
192 #define IMAGE_SCN_CNT_INITIALIZED_DATA          0x00000040
193 #define IMAGE_SCN_CNT_UNINITIALIZED_DATA        0x00000080
194
195 #define IMAGE_SCN_LNK_OTHER                     0x00000100 
196 #define IMAGE_SCN_LNK_INFO                      0x00000200  
197 /* #define      IMAGE_SCN_TYPE_OVER             0x00000400 - Reserved */
198 #define IMAGE_SCN_LNK_REMOVE                    0x00000800
199 #define IMAGE_SCN_LNK_COMDAT                    0x00001000
200
201 /*                                              0x00002000 - Reserved */
202 /* #define IMAGE_SCN_MEM_PROTECTED              0x00004000 - Obsolete */
203 #define IMAGE_SCN_MEM_FARDATA                   0x00008000
204
205 /* #define IMAGE_SCN_MEM_SYSHEAP                0x00010000 - Obsolete */
206 #define IMAGE_SCN_MEM_PURGEABLE                 0x00020000
207 #define IMAGE_SCN_MEM_16BIT                     0x00020000
208 #define IMAGE_SCN_MEM_LOCKED                    0x00040000
209 #define IMAGE_SCN_MEM_PRELOAD                   0x00080000
210
211 #define IMAGE_SCN_ALIGN_1BYTES                  0x00100000
212 #define IMAGE_SCN_ALIGN_2BYTES                  0x00200000
213 #define IMAGE_SCN_ALIGN_4BYTES                  0x00300000
214 #define IMAGE_SCN_ALIGN_8BYTES                  0x00400000
215 #define IMAGE_SCN_ALIGN_16BYTES                 0x00500000  /* Default */
216 #define IMAGE_SCN_ALIGN_32BYTES                 0x00600000
217 #define IMAGE_SCN_ALIGN_64BYTES                 0x00700000
218 /*                                              0x00800000 - Unused */
219
220 #define IMAGE_SCN_LNK_NRELOC_OVFL               0x01000000
221
222
223 #define IMAGE_SCN_MEM_DISCARDABLE               0x02000000
224 #define IMAGE_SCN_MEM_NOT_CACHED                0x04000000
225 #define IMAGE_SCN_MEM_NOT_PAGED                 0x08000000
226 #define IMAGE_SCN_MEM_SHARED                    0x10000000
227 #define IMAGE_SCN_MEM_EXECUTE                   0x20000000
228 #define IMAGE_SCN_MEM_READ                      0x40000000
229 #define IMAGE_SCN_MEM_WRITE                     0x80000000
230
231
232 /* Import name entry */
233 typedef struct _IMAGE_IMPORT_BY_NAME {
234         WORD    Hint;
235         BYTE    Name[1];
236 } IMAGE_IMPORT_BY_NAME,*PIMAGE_IMPORT_BY_NAME;
237
238 /* Import thunk */
239 typedef struct _IMAGE_THUNK_DATA {
240         union {
241                 LPBYTE    ForwarderString;
242                 FARPROC Function;
243                 DWORD     Ordinal;
244                 PIMAGE_IMPORT_BY_NAME   AddressOfData;
245         } u1;
246 } IMAGE_THUNK_DATA,*PIMAGE_THUNK_DATA;
247
248 /* Import module directory */
249
250 typedef struct _IMAGE_IMPORT_DESCRIPTOR {
251         union {
252                 DWORD   Characteristics; /* 0 for terminating null import descriptor  */
253                 PIMAGE_THUNK_DATA OriginalFirstThunk;   /* RVA to original unbound IAT */
254         } u;
255         DWORD   TimeDateStamp;  /* 0 if not bound,
256                                  * -1 if bound, and real date\time stamp
257                                  *    in IMAGE_DIRECTORY_ENTRY_BOUND_IMPORT
258                                  * (new BIND)
259                                  * otherwise date/time stamp of DLL bound to
260                                  * (Old BIND)
261                                  */
262         DWORD   ForwarderChain; /* -1 if no forwarders */
263         DWORD   Name;
264         /* RVA to IAT (if bound this IAT has actual addresses) */
265         PIMAGE_THUNK_DATA FirstThunk;   
266 } IMAGE_IMPORT_DESCRIPTOR,*PIMAGE_IMPORT_DESCRIPTOR;
267
268 #define IMAGE_ORDINAL_FLAG              0x80000000
269 #define IMAGE_SNAP_BY_ORDINAL(Ordinal)  ((Ordinal & IMAGE_ORDINAL_FLAG) != 0)
270 #define IMAGE_ORDINAL(Ordinal)          (Ordinal & 0xffff)
271
272 /* Export module directory */
273
274 typedef struct _IMAGE_EXPORT_DIRECTORY {
275         DWORD   Characteristics;
276         DWORD   TimeDateStamp;
277         WORD    MajorVersion;
278         WORD    MinorVersion;
279         DWORD   Name;
280         DWORD   Base;
281         DWORD   NumberOfFunctions;
282         DWORD   NumberOfNames;
283         LPDWORD *AddressOfFunctions;
284         LPDWORD *AddressOfNames;
285         LPWORD  *AddressOfNameOrdinals;
286 /*  u_char ModuleName[1]; */
287 } IMAGE_EXPORT_DIRECTORY,*PIMAGE_EXPORT_DIRECTORY;
288
289
290 /*
291  * Resource directory stuff
292  */
293 typedef struct _IMAGE_RESOURCE_DIRECTORY {
294         DWORD   Characteristics;
295         DWORD   TimeDateStamp;
296         WORD    MajorVersion;
297         WORD    MinorVersion;
298         WORD    NumberOfNamedEntries;
299         WORD    NumberOfIdEntries;
300         /*  IMAGE_RESOURCE_DIRECTORY_ENTRY DirectoryEntries[]; */
301 } IMAGE_RESOURCE_DIRECTORY,*PIMAGE_RESOURCE_DIRECTORY;
302
303 #define IMAGE_RESOURCE_NAME_IS_STRING           0x80000000
304 #define IMAGE_RESOURCE_DATA_IS_DIRECTORY        0x80000000
305
306 typedef struct _IMAGE_RESOURCE_DIRECTORY_ENTRY {
307         union {
308                 struct {
309                         DWORD NameOffset:31;
310                         DWORD NameIsString:1;
311                 } s;
312                 DWORD   Name;
313                 WORD    Id;
314         } u1;
315         union {
316                 DWORD   OffsetToData;
317                 struct {
318                         DWORD   OffsetToDirectory:31;
319                         DWORD   DataIsDirectory:1;
320                 } s;
321         } u2;
322 } IMAGE_RESOURCE_DIRECTORY_ENTRY,*PIMAGE_RESOURCE_DIRECTORY_ENTRY;
323
324
325 typedef struct _IMAGE_RESOURCE_DIRECTORY_STRING {
326         WORD    Length;
327         CHAR    NameString[ 1 ];
328 } IMAGE_RESOURCE_DIRECTORY_STRING,*PIMAGE_RESOURCE_DIRECTORY_STRING;
329
330 typedef struct _IMAGE_RESOURCE_DIR_STRING_U {
331         WORD    Length;
332         WCHAR   NameString[ 1 ];
333 } IMAGE_RESOURCE_DIR_STRING_U,*PIMAGE_RESOURCE_DIR_STRING_U;
334
335 typedef struct _IMAGE_RESOURCE_DATA_ENTRY {
336         DWORD   OffsetToData;
337         DWORD   Size;
338         DWORD   CodePage;
339         DWORD   ResourceHandle;
340 } IMAGE_RESOURCE_DATA_ENTRY,*PIMAGE_RESOURCE_DATA_ENTRY;
341
342 typedef struct _IMAGE_BASE_RELOCATION
343 {
344         DWORD   VirtualAddress;
345         DWORD   SizeOfBlock;
346         WORD    TypeOffset[1];
347 } IMAGE_BASE_RELOCATION,*PIMAGE_BASE_RELOCATION;
348
349 typedef struct _IMAGE_LOAD_CONFIG_DIRECTORY {
350         DWORD   Characteristics;
351         DWORD   TimeDateStamp;
352         WORD    MajorVersion;
353         WORD    MinorVersion;
354         DWORD   GlobalFlagsClear;
355         DWORD   GlobalFlagsSet;
356         DWORD   CriticalSectionDefaultTimeout;
357         DWORD   DeCommitFreeBlockThreshold;
358         DWORD   DeCommitTotalFreeThreshold;
359         LPVOID  LockPrefixTable;
360         DWORD   MaximumAllocationSize;
361         DWORD   VirtualMemoryThreshold;
362         DWORD   ProcessHeapFlags;
363         DWORD   Reserved[ 4 ];
364 } IMAGE_LOAD_CONFIG_DIRECTORY,*PIMAGE_LOAD_CONFIG_DIRECTORY;
365
366 typedef VOID (CALLBACK *PIMAGE_TLS_CALLBACK)(
367         LPVOID DllHandle,DWORD Reason,LPVOID Reserved
368 );
369
370 typedef struct _IMAGE_TLS_DIRECTORY {
371         DWORD   StartAddressOfRawData;
372         DWORD   EndAddressOfRawData;
373         LPDWORD AddressOfIndex;
374         PIMAGE_TLS_CALLBACK *AddressOfCallBacks;
375         DWORD   SizeOfZeroFill;
376         DWORD   Characteristics;
377 } IMAGE_TLS_DIRECTORY,*PIMAGE_TLS_DIRECTORY;
378
379 /*
380  * The IMAGE_DEBUG_DIRECTORY data directory points to an array of
381  * these structures.
382  */
383 typedef struct _IMAGE_DEBUG_DIRECTORY {
384         DWORD   Characteristics;
385         DWORD   TimeDateStamp;
386         WORD    MajorVersion;
387         WORD    MinorVersion;
388         DWORD   Type;
389         DWORD   SizeOfData;
390         DWORD   AddressOfRawData;
391         DWORD   PointerToRawData;
392 } IMAGE_DEBUG_DIRECTORY,*PIMAGE_DEBUG_DIRECTORY;
393
394 /*
395  * The type field above can take these (plus a few other
396  * irrelevant) values.
397  */
398 #define IMAGE_DEBUG_TYPE_UNKNOWN        0
399 #define IMAGE_DEBUG_TYPE_COFF           1
400 #define IMAGE_DEBUG_TYPE_CODEVIEW       2
401 #define IMAGE_DEBUG_TYPE_FPO            3
402 #define IMAGE_DEBUG_TYPE_MISC           4
403 #define IMAGE_DEBUG_TYPE_EXCEPTION      5
404 #define IMAGE_DEBUG_TYPE_FIXUP          6
405 #define IMAGE_DEBUG_TYPE_OMAP_TO_SRC    7
406 #define IMAGE_DEBUG_TYPE_OMAP_FROM_SRC  8
407
408 /* generic relocation types */
409 #define IMAGE_REL_BASED_ABSOLUTE                0
410 #define IMAGE_REL_BASED_HIGH                    1
411 #define IMAGE_REL_BASED_LOW                     2
412 #define IMAGE_REL_BASED_HIGHLOW                 3
413 #define IMAGE_REL_BASED_HIGHADJ                 4
414 #define IMAGE_REL_BASED_MIPS_JMPADDR            5
415 #define IMAGE_REL_BASED_SECTION                 6
416 #define IMAGE_REL_BASED_REL                     7
417 #define IMAGE_REL_BASED_MIPS_JMPADDR16          9
418 #define IMAGE_REL_BASED_IA64_IMM64              9 /* yes, 9 too */
419 #define IMAGE_REL_BASED_DIR64                   10
420 #define IMAGE_REL_BASED_HIGH3ADJ                11
421
422 /* I386 relocation types */
423 #define IMAGE_REL_I386_ABSOLUTE                 0
424 #define IMAGE_REL_I386_DIR16                    1
425 #define IMAGE_REL_I386_REL16                    2
426 #define IMAGE_REL_I386_DIR                      6
427 #define IMAGE_REL_I386_DIR32NB                  7
428 #define IMAGE_REL_I386_SEG12                    9
429 #define IMAGE_REL_I386_SECTION                  10
430 #define IMAGE_REL_I386_SECREL                   11
431 #define IMAGE_REL_I386_REL                      20
432
433 /* MIPS relocation types */
434 #define IMAGE_REL_MIPS_ABSOLUTE         0x0000
435 #define IMAGE_REL_MIPS_REFHALF          0x0001
436 #define IMAGE_REL_MIPS_REFWORD          0x0002
437 #define IMAGE_REL_MIPS_JMPADDR          0x0003
438 #define IMAGE_REL_MIPS_REFHI            0x0004
439 #define IMAGE_REL_MIPS_REFLO            0x0005
440 #define IMAGE_REL_MIPS_GPREL            0x0006
441 #define IMAGE_REL_MIPS_LITERAL          0x0007
442 #define IMAGE_REL_MIPS_SECTION          0x000A
443 #define IMAGE_REL_MIPS_SECREL           0x000B
444 #define IMAGE_REL_MIPS_SECRELLO         0x000C
445 #define IMAGE_REL_MIPS_SECRELHI         0x000D
446 #define IMAGE_REL_MIPS_JMPADDR16        0x0010
447 #define IMAGE_REL_MIPS_REFWORDNB        0x0022
448 #define IMAGE_REL_MIPS_PAIR             0x0025
449
450 /* ALPHA relocation types */
451 #define IMAGE_REL_ALPHA_ABSOLUTE        0x0000
452 #define IMAGE_REL_ALPHA_REFLONG         0x0001
453 #define IMAGE_REL_ALPHA_REFQUAD         0x0002
454 #define IMAGE_REL_ALPHA_GPREL           0x0003
455 #define IMAGE_REL_ALPHA_LITERAL         0x0004
456 #define IMAGE_REL_ALPHA_LITUSE          0x0005
457 #define IMAGE_REL_ALPHA_GPDISP          0x0006
458 #define IMAGE_REL_ALPHA_BRADDR          0x0007
459 #define IMAGE_REL_ALPHA_HINT            0x0008
460 #define IMAGE_REL_ALPHA_INLINE_REFLONG  0x0009
461 #define IMAGE_REL_ALPHA_REFHI           0x000A
462 #define IMAGE_REL_ALPHA_REFLO           0x000B
463 #define IMAGE_REL_ALPHA_PAIR            0x000C
464 #define IMAGE_REL_ALPHA_MATCH           0x000D
465 #define IMAGE_REL_ALPHA_SECTION         0x000E
466 #define IMAGE_REL_ALPHA_SECREL          0x000F
467 #define IMAGE_REL_ALPHA_REFLONGNB       0x0010
468 #define IMAGE_REL_ALPHA_SECRELLO        0x0011
469 #define IMAGE_REL_ALPHA_SECRELHI        0x0012
470 #define IMAGE_REL_ALPHA_REFQ3           0x0013
471 #define IMAGE_REL_ALPHA_REFQ2           0x0014
472 #define IMAGE_REL_ALPHA_REFQ1           0x0015
473 #define IMAGE_REL_ALPHA_GPRELLO         0x0016
474 #define IMAGE_REL_ALPHA_GPRELHI         0x0017
475
476 /* PowerPC relocation types */
477 #define IMAGE_REL_PPC_ABSOLUTE          0x0000
478 #define IMAGE_REL_PPC_ADDR64            0x0001
479 #define IMAGE_REL_PPC_ADDR            0x0002
480 #define IMAGE_REL_PPC_ADDR24            0x0003
481 #define IMAGE_REL_PPC_ADDR16            0x0004
482 #define IMAGE_REL_PPC_ADDR14            0x0005
483 #define IMAGE_REL_PPC_REL24             0x0006
484 #define IMAGE_REL_PPC_REL14             0x0007
485 #define IMAGE_REL_PPC_TOCREL16          0x0008
486 #define IMAGE_REL_PPC_TOCREL14          0x0009
487 #define IMAGE_REL_PPC_ADDR32NB          0x000A
488 #define IMAGE_REL_PPC_SECREL            0x000B
489 #define IMAGE_REL_PPC_SECTION           0x000C
490 #define IMAGE_REL_PPC_IFGLUE            0x000D
491 #define IMAGE_REL_PPC_IMGLUE            0x000E
492 #define IMAGE_REL_PPC_SECREL16          0x000F
493 #define IMAGE_REL_PPC_REFHI             0x0010
494 #define IMAGE_REL_PPC_REFLO             0x0011
495 #define IMAGE_REL_PPC_PAIR              0x0012
496 #define IMAGE_REL_PPC_SECRELLO          0x0013
497 #define IMAGE_REL_PPC_SECRELHI          0x0014
498 #define IMAGE_REL_PPC_GPREL             0x0015
499 #define IMAGE_REL_PPC_TYPEMASK          0x00FF
500 /* modifier bits */
501 #define IMAGE_REL_PPC_NEG               0x0100
502 #define IMAGE_REL_PPC_BRTAKEN           0x0200
503 #define IMAGE_REL_PPC_BRNTAKEN          0x0400
504 #define IMAGE_REL_PPC_TOCDEFN           0x0800
505
506 /* SH3 ? relocation type */
507 #define IMAGE_REL_SH3_ABSOLUTE          0x0000
508 #define IMAGE_REL_SH3_DIRECT16          0x0001
509 #define IMAGE_REL_SH3_DIRECT          0x0002
510 #define IMAGE_REL_SH3_DIRECT8           0x0003
511 #define IMAGE_REL_SH3_DIRECT8_WORD      0x0004
512 #define IMAGE_REL_SH3_DIRECT8_LONG      0x0005
513 #define IMAGE_REL_SH3_DIRECT4           0x0006
514 #define IMAGE_REL_SH3_DIRECT4_WORD      0x0007
515 #define IMAGE_REL_SH3_DIRECT4_LONG      0x0008
516 #define IMAGE_REL_SH3_PCREL8_WORD       0x0009
517 #define IMAGE_REL_SH3_PCREL8_LONG       0x000A
518 #define IMAGE_REL_SH3_PCREL12_WORD      0x000B
519 #define IMAGE_REL_SH3_STARTOF_SECTION   0x000C
520 #define IMAGE_REL_SH3_SIZEOF_SECTION    0x000D
521 #define IMAGE_REL_SH3_SECTION           0x000E
522 #define IMAGE_REL_SH3_SECREL            0x000F
523 #define IMAGE_REL_SH3_DIRECT32_NB       0x0010
524
525 /* ARM (Archimedes?) relocation types */
526 #define IMAGE_REL_ARM_ABSOLUTE          0x0000
527 #define IMAGE_REL_ARM_ADDR              0x0001
528 #define IMAGE_REL_ARM_ADDR32NB          0x0002
529 #define IMAGE_REL_ARM_BRANCH24          0x0003
530 #define IMAGE_REL_ARM_BRANCH11          0x0004
531 #define IMAGE_REL_ARM_SECTION           0x000E
532 #define IMAGE_REL_ARM_SECREL            0x000F
533
534 /* IA64 relocation types */
535 #define IMAGE_REL_IA64_ABSOLUTE         0x0000
536 #define IMAGE_REL_IA64_IMM14            0x0001
537 #define IMAGE_REL_IA64_IMM22            0x0002
538 #define IMAGE_REL_IA64_IMM64            0x0003
539 #define IMAGE_REL_IA64_DIR              0x0004
540 #define IMAGE_REL_IA64_DIR64            0x0005
541 #define IMAGE_REL_IA64_PCREL21B         0x0006
542 #define IMAGE_REL_IA64_PCREL21M         0x0007
543 #define IMAGE_REL_IA64_PCREL21F         0x0008
544 #define IMAGE_REL_IA64_GPREL22          0x0009
545 #define IMAGE_REL_IA64_LTOFF22          0x000A
546 #define IMAGE_REL_IA64_SECTION          0x000B
547 #define IMAGE_REL_IA64_SECREL22         0x000C
548 #define IMAGE_REL_IA64_SECREL64I        0x000D
549 #define IMAGE_REL_IA64_SECREL           0x000E
550 #define IMAGE_REL_IA64_LTOFF64          0x000F
551 #define IMAGE_REL_IA64_DIR32NB          0x0010
552 #define IMAGE_REL_IA64_RESERVED_11      0x0011
553 #define IMAGE_REL_IA64_RESERVED_12      0x0012
554 #define IMAGE_REL_IA64_RESERVED_13      0x0013
555 #define IMAGE_REL_IA64_RESERVED_14      0x0014
556 #define IMAGE_REL_IA64_RESERVED_15      0x0015
557 #define IMAGE_REL_IA64_RESERVED_16      0x0016
558 #define IMAGE_REL_IA64_ADDEND           0x001F
559
560 /*
561  * This is the structure that appears at the very start of a .DBG file.
562  */
563 typedef struct _IMAGE_SEPARATE_DEBUG_HEADER {
564         WORD    Signature;
565         WORD    Flags;
566         WORD    Machine;
567         WORD    Characteristics;
568         DWORD   TimeDateStamp;
569         DWORD   CheckSum;
570         DWORD   ImageBase;
571         DWORD   SizeOfImage;
572         DWORD   NumberOfSections;
573         DWORD   ExportedNamesSize;
574         DWORD   DebugDirectorySize;
575         DWORD   Reserved[ 3 ];
576 } IMAGE_SEPARATE_DEBUG_HEADER,*PIMAGE_SEPARATE_DEBUG_HEADER;
577
578 #define IMAGE_SEPARATE_DEBUG_SIGNATURE 0x4944
579
580 #endif /* __WINE_PEEXE_H */