|
|
1.1 root 1: /*static char *SCCSID = "@(#)exe386.h 13.14 90/04/17";*/
2:
3: /*
4: * Title
5: *
6: * exe386.h
7: * (C) Copyright Microsoft Corp 1988
8: *
9: * Description
10: *
11: * Data structure definitions for the OS/2
12: * executable file format (flat model).
13: *
14: */
15:
16:
17:
18: /*_________________________________________________________________*
19: | |
20: | |
21: | OS/2 .EXE FILE HEADER DEFINITION - 386 version 0:32 |
22: | |
23: |_________________________________________________________________|
24: * */
25:
26:
27: #define BITPERWORD 16
28: #define BITPERBYTE 8
29: #define OBJPAGELEN 4096
30: #define E32MAGIC1 'L' /* New magic number "LE" */
31: #define E32MAGIC2 'E' /* New magic number "LE" */
32: #define E32MAGIC 0x454c /* New magic number "LE" */
33: #define E32RESBYTES1 0 /* First bytes reserved */
34: #define E32RESBYTES2 0 /* Second bytes reserved */
35: #define E32RESBYTES3 24 /* Third bytes reserved */
36: #define E32LEBO 0x00 /* Little Endian Byte Order */
37: #define E32BEBO 0x01 /* Big Endian Byte Order */
38: #define E32LEWO 0x00 /* Little Endian Word Order */
39: #define E32BEWO 0x01 /* Big Endian Word Order */
40: #define E32LEVEL 0L /* 32-bit EXE format level */
41: #define E32CPU286 0x001 /* Intel 80286 or upwardly compatibile */
42: #define E32CPU386 0x002 /* Intel 80386 or upwardly compatibile */
43: #define E32CPU486 0x003 /* Intel 80486 or upwardly compatibile */
44:
45:
46:
47: struct e32_exe /* New 32-bit .EXE header */
48: {
49: unsigned char e32_magic[2]; /* Magic number E32_MAGIC */
50: unsigned char e32_border; /* The byte ordering for the .EXE */
51: unsigned char e32_worder; /* The word ordering for the .EXE */
52: unsigned long e32_level; /* The EXE format level for now = 0 */
53: unsigned short e32_cpu; /* The CPU type */
54: unsigned short e32_os; /* The OS type */
55: unsigned long e32_ver; /* Module version */
56: unsigned long e32_mflags; /* Module flags */
57: unsigned long e32_mpages; /* Module # pages */
58: unsigned long e32_startobj; /* Object # for instruction pointer */
59: unsigned long e32_eip; /* Extended instruction pointer */
60: unsigned long e32_stackobj; /* Object # for stack pointer */
61: unsigned long e32_esp; /* Extended stack pointer */
62: unsigned long e32_pagesize; /* .EXE page size */
63: unsigned long e32_lastpagesize;/* Last page size in .EXE */
64: unsigned long e32_fixupsize; /* Fixup section size */
65: unsigned long e32_fixupsum; /* Fixup section checksum */
66: unsigned long e32_ldrsize; /* Loader section size */
67: unsigned long e32_ldrsum; /* Loader section checksum */
68: unsigned long e32_objtab; /* Object table offset */
69: unsigned long e32_objcnt; /* Number of objects in module */
70: unsigned long e32_objmap; /* Object page map offset */
71: unsigned long e32_itermap; /* Object iterated data map offset */
72: unsigned long e32_rsrctab; /* Offset of Resource Table */
73: unsigned long e32_rsrccnt; /* Number of resource entries */
74: unsigned long e32_restab; /* Offset of resident name table */
75: unsigned long e32_enttab; /* Offset of Entry Table */
76: unsigned long e32_dirtab; /* Offset of Module Directive Table */
77: unsigned long e32_dircnt; /* Number of module directives */
78: unsigned long e32_fpagetab; /* Offset of Fixup Page Table */
79: unsigned long e32_frectab; /* Offset of Fixup Record Table */
80: unsigned long e32_impmod; /* Offset of Import Module Name Table */
81: unsigned long e32_impmodcnt; /* Number of entries in Import Module Name Table */
82: unsigned long e32_impproc; /* Offset of Import Procedure Name Table */
83: unsigned long e32_pagesum; /* Offset of Per-Page Checksum Table */
84: unsigned long e32_datapage; /* Offset of Enumerated Data Pages */
85: unsigned long e32_preload; /* Number of preload pages */
86: unsigned long e32_nrestab; /* Offset of Non-resident Names Table */
87: unsigned long e32_cbnrestab; /* Size of Non-resident Name Table */
88: unsigned long e32_nressum; /* Non-resident Name Table Checksum */
89: unsigned long e32_autodata; /* Object # for automatic data object */
90: unsigned long e32_debuginfo; /* Offset of the debugging information */
91: unsigned long e32_debuglen; /* The length of the debugging info. in bytes */
92: unsigned long e32_instpreload;/* Number of instance pages in preload section of .EXE file */
93: unsigned long e32_instdemand; /* Number of instance pages in demand load section of .EXE file */
94: unsigned long e32_heapsize; /* Size of heap - for 16-bit apps */
95: unsigned char e32_res3[E32RESBYTES3];
96: /* Pad structure to 196 bytes */
97: };
98:
99:
100:
101: #define E32_MAGIC1(x) (x).e32_magic[0]
102: #define E32_MAGIC2(x) (x).e32_magic[1]
103: #define E32_BORDER(x) (x).e32_border
104: #define E32_WORDER(x) (x).e32_worder
105: #define E32_LEVEL(x) (x).e32_level
106: #define E32_CPU(x) (x).e32_cpu
107: #define E32_OS(x) (x).e32_os
108: #define E32_VER(x) (x).e32_ver
109: #define E32_MFLAGS(x) (x).e32_mflags
110: #define E32_MPAGES(x) (x).e32_mpages
111: #define E32_STARTOBJ(x) (x).e32_startobj
112: #define E32_EIP(x) (x).e32_eip
113: #define E32_STACKOBJ(x) (x).e32_stackobj
114: #define E32_ESP(x) (x).e32_esp
115: #define E32_PAGESIZE(x) (x).e32_pagesize
116: #define E32_LASTPAGESIZE(x) (x).e32_lastpagesize
117: #define E32_FIXUPSIZE(x) (x).e32_fixupsize
118: #define E32_FIXUPSUM(x) (x).e32_fixupsum
119: #define E32_LDRSIZE(x) (x).e32_ldrsize
120: #define E32_LDRSUM(x) (x).e32_ldrsum
121: #define E32_OBJTAB(x) (x).e32_objtab
122: #define E32_OBJCNT(x) (x).e32_objcnt
123: #define E32_OBJMAP(x) (x).e32_objmap
124: #define E32_ITERMAP(x) (x).e32_itermap
125: #define E32_RSRCTAB(x) (x).e32_rsrctab
126: #define E32_RSRCCNT(x) (x).e32_rsrccnt
127: #define E32_RESTAB(x) (x).e32_restab
128: #define E32_ENTTAB(x) (x).e32_enttab
129: #define E32_DIRTAB(x) (x).e32_dirtab
130: #define E32_DIRCNT(x) (x).e32_dircnt
131: #define E32_FPAGETAB(x) (x).e32_fpagetab
132: #define E32_FRECTAB(x) (x).e32_frectab
133: #define E32_IMPMOD(x) (x).e32_impmod
134: #define E32_IMPMODCNT(x) (x).e32_impmodcnt
135: #define E32_IMPPROC(x) (x).e32_impproc
136: #define E32_PAGESUM(x) (x).e32_pagesum
137: #define E32_DATAPAGE(x) (x).e32_datapage
138: #define E32_PRELOAD(x) (x).e32_preload
139: #define E32_NRESTAB(x) (x).e32_nrestab
140: #define E32_CBNRESTAB(x) (x).e32_cbnrestab
141: #define E32_NRESSUM(x) (x).e32_nressum
142: #define E32_AUTODATA(x) (x).e32_autodata
143: #define E32_DEBUGINFO(x) (x).e32_debuginfo
144: #define E32_DEBUGLEN(x) (x).e32_debuglen
145: #define E32_INSTPRELOAD(x) (x).e32_instpreload
146: #define E32_INSTDEMAND(x) (x).e32_instdemand
147: #define E32_HEAPSIZE(x) (x).e32_heapsize
148:
149:
150:
151: /*
152: * Format of E32_MFLAGS(x):
153: *
154: * Low word has the following format:
155: *
156: * 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 - bit no
157: * | | | | | | | |
158: * | | | | | | | +------- Per-Process Library Initialization
159: * | | | | | | +----------- No Internal Fixups for Module in .EXE
160: * | | | | | +------------- No External Fixups for Module in .EXE
161: * | | | | +------------------- Incompatible with PM Windowing
162: * | | | +--------------------- Compatible with PM Windowing
163: * | | +----------------------- Uses PM Windowing API
164: * | +-------------------------------- Module not Loadable
165: * +-------------------------------------- Library Module
166: */
167:
168:
169: #define E32NOTP 0x8000L /* Library Module - used as NENOTP */
170: #define E32NOLOAD 0x2000L /* Module not Loadable */
171: #define E32PMAPI 0x0300L /* Uses PM Windowing API */
172: #define E32PMW 0x0200L /* Compatible with PM Windowing */
173: #define E32NOPMW 0x0100L /* Incompatible with PM Windowing */
174: #define E32NOEXTFIX 0x0020L /* NO External Fixups in .EXE */
175: #define E32NOINTFIX 0x0010L /* NO Internal Fixups in .EXE */
176: #define E32LIBINIT 0x0004L /* Per-Process Library Initialization */
177: #define E32APPMASK 0x0700L /* Aplication Type Mask */
178:
179:
180: /*
181: * Format of E32_MFLAGS(x):
182: *
183: * High word has the following format:
184: *
185: * 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 - bit no
186: * | |
187: * | +--- Protected memory library module
188: * +----- Device driver
189: */
190:
191: #define E32PROTDLL 0x10000L // Protected memory library module
192: #define E32DEVICE 0x20000L // Device driver
193: #define E32MODEXE 0x00000L // .EXE module
194: #define E32MODDLL 0x08000L // .DLL module
195: #define E32MODPROTDLL 0x18000L // Protected memory library module
196: #define E32MODPDEV 0x20000L // Physical device driver
197: #define E32MODVDEV 0x28000L // Virtual device driver
198: #define E32MODMASK 0x38000L // Module type mask
199:
200: /*
201: * RELOCATION DEFINITIONS - RUN-TIME FIXUPS
202: */
203:
204:
205: #pragma pack(1) /* This data must be packed */
206:
207:
208: typedef union _offset
209: {
210: unsigned short offset16;
211: unsigned long offset32;
212: }
213: offset; /* 16-bit or 32-bit offset */
214:
215:
216: /***ET+ r32_rlc - Relocation item */
217:
218: struct r32_rlc /* Relocation item */
219: {
220: unsigned char nr_stype; /* Source type - field shared with new_rlc */
221: unsigned char nr_flags; /* Flag byte - field shared with new_rlc */
222: short r32_soff; /* Source offset */
223: unsigned short r32_objmod; /* Target object number or Module ordinal */
224:
225: union targetid
226: {
227: offset intref; /* Internal fixup */
228:
229: union extfixup
230: {
231: offset proc; /* Procedure name offset */
232: unsigned long ord; /* Procedure odrinal */
233: }
234: extref; /* External fixup */
235:
236: struct addfixup
237: {
238: unsigned short entry; /* Entry ordinal */
239: offset addval; /* Value added to the address */
240: }
241: addfix; /* Additive fixup */
242: }
243: r32_target; /* Target data */
244: unsigned short r32_srccount; /* Number of chained fixup records */
245: unsigned short r32_chain; /* Chain head */
246: };
247:
248:
249: #pragma pack() /* Stop packing */
250:
251:
252: /*
253: * In 32-bit .EXE file run-time relocations are written as varying size
254: * records, so we need many size definitions.
255: */
256:
257: #define RINTSIZE16 8
258: #define RINTSIZE32 10
259: #define RORDSIZE 8
260: #define RNAMSIZE16 8
261: #define RNAMSIZE32 10
262: #define RADDSIZE16 10
263: #define RADDSIZE32 12
264:
265:
266:
267: #if FALSE
268: /*
269: * Access macros defined in NEWEXE.H !!!
270: */
271: #define NR_STYPE(x) (x).nr_stype
272: #define NR_FLAGS(x) (x).nr_flags
273: #endif
274:
275: #define R32_SOFF(x) (x).r32_soff
276: #define R32_OBJNO(x) (x).r32_objmod
277: #define R32_MODORD(x) (x).r32_objmod
278: #define R32_OFFSET16(x) (x).r32_target.intref.offset16
279: #define R32_OFFSET32(x) (x).r32_target.intref.offset32
280: #define R32_PROCOFF16(x) (x).r32_target.extref.proc.offset16
281: #define R32_PROCOFF32(x) (x).r32_target.extref.proc.offset32
282: #define R32_PROCORD(x) (x).r32_target.extref.ord
283: #define R32_ENTRY(x) (x).r32_target.addfix.entry
284: #define R32_ADDVAL16(x) (x).r32_target.addfix.addval.offset16
285: #define R32_ADDVAL32(x) (x).r32_target.addfix.addval.offset32
286: #define R32_SRCCNT(x) (x).r32_srccount
287: #define R32_CHAIN(x) (x).r32_chain
288:
289:
290:
291: /*
292: * Format of NR_STYPE(x)
293: *
294: * 7 6 5 4 3 2 1 0 - bit no
295: * | | | | | |
296: * | | +-+-+-+--- Source type
297: * | +----------- Fixup to 16:16 alias
298: * +------------- List of source offset follows fixup record
299: */
300:
301: #if FALSE
302:
303: /* DEFINED in newexe.h !!! */
304:
305: #define NRSTYP 0x0f /* Source type mask */
306: #define NRSBYT 0x00 /* lo byte (8-bits)*/
307: #define NRSSEG 0x02 /* 16-bit segment (16-bits) */
308: #define NRSPTR 0x03 /* 16:16 pointer (32-bits) */
309: #define NRSOFF 0x05 /* 16-bit offset (16-bits) */
310: #define NRPTR48 0x06 /* 16:32 pointer (48-bits) */
311: #define NROFF32 0x07 /* 32-bit offset (32-bits) */
312: #define NRSOFF32 0x08 /* 32-bit self-relative offset (32-bits) */
313: #endif
314:
315:
316: #define NRSRCMASK 0x0f /* Source type mask */
317: #define NRALIAS 0x10 /* Fixup to alias */
318: #define NRCHAIN 0x20 /* List of source offset follows */
319: /* fixup record, source offset field */
320: /* in fixup record contains number */
321: /* of elements in list */
322:
323: /*
324: * Format of NR_FLAGS(x) and R32_FLAGS(x):
325: *
326: * 7 6 5 4 3 2 1 0 - bit no
327: * | | | | | | |
328: * | | | | | +-+--- Reference type
329: * | | | | +------- Additive fixup
330: * | | | +----------- 32-bit Target Offset Flag (1 - 32-bit; 0 - 16-bit)
331: * | | +------------- 32-bit Additive Flag (1 - 32-bit; 0 - 16-bit)
332: * | +--------------- 16-bit Object/Module ordinal (1 - 16-bit; 0 - 8-bit)
333: * +----------------- 8-bit import ordinal (1 - 8-bit;
334: * 0 - NR32BITOFF toggles
335: * between 16 and 32 bit
336: * ordinal)
337: */
338:
339: #if FALSE
340:
341: /* DEFINED in newexe.h !!! */
342:
343: #define NRADD 0x04 /* Additive fixup */
344: #define NRRTYP 0x03 /* Reference type mask */
345: #define NRRINT 0x00 /* Internal reference */
346: #define NRRORD 0x01 /* Import by ordinal */
347: #define NRRNAM 0x02 /* Import by name */
348: #endif
349:
350: #define NRRENT 0x03 /* Internal entry table fixup */
351:
352: #define NR32BITOFF 0x10 /* 32-bit Target Offset */
353: #define NR32BITADD 0x20 /* 32-bit Additive fixup */
354: #define NR16OBJMOD 0x40 /* 16-bit Object/Module ordinal */
355: #define NR8BITORD 0x80 /* 8-bit import ordinal */
356: /*end*/
357:
358: /*
359: * Data structures for storing run-time fixups in linker virtual memory.
360: *
361: * Each object has a list of Object Page Directories which specify
362: * fixups for given page. Each page has its own hash table which is
363: * used to detect fixups to the same target.
364: */
365:
366: #define PAGEPERDIR 62
367: #define LG2DIR 7
368:
369:
370: typedef struct _OBJPAGEDIR
371: {
372: DWORD next; /* Virtual pointer to next dir on list */
373: WORD ht[PAGEPERDIR]; /* Pointers to individual hash tables */
374: }
375: OBJPAGEDIR;
376:
377:
378:
379: /*
380: * OBJECT TABLE
381: */
382:
383: /***ET+ o32_obj Object Table Entry */
384:
385: struct o32_obj /* Flat .EXE object table entry */
386: {
387: unsigned long o32_size; /* Object virtual size */
388: unsigned long o32_base; /* Object base virtual address */
389: unsigned long o32_flags; /* Attribute flags */
390: unsigned long o32_pagemap; /* Object page map index */
391: unsigned long o32_mapsize; /* Number of entries in object page map */
392: unsigned long o32_reserved; /* Reserved */
393: };
394:
395:
396: #define O32_SIZE(x) (x).o32_size
397: #define O32_BASE(x) (x).o32_base
398: #define O32_FLAGS(x) (x).o32_flags
399: #define O32_PAGEMAP(x) (x).o32_pagemap
400: #define O32_MAPSIZE(x) (x).o32_mapsize
401: #define O32_RESERVED(x) (x).o32_reserved
402:
403:
404:
405: /*
406: * Format of O32_FLAGS(x)
407: *
408: * High word of dword flag field is not used for now.
409: * Low word has the following format:
410: *
411: * 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 - bit no
412: * | | | | | | | | | | | | | | |
413: * | | | | | | | | | | | | | | +--- Readable Object
414: * | | | | | | | | | | | | | +----- Writeable Object
415: * | | | | | | | | | | | | +------- Executable Object
416: * | | | | | | | | | | | +--------- Resource Object
417: * | | | | | | | | | | +----------- Object is Discardable
418: * | | | | | | | | | +------------- Object is Shared
419: * | | | | | | | | +--------------- Object has preload pages
420: * | | | | | | | +----------------- Object has invalid pages
421: * | | | | | | +------------------- Object is permanent and swappable
422: * | | | | | +--------------------- Object is permanent and resident
423: * | | | | +----------------------- Object is permanent and long lockable
424: * | | | +----------------------------- 16:16 alias required (80x86 specific)
425: * | | +-------------------------------- Big/Default bit setting (80x86 specific)
426: * | +----------------------------------- Object is conforming for code (80x86 specific)
427: * +-------------------------------------- Object I/O privilege level (80x86 specific)
428: *
429: */
430:
431: #define OBJREAD 0x0001L /* Readable Object */
432: #define OBJWRITE 0x0002L /* Writeable Object */
433: #define OBJRSRC 0x0008L /* Resource Object */
434: #define OBJINVALID 0x0080L /* Object has invalid pages */
435: #define OBJNONPERM 0x0000L /* Object is nonpermanent */
436: #define OBJPERM 0x0100L /* Object is permanent and swappable */
437: #define OBJRESIDENT 0x0200L /* Object is permanent and resident */
438: #define OBJCONTIG 0x0300L /* Object is resident and contiguous */
439: #define OBJDYNAMIC 0x0400L /* Object is permanent and long locable */
440: #define OBJTYPEMASK 0x0700L /* Object type mask */
441: #define OBJALIAS16 0x1000L /* 16:16 alias required (80x86 specific) */
442: #define OBJBIGDEF 0x2000L /* Big/Default bit setting (80x86 specific) */
443: #define OBJIOPL 0x8000L /* Object I/O privilege level (80x86 specific) */
444: #if FOR_EXEHDR
445: /*
446: * Name these flags differently for EXEHDR.EXE - avoid conflicts with 286 version
447: */
448: #define OBJDISCARD 0x0010L /* Object is Discardable */
449: #define OBJSHARED 0x0020L /* Object is Shared */
450: #define OBJPRELOAD 0x0040L /* Object has preload pages */
451: #define OBJEXEC 0x0004L /* Executable Object */
452: #define OBJCONFORM 0x4000L /* Object is conforming for code (80x86 specific) */
453: #else
454: /*
455: * Life will be easier, if we keep the same names for the following flags:
456: */
457: #define NSDISCARD 0x0010L /* Object is Discardable */
458: #define NSMOVE NSDISCARD /* Moveable object is for sure Discardable */
459: #define NSSHARED 0x0020L /* Object is Shared */
460: #define NSPRELOAD 0x0040L /* Object has preload pages */
461: #define NSEXRD 0x0004L /* Executable Object */
462: #define NSCONFORM 0x4000L /* Object is conforming for code (80x86 specific) */
463: #endif
464: /*end*/
465:
466: /***ET+ o32_map - Object Page Map entry */
467:
468: struct o32_map /* Object Page Map entry */
469: {
470: unsigned char o32_pageidx[3]; /* 24-bit page # in .EXE file */
471: unsigned char o32_pageflags; /* Per-Page attributes */
472: };
473:
474:
475: #define GETPAGEIDX(x) ((((unsigned long)((x).o32_pageidx[0])) << BITPERWORD) + \
476: (((x).o32_pageidx[1]) << BITPERBYTE) + \
477: (x).o32_pageidx[2])
478:
479: #define PUTPAGEIDX(x,i) ((x).o32_pageidx[0] = (unsigned char) ((unsigned long)(i) >> BITPERWORD), \
480: (x).o32_pageidx[1] = (unsigned char) ((i) >> BITPERBYTE), \
481: (x).o32_pageidx[2] = (unsigned char) ((i) & 0xff))
482:
483: #define PAGEFLAGS(x) (x).o32_pageflags
484:
485:
486: #define VALID 0x00 /* Valid Physical Page in .EXE */
487: #define ITERDATA 0x01 /* Iterated Data Page */
488: #define INVALID 0x02 /* Invalid Page */
489: #define ZEROED 0x03 /* Zero Filled Page */
490: #define RANGE 0x04 /* Range of pages */
491: /*end*/
492:
493: /*
494: * RESOURCE TABLE
495: */
496:
497: /***ET+ rsrc32 - Resource Table Entry */
498:
499: struct rsrc32 /* Resource Table Entry */
500: {
501: unsigned short type; /* Resource type */
502: unsigned short name; /* Resource name */
503: unsigned long cb; /* Resource size */
504: unsigned short obj; /* Object number */
505: unsigned long offset; /* Offset within object */
506: };
507: /*end*/
508:
509:
510: #pragma pack(1) /* This data must be packed */
511:
512: /*
513: * ENTRY TABLE DEFINITIONS
514: */
515:
516: /***ET+ b32_bundle - Entry Table */
517:
518: struct b32_bundle
519: {
520: unsigned char b32_cnt; /* Number of entries in this bundle */
521: unsigned char b32_type; /* Bundle type */
522: unsigned short b32_obj; /* Object number */
523: }; /* Follows entry types */
524:
525: struct e32_entry
526: {
527: unsigned char e32_flags; /* Entry point flags */
528: union entrykind
529: {
530: offset e32_offset; /* 16-bit/32-bit offset entry */
531: struct callgate
532: {
533: unsigned short offset; /* Offset in segment */
534: unsigned short callgate; /* Callgate selector */
535: }
536: e32_callgate; /* 286 (16-bit) call gate */
537: struct fwd
538: {
539: unsigned short modord; /* Module ordinal number */
540: unsigned long value; /* Proc name offset or ordinal */
541: }
542: e32_fwd; /* Forwarder */
543: }
544: e32_variant; /* Entry variant */
545: };
546:
547: #pragma pack() /* Stop packing */
548:
549:
550: #define B32_CNT(x) (x).b32_cnt
551: #define B32_TYPE(x) (x).b32_type
552: #define B32_OBJ(x) (x).b32_obj
553:
554: #define E32_EFLAGS(x) (x).e32_flags
555: #define E32_OFFSET16(x) (x).e32_variant.e32_offset.offset16
556: #define E32_OFFSET32(x) (x).e32_variant.e32_offset.offset32
557: #define E32_GATEOFF(x) (x).e32_variant.e32_callgate.offset
558: #define E32_GATE(x) (x).e32_variant.e32_callgate.callgate
559: #define E32_MODORD(x) (x).e32_variant.e32_fwd.modord
560: #define E32_VALUE(x) (x).e32_variant.e32_fwd.value
561:
562: #define FIXENT16 3
563: #define FIXENT32 5
564: #define GATEENT16 5
565: #define FWDENT 7
566:
567: /*
568: * BUNDLE TYPES
569: */
570:
571: #define EMPTY 0x00 /* Empty bundle */
572: #define ENTRY16 0x01 /* 16-bit offset entry point */
573: #define GATE16 0x02 /* 286 call gate (16-bit IOPL) */
574: #define ENTRY32 0x03 /* 32-bit offset entry point */
575: #define ENTRYFWD 0x04 /* Forwarder entry point */
576: #define TYPEINFO 0x80 /* Typing information present flag */
577:
578:
579: /*
580: * Format for E32_EFLAGS(x)
581: *
582: * 7 6 5 4 3 2 1 0 - bit no
583: * | | | | | | | |
584: * | | | | | | | +--- exported entry
585: * | | | | | | +----- uses shared data
586: * +-+-+-+-+-+------- parameter word count
587: */
588:
589: #define E32EXPORT 0x01 /* Exported entry */
590: #define E32SHARED 0x02 /* Uses shared data */
591: #define E32PARAMS 0xf8 /* Parameter word count mask */
592:
593: /*
594: * Flags for forwarders only:
595: */
596:
597: #define FWD_ORDINAL 0x01 /* Imported by ordinal */
598: /*end*/
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.