Source code of Windows XP (NT5)
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
|
|
/* SCCSID = %W% %E% */ /*
* Copyright Microsoft Corporation, 1983-1987 * * This Module contains Proprietary Information of Microsoft * Corporation and should be treated as Confidential. * * bndtrn.h: * * Constant definitions: */
/*
* Aligment types */
#define ALGNNIL 0 /* Unaligned LSEG */
#define ALGNABS 0 /* Absolute LSEG */
#define ALGNBYT 1 /* Byte-aligned LSEG */
#define ALGNWRD 2 /* Word-aligned LSEG */
#define ALGNDBL 5 /* Double-word aligned LSEG */
#define ALGNPAR 3 /* Paragraph-aligned LSEG */
#define ALGNPAG 4 /* Page-aligned LSEG */
/*
* Symbol attributes types */
#define ATTRNIL 0 /* Nil attribute */
#define ATTRPSN 1 /* Public segment attribute */
#define ATTRLSN 2 /* Local segment attribute */
#define ATTRPNM 3 /* Public name attribute */
#define ATTRLNM 4 /* Local name attribute */
#define ATTRFIL 5 /* File name attribute */
#define ATTRGRP 6 /* Group name attribute */
#define ATTRUND 7 /* Undefined symbol attribute */
#define ATTRSKIPLIB 8 /* Default library name to skip */
#define ATTRCOMDAT 9 /* Named data block - COMDAT */
#define ATTRALIAS 10 /* Alias name attribute */
#define ATTREXP 11 /* Exported name attribute */
#define ATTRIMP 12 /* Imported name attribute */
#define ATTRMAX 13 /* Highest attribute no. plus 1 */
/*
* LINK limits */
#define BIGBIT 2 /* Big bit in ACBP byte */
#define BNDABS 0xFE /* Bundle of absolute entries */
#define BNDMAX 255 /* Maximum entries per bundle */
#define BNDMOV 0xFF /* Bundle of movable entries */
#define BNDNIL 0 /* Null bundle */
#define CBELMAX 0xffff /* Max COMDEF elem. length in bytes */
#if EXE386
#define CBMAXSEG32 (0xffffffffL) /* Maximum 32-bit segment size under OS/2 */
#else
#define CBMAXSEG32 (1L<<LG2SEG32) /* Maximum 32-bit segment size under DOS = 32Mb */
#endif
#if CPUVAX OR CPU68K
#define CBMAXSYMSRES 0x8000L /* 32K resident symbol table */
#else
#define CBMAXSYMSRES 0x3000 /* 12K resident symbol table */
#endif
#define CBRLC 4 /* Bytes in old .EXE reloc record */
#if OSXENIX
#define CHPATH '/' /* Path delimiter */
#else
#define CHPATH '\\' /* Path delimiter */
#endif
#define CODE386BIT 1 /* 386 code segment in ACBP byte */
#define COMBCOM 6 /* Combine as common */
#define COMBPUB 2 /* Combine as public */
#define COMBSTK 5 /* Combine as stack */
#define CSLOTMAX 37 /* No. of buckets on dictionary page */
#define DATAMAX 1024 /* Max. bytes data in LEDATA record */
#define DFGSNMAX 128 /* Default 128 segments maximum */
#define DFINTNO 0x3F /* Default interrupt number */
#define OVLTHUNKSIZE 6 /* Thunk size for dynamic overlays */
#define THUNKNIL ((WORD)-1) /* NO thunk assigned */
#if EXE386
#define DFPGALIGN 12 /* Default object page alignment shift */
#define DFOBJALIGN 16 /* Default memory object alignment shift */
#endif
#define DFSAALIGN 9 /* Default segment alignment shift */
#define EXPMAX 0xfffe /* Max. number of exported entries */
#define EXTMAX 2048 /* Max. no. of EXTDEFs per module */
#define FHNIL ((char) 0xFF) /* Nil library number */
#define FSTARTADDRESS 0x40 /* Fixdat byte field mask */
#define GGRMAX 32 /* Max. no. of GRPDEFs */
#define GRMAX 32 /* Max. no. of GRPDEFs per module */
#define GRNIL 0 /* Nil group number */
#if EXE386 /* Absolute max. no. of segments */
#define GSNMAX (0xffdf/sizeof(RATYPE))
#else
#define GSNMAX (0xffdf/sizeof(RATYPE))
#endif
#define HEPLEN 241 /* Entry point hash table length */
#define HTDELTA 17 /* Hash delta for htgsnosn[] */
#define IFHLIBMAX 130 /* Max. no. of libraries + 2*/
#define IMAX 1024 /* Max. of SNMAX, GRMAX, and EXTMAX */
#define INDIR '@' /* Indirect file char */
#define INIL 0xFFFF /* Nil index (generic) */
#if OVERLAYS
#define IOVMAX OSNMAX /* Max. no. of overlays */
#else
#define IOVMAX 1 /* Max. no. of overlays */
#endif
#define IOVROOT 0 /* Root overlay number */
#define NOTIOVL 0xffff // Overlay index not specified
#define LBUFSIZ 32768 /* Size of main I/O buffer */
#define LG2OSN 11 /* Log2 OSNMAX */
#define LG2Q 15 /* Log2 QUANTUM */
#if EXE386
#define LG2SEG32 32 /* Log2 max 32-bit seg size under OS/2 */
#else
#define LG2SEG32 25 /* Log2 max 32-bit seg size under DOS */
#endif
#define LNAMEMAX 255 /* Maximum LNAME length */
#define LXIVK (0x10000L) /* 64K */
#define MEGABYTE (0x100000L) /* 1024k = 1048576 bytes */
#define LG2PAG 9 // 2^9 = 512
#define PAGLEN (1U << LG2PAG)
#define MASKRB 0x1FF
#define MASKTYSNCOMBINE 034
#define OSNMAX 0x800 /* Maximum number +1 of overlay segs*/
#define PARAPRVSEG 0x60 /* Paragraph-aligned private seg */
#define DWORDPRVSEG 0xa0 /* DWORD-aligned private seg */
#define PARAPUBSEG 0x68 /* Paragraph-aligned public segment */
#define DWORDPUBSEG 0xa8 /* DWORD-aligned public segment */
#define PROPNIL (PROPTYPE)0 /* Nil pointer */
#define QUANTUM (1U<<LG2Q) /* Block size for lib dict., VM mgr */
#if BIGSYM
#define RBMAX (1L<<20) /* 1 + largest symtab pointer */
#else
#define RBMAX LXIVK /* 1 + largest symtab pointer */
#endif
#define RECTNIL 0 /* Nil record type */
#define RHTENIL (RBTYPE)0 /* Nil pointer */
#define RLCMAX 4 /* Maximum no. of thread definitions */
#define SAMAX 256 /* Max. no. of physical segments */
#define SANIL 0 /* The null file segment */
#define SEGNIL 0 /* Nil segment number */
#define SHPNTOPAR 5 /* Log(2) of page/para */
#define SNMAX 255 /* Max. no. of SEGDEFs per module */
#define SNNIL 0 /* Nil SEGDEF number */
#define SYMSCALE 4 /* Symbol table address scale factor */
#define SYMMAX 2048 /* Max. no. of symbols */
#define STKSIZ 0x2000 /* 8K stack needed */
#define TYPEFAR 0x61 /* Far communal variable */
#define TYPENEAR 0x62 /* Near communal variable */
#define TYPMAX 256 /* Max. no. of TYPDEFs */
#define TYSNABS '\0'
#define TYSNSTACK '\024'
#define TYSNCOMMON '\030'
#define VFPNIL 0 /* Null hash bucket number */
#define BKTLNK 0 /* Offset of link word */
#define BKTCNT 1 /* Offset of count word */
#define BKTMAX ((WORD) 65535) /* Maximum number of buckets */
#define VEPNIL 0 /* Nil virtual entry point offset */
#define VNIL 0L /* Virtual nil pointer */
/*
* Module flags */ #define FNEWOMF 0x01 /* Set if mod. has MS OMF extensions */
#define FPRETYPES 0x02 /* Set if COMMENT A0 subtype 07 was found */
#define DEF_EXETYPE_WINDOWS_MAJOR 3 /* Default version of windows */
#define DEF_EXETYPE_WINDOWS_MINOR 10
/*
* Segment flags */ #define FCODE 0x1 /* Set if the segment is a code seg */
#define FNOTEMPTY 0x2 /* Set if the segment is not empty */
#define FHUGE 0x4 /* Huge data segment attribute flag */
#define FCODE386 0x8 /* 386 code segment */
/*
* OMF Record types: */ #define BLKDEF 0x7A /* Block definition record */
#define THEADR 0x80 /* Module header record */
#define LHEADR 0x82 /* Module header record */
#define COMENT 0x88 /* COMmENT record */
#define MODEND 0x8A /* MODule END record */
#define EXTDEF 0x8C /* EXTernal DEFinition record */
#define TYPDEF 0x8E /* TYPe DEFinition record */
#define PUBDEF 0x90 /* PUBlic DEFinition record */
#define LINNUM 0x94 /* LINe NUMbers record */
#define LNAMES 0x96 /* LNAMES record */
#define SEGDEF 0x98 /* SEGment DEFinition record */
#define GRPDEF 0x9A /* GRouP DEFinition record */
#define FIXUPP 0x9C /* Fixup record */
#define LEDATA 0xA0 /* Logical Enumerated DATA record */
#define LIDATA 0xA2 /* Logical Iterated DATA record */
#define COMDEF 0xB0 /* COMmunal DEFinition record */
#define BAKPAT 0xB2 /* BAcKPATch record */
#define LEXTDEF 0xB4 /* Local EXTDEF */
#define LPUBDEF 0xB6 /* Local PUBDEF */
#define LCOMDEF 0xB8 /* Local COMDEF */
#define CEXTDEF 0xbc /* COMDAT EXTDEF */
#define COMDAT 0xc2 /* COMDAT - MS OMF Extension */
#define LINSYM 0xc4 /* Line numbers for COMDAT */
#define ALIAS 0xc6 /* ALIAS record */
#define NBAKPAT 0xc8 /* BAKPAT for COMDAT */
#define LLNAMES 0xca /* Local LNAME */
#define LIBHDR 0xF0 /* Library header record type */
#define DICHDR 0xF1 /* Dictionary header type (F1H) */
#if OMF386
#define IsBadRec(r) (r < 0x6E || r > 0xca)
#else
#define IsBadRec(r) (r < 0x6E || r > 0xca || (r & 1) != 0)
#endif
#if _MSC_VER < 700
#define __cdecl _cdecl
#endif
/*
* Version-specific constants */ #if OIAPX286
#define DFSTBIAS 0x3F /* Default bias of seg. table ref.s */
#endif
#if LIBMSDOS
#define sbPascalLib "\012PASCAL.LIB"
/* Pascal library name as SBTYPE */ #endif
#if LIBXENIX
#define MAGICARCHIVE 0177545 /* Magic number for archive */
#define ARHEADLEN 26 /* Length of archive header */
#define ARDICTLEN (2 + ARHEADLEN) /* Length of archive dictionary */
#define ARDICTLOC (2 + ARDICTLEN) /* Offset of archive dictionary */
/* Note: Fields in the following struct definition are defined as
* byte arrays for generality. On the DEC20, for instance, a byte, * and a word and a long all use 36 bits; on the 8086, the corresponding * numbers are 8, 16, and 32 bits. It is a shame to have to define * the record in such a fashion, but since there is no "standard," * that's the way it goes. */ typedef struct { BYTE arName[14]; /* Archive name */ BYTE arDate[4]; /* Archive date */ BYTE arUid; /* User I.D. */ BYTE arGid; /* Group I.D. */ BYTE arMode[2]; /* Mode */ BYTE arLen[4]; /* Length of archive */ } ARHEADTYPE; /* Archive header type */ #endif
typedef BYTE ALIGNTYPE; typedef WORD AREATYPE; typedef BYTE ATTRTYPE; typedef BYTE FIXUTYPE; typedef BYTE FTYPE; typedef BYTE GRTYPE; typedef BYTE FAR *HTETYPE; typedef WORD IOVTYPE; typedef BYTE KINDTYPE; typedef WORD LNAMETYPE; /* LNAME index */ typedef void FAR *PROPTYPE; #if EXE386 OR OMF386
typedef DWORD RATYPE; #else
typedef WORD RATYPE; #endif
#if NEWSYM
typedef BYTE FAR *RBTYPE; #else
#if BIGSYM
typedef long RBTYPE; #else
typedef WORD RBTYPE; #endif
#endif
typedef WORD RECTTYPE; typedef WORD SATYPE; typedef WORD SEGTYPE; typedef WORD SNTYPE; typedef BYTE TYSNTYPE; #if MSGMOD
typedef WORD MSGTYPE; #else
typedef char *MSGTYPE; #endif
typedef struct _SYMBOLUSELIST { int cEntries; /* # of entries on the list */ int cMaxEntries; /* max # of entries on the list */ RBTYPE *pEntries; } SYMBOLUSELIST;
typedef struct _AHTETYPE /* Attribute hash table entry */ { RBTYPE rhteNext; /* Virt addr of next entry */ ATTRTYPE attr; /* Attribute */ RBTYPE rprop; /* Virt addr of property list */ WORD hashval; /* Hash value */ BYTE cch[1]; /* Length-prefixed symbol */ } AHTETYPE;
typedef struct _APROPTYPE /* Property sheet */ { RBTYPE a_next; /* Link to next entry */ ATTRTYPE a_attr; /* Attribute */ BYTE a_rgb[1]; /* Rest of record */ } APROPTYPE;
typedef struct _APROPEXPTYPE { RBTYPE ax_next; /* Next item in property list */ ATTRTYPE ax_attr; /* Property cell type */ RBTYPE ax_symdef; /* Pointer to PUBDEF or EXTDEF */ WORD ax_ord; /* Export ordinal */ SATYPE ax_sa; /* Segment number */ RATYPE ax_ra; /* Offset in segment */ BYTE ax_nameflags; /* Resident name/no name flag */ BYTE ax_flags; /* Flag byte information */ RBTYPE ax_NextOrd; /* Next item in export list */ } APROPEXPTYPE; /* Exported name type */
#if OSEGEXE
/*
* Format of ax_nameflags - flags used internaly by linker * * 7 6 5 4 3 2 1 0 - bit no * | | | | * | | | +-- resident name * | | +---- discard name after processing * | +------ forwarder * +-------- constant export */
#define RES_NAME 0x01
#define NO_NAME 0x02
#define FORWARDER_NAME 0x04
#define CONSTANT 0x08
#endif
typedef struct _CONTRIBUTOR { struct _CONTRIBUTOR FAR *next; /* Next on list */ DWORD len; /* Size of contribution */ DWORD offset; /* Offset in logical segment */ RBTYPE file; /* OBJ file descriptor */ } CONTRIBUTOR;
typedef struct _APROPSNTYPE { RBTYPE as_next; /* Next item in property list */ ATTRTYPE as_attr; /* Attribute */ #if OSEGEXE
BYTE as_fExtra; /* Extra linker ONLY flags */ #endif
DWORD as_cbMx; /* Size of segment */ DWORD as_cbPv; /* Size of previous segment */ SNTYPE as_gsn; /* Global SEGDEF number */ GRTYPE as_ggr; /* Global GRPDEF number */ #if OVERLAYS
IOVTYPE as_iov; /* Segment's overlay number */ #endif
RBTYPE as_rCla; /* Pointer to segment class symbol */ WORD as_key; /* Segment definition key */ #if OSEGEXE
#if EXE386
DWORD as_flags; #else
WORD as_flags; #endif
#else
BYTE as_flags; #endif
BYTE as_tysn; /* Segment's combine-type */ CONTRIBUTOR FAR *as_CHead; /* Head of contributing .OBJ files list */ CONTRIBUTOR FAR *as_CTail; /* Tail of contributing .OBJ files list */ RBTYPE as_ComDat; /* Head of list of COMDATs allocated in this segment */ RBTYPE as_ComDatLast; /* Tail of list of COMDATs allocated in this segment */ } APROPSNTYPE; /* SEGDEF property cell */
#if OSEGEXE
/*
* Format of as_fExtra - flags used internaly by linker * * 7 6 5 4 3 2 1 0 - bit no * | | | | * | | | +-- segment defined in the .DEF file * | | +---- mixing use16 and use32 allowed * | +------ don't pad this segment for /INCREMENTAL * +-------- COMDAT_SEGx created by the linker */
#define FROM_DEF_FILE 0x01
#define MIXED1632 0x02
#define NOPAD 0x04
#define COMDAT_SEG 0x08
#endif
typedef struct _APROPNAMETYPE { RBTYPE an_next; ATTRTYPE an_attr; RBTYPE an_sameMod; // Next PUBDEF from the same obj file
WORD an_CVtype; // CodeView type index
// Have to be in the order as in
// struct _APROPUNDEFTYPE
GRTYPE an_ggr; #if NEWLIST
RBTYPE an_rbNxt; #endif
SNTYPE an_gsn; RATYPE an_ra; #if OVERLAYS
RATYPE an_thunk; // Thunk offset - used by /DYNAMIC or EXE386
#endif
#if OSEGEXE
#if EXE386
RBTYPE an_nextImp; /* Next import on the list */ DWORD an_thunk; /* Address of the thunk */ DWORD an_name; /* Imported procedure name offset */ DWORD an_entry; /* Entry name offset or ordinal */ DWORD an_iatEntry; /* Value stored in the Import Address Table */ WORD an_module; /* Module directory entry index */ WORD an_flags; /* Flags */ #else
WORD an_entry; /* Entry name offset or ordinal */ WORD an_module; /* Module name offset */ BYTE an_flags; /* Flags for various attributes */ #endif /* also used for imod if !(an_flags&FIMPORT) */
#endif
} APROPNAMETYPE;
/*
* Format of an_flags * * NOTE: 16-bit version is used only by link386 * * 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 - bit no. * | | | | | | | | | | | * | | | | | | | | | | +-- public is an import * | | | | | | | | | +---- import by ordinal * | | | | | | | | +------ public identifier is printable * | | | | | +-+-+-------- floating-point special symbol type * | | | | +-------------- secondary floating-point special symbol * | | | +---------------- unreferenced public symbol * | | +------------------ 16-bit reference to imported symbol * | +-------------------- 32-bit reference to imported symbol * +---------------------- importing DATA symbol */
#define FIMPORT 0x01 /* Set if the public is an import */
#define FIMPORD 0x02 /* Set if the import ib by ordinal */
#define FPRINT 0x04 /* Set if public is printable */
#define FUNREF 0x80 /* Set if public is not referenced */
#define FFPMASK 0x38 /* Floating-point symbol mask */
#define FFPSHIFT 3 /* Shift constant to get to FFPMASK */
#define FFP2ND 0x40 /* Secondary f.p. symbol (FJxRQQ) */
#if EXE386
#define REF16 0x100 // 16-bit reference to imported symbol
#define REF32 0x200 // 32-bit reference to imported symbol
#define IMPDATA 0x400 // importing DATA symbol
#endif
typedef struct _APROPIMPTYPE { RBTYPE am_next; /* Next property cell on list */ ATTRTYPE am_attr; /* Property cell type */ #if EXE386
DWORD am_offset; /* Offset in imported names table */ #else
WORD am_offset; /* Offset in imported names table */ #endif
WORD am_mod; /* Index into Module Reference Table */ #if SYMDEB
APROPNAMETYPE FAR *am_public; /* Pointer to matching public symbol */ #endif
} APROPIMPTYPE; /* Imported name record */
typedef struct _APROPCOMDAT { RBTYPE ac_next; /* Next property cell on list */ ATTRTYPE ac_attr; /* Property cell type */ GRTYPE ac_ggr; /* Global group index */ SNTYPE ac_gsn; /* Global segment index */ RATYPE ac_ra; /* Offset relative from COMDAT symbol */ DWORD ac_size; /* Size of data block */ WORD ac_flags; /* Low byte - COMDAT flags */ /* High byte - linker exclusive flags */ #if OVERLAYS
IOVTYPE ac_iOvl; /* Overlay number where comdat has to be allocated */ #endif
BYTE ac_selAlloc; /* Selection/Allocation criteria */ BYTE ac_align; /* COMDAT aligment if different from segment aligment */ DWORD ac_data; /* Data block check sum */ RBTYPE ac_obj; /* Object file */ long ac_objLfa; /* Offset in the object file */ RBTYPE ac_concat; /* Concatenation data blocks */ RBTYPE ac_sameSeg; /* Next COMDAT in the same segment */ RBTYPE ac_sameFile; /* Next COMDAT from the same object file */ RBTYPE ac_order; /* Next COMDAT on the ordered list */ RBTYPE ac_pubSym; /* PUBDEF for this COMDAT */ #if TCE
SYMBOLUSELIST ac_uses; /* List of referenced functions */ int ac_fAlive; /* The result of TCE, TRUE if this COMDAT is needed
/* in the final memory image */ #endif
} APROPCOMDAT;
/*
* Format of ac_flags: * * 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 - bit no * | | | | | | | | | | * | | | | | | | | | +-- continuation bit * | | | | | | | | +---- iterated data bit * | | | | | | | +------ COMDAT symbol has local scope * | | | | | | +-------- allocate in the root when doing overlays * | | | | | +------------------ COMDAT for ordered procedure * | | | | +-------------------- definition of ordered COMDAT found among .OBJ files * | | | +---------------------- anonymus allocation completed * | | +------------------------- referenced COMDAT * | +---------------------------- selected copy of COMDAT * +------------------------------- skip continuation records */
#define CONCAT_BIT 0x01
#define ITER_BIT 0x02
#define LOCAL_BIT 0x04
#define VTABLE_BIT 0x08
#define ORDER_BIT 0x10
#define DEFINED_BIT 0x20
#define ALLOCATED_BIT 0x40
#define REFERENCED_BIT 0x80
#define SELECTED_BIT 0x100
#define SKIP_BIT 0x200
/*
* Format of ac_selAlloc: * * 7 6 5 4 3 2 1 0 - bit no * | | | | | | | | * | | | | +-+-+-+-- allocation criteria * +-+-+-+---------- selection criteria */
#define SELECTION_MASK 0xf0
#define ALLOCATION_MASK 0x0f
#define ONLY_ONCE 0x00
#define PICK_FIRST 0x10
#define SAME_SIZE 0x20
#define EXACT 0x30
#define EXPLICIT 0x00
#define CODE16 0x01
#define DATA16 0x02
#define CODE32 0x03
#define DATA32 0x04
#define ALLOC_UNKNOWN 0x05
typedef struct _APROPALIAS { RBTYPE al_next; // Next property cell on list
ATTRTYPE al_attr; // Property cell type
RBTYPE al_sameMod; // Next ALIAS/PUBDEF from the same obj file
RBTYPE al_sym; // Substitute symbol
} APROPALIAS;
#if SYMDEB
typedef struct _CVCODE { struct _CVCODE FAR *next; // Next code segment
RATYPE cb; // Length of code segment
SEGTYPE seg; // Logical segment index
RATYPE ra; // Offset in the logical code segment
} CVCODE; // Code segment descriptor for CV
typedef struct _CVINFO { DWORD cv_cbTyp; // Length of $$TYPES
BYTE FAR *cv_typ; // $$TYPES
DWORD cv_cbSym; // Length of $$SYMBOLS
BYTE FAR *cv_sym; // $$SYMBOLS
} CVINFO;
#endif
typedef struct _APROPFILETYPE { RBTYPE af_next; /* Next in chain */ ATTRTYPE af_attr; /* Attribute number */ IOVTYPE af_iov; /* Overlay number */ RBTYPE af_FNxt; /* Next file in list */ long af_lfa; /* Starting address in file */ RBTYPE af_rMod; /* Pointer to module name symbol */ BYTE af_flags; /* Info about module */ #if SYMDEB
CVINFO FAR *af_cvInfo; // CodeView information
WORD af_cCodeSeg; // Number of code segments
struct _CVCODE FAR *af_Code; // List of code segments
struct _CVCODE FAR *af_CodeLast; // Tail of the list of code segments
RBTYPE af_publics; // List of public symbols
struct _CVSRC FAR *af_Src; // List of source lines
struct _CVSRC FAR *af_SrcLast; // Tail of the list of source lines
#endif
RBTYPE af_ComDat; /* First COMDAT picked from this object module */ RBTYPE af_ComDatLast; /* Last on the list */ #if ILINK
WORD af_cont; /* count of contributions */ WORD af_ientOnt; /* first index of ENTONTTYPEs */ WORD af_imod; /* module index */ #define IMODNIL ((WORD) 0)
#endif
char af_ifh; /* Library number */ #if NEWIO
char af_fh; /* File handle */ #endif
} APROPFILETYPE; /* File property cell */
#if SYMDEB
typedef struct _GSNINFO { SNTYPE gsn; // Global contribution index
RATYPE comdatRa; // COMDAT offset
DWORD comdatSize; // COMDAT size
WORD comdatAlign; // COMDAT alignment
WORD fComdat; // TRUE if COMDAT gsn
} GSNINFO;
#if FALSE
typedef struct _CVIMP { WORD iMod; /* Index to Module Reference Table */ #if EXE386
DWORD iName; /* Index to Imported Name Table */ #else
WORD iName; /* Index to Imported Name Table */ #endif
char far *address; /* Address of import */ } CVIMP; /* Import descriptor for CV */ #endif
#endif
typedef struct _APROPGROUPTYPE { RBTYPE ag_next; /* Next in chain */ ATTRTYPE ag_attr; /* Attribute */ BYTE ag_ggr; /* Global GRPDEF number */ } APROPGROUPTYPE; /* GRPDEF property cell */
typedef struct _PLTYPE /* Property list type */ { struct _PLTYPE FAR *pl_next; /* Link to next in chain */ RBTYPE pl_rprop; /* Symbol table pointer */ } PLTYPE;
typedef struct _APROPUNDEFTYPE { RBTYPE au_next; /* Next in chain */ ATTRTYPE au_attr; /* Attribute */ RBTYPE au_sameMod; // Next COMDEF from the same obj file
WORD au_CVtype; // CodeView type index
// Have to be in the same order as in
// struct _APROPNAMETYPE
ATTRTYPE au_flags; /* Flags */ RBTYPE au_Default; /* Default resolution for weak externs */ union { /* The union of these fields assumes that au_fFil is only used
* for a list of references to an unresolved external. Au_module * is used for COMDEFs, which are always resolved. */ WORD au_module; /* Module index */ PLTYPE FAR *au_rFil; /* List of file references */ } u; long au_len; /* Length of object */ WORD au_cbEl; /* Size of an element in bytes */ #if TCE
int au_fAlive; /* Set is referenced from non-COMDAT record */ #endif
} APROPUNDEFTYPE; /* Undefined symbol property cell */
/*
* Format of au_flags * * 7 6 5 4 3 2 1 0 - bit no * | | | | | | * | | | | | +--- C communal * | | | | +----- weak external - au_Default valid * | | | +------- undecided yet * | | +--------- strong external - au_Default invalid * | +----------- aliased external - au_Default point to ALIAS record * +------------- search library for aliased external */
#define COMMUNAL 0x01 /* C communal */
#define WEAKEXT 0x02 /* Weak external - use default resolution */
#define UNDECIDED 0x04 /* Undecided yet but don't throw away default resolution */
#define STRONGEXT 0x08 /* Strong external - don't use default resolution */
#define SUBSTITUTE 0x10 /* Aliased external - use au_Dafault to find ALIAS */
#define SEARCH_LIB 0x20 /* Search library for aliased external */
typedef struct _EPTYPE /* Entry point type */ { struct _EPTYPE FAR *ep_next; /* Link to next in chain */ WORD ep_sa; /* Segment containing entry point */ DWORD ep_ra; /* Offset of entry point */ WORD ep_ord; /* Entry Table ordinal */ } EPTYPE;
#define CBHTE (sizeof(AHTETYPE))
#define CBPROPSN (sizeof(APROPSNTYPE))
#define CBPROPNAME (sizeof(APROPNAMETYPE))
#define CBPROPFILE (sizeof(APROPFILETYPE))
#define CBPROPGROUP (sizeof(APROPGROUPTYPE))
#define CBPROPUNDEF (sizeof(APROPUNDEFTYPE))
#define CBPROPEXP (sizeof(APROPEXPTYPE))
#define CBPROPIMP (sizeof(APROPIMPTYPE))
#define CBPROPCOMDAT (sizeof(APROPCOMDAT))
#define CBPROPALIAS (sizeof(APROPALIAS))
#define UPPER(b) (b >= 'a' && b <= 'z'? b - 'a' + 'A': b)
/* Upper casing macro */ #if OSMSDOS
#define sbDotDef "\004.def" /* Definitions file extension */
#define sbDotCom "\004.com" /* COM file extension */
#define sbDotExe "\004.exe" /* EXE file extension */
#define sbDotLib "\004.lib" /* Library file extension */
#define sbDotMap "\004.map" /* Map file extension */
#define sbDotObj "\004.obj" /* Object file extension */
#define sbDotDll "\004.dll" /* Dynlink file extension */
#define sbDotQlb "\004.qlb" /* Quick library extension */
#define sbDotDbg "\004.dbg" /* Cv info for .COM */
#if EXE386
#define sbFlat "\004FLAT" /* Pseudo-group name */
#endif
#endif
#if OSXENIX
#define sbDotDef "\004.def" /* Definitions file extension */
#define sbDotExe "\004.exe" /* EXE file extension */
#define sbDotCom "\004.com" /* COM file extension */
#define sbDotLib "\004.lib" /* Library file extension */
#define sbDotMap "\004.map" /* Map file extension */
#define sbDotObj "\004.obj" /* Object file extension */
#define sbDotDll "\004.dll" /* Dynlink file extension */
#define sbDotQlb "\004.qlb" /* Quick library extension */
#endif
#if M_WORDSWAP AND NOT M_BYTESWAP
#define CBEXEHDR sizeof(struct exe_hdr)
#define CBLONG sizeof(long)
#define CBNEWEXE sizeof(struct new_exe)
#define CBNEWRLC sizeof(struct new_rlc)
#define CBNEWSEG sizeof(struct new_seg)
#define CBWORD sizeof(WORD)
#else
#define CBEXEHDR _cbexehdr
#define CBLONG _cblong
#define CBNEWEXE _cbnewexe
#define CBNEWRLC _cbnewrlc
#define CBNEWSEG _cbnewseg
#define CBWORD _cbword
extern char _cbexehdr[]; extern char _cblong[]; extern char _cbnewexe[]; extern char _cbnewrlc[]; extern char _cbnewseg[]; extern char _cbword[]; #endif
/*
* Structure to represent floating-point symbols, i.e. FIxRQQ, FJxRQQ * pairs. */ struct fpsym { BYTE *sb; /* Primary symbol, length-prefixed */ BYTE *sb2; /* Secondary symbol, length-prefixed */ };
#if ECS
extern BYTE fLeadByte[0x80]; #define IsLeadByte(b) ((unsigned char)(b) >= 0x80 && \
fLeadByte[(unsigned char)(b)-0x80]) #endif
#ifdef _MBCS
#define IsLeadByte(b) _ismbblead(b)
#endif
#if OSEGEXE
#if EXE386
#define RELOCATION struct le_rlc
typedef struct le_rlc *RLCPTR; #define IsIOPL(f) (FALSE) /* Check if IOPL bit set */
#define Is32BIT(f) (TRUE) /* Check if 32-bit segment */
#define Is16BIT(f) (!Is32BIT(f)) /* Check if 16-bit segment */
#define IsDataFlg(f) (((f) & OBJ_CODE) == 0)
#define IsCodeFlg(f) (((f) & OBJ_CODE) != 0)
#define RoundTo64k(x) (((x) + 0xffffL) & ~0xffffL)
#else
#define RELOCATION struct new_rlc
typedef struct new_rlc FAR *RLCPTR; #define IsIOPL(f) (((f) & NSDPL) == (2 << SHIFTDPL))
/* Check if IOPL bit set */ #define Is32BIT(f) (((f) & NS32BIT) != 0)
/* Check if 32-bit code segment */ #define IsDataFlg(x) (((x) & NSTYPE) == NSDATA)
#define IsCodeFlg(x) (((x) & NSTYPE) == NSCODE)
#define IsConforming(x) (((x) & NSCONFORM) != 0)
#define NonConfIOPL(x) (!IsConforming(x) && IsIOPL(x))
#endif
#define HASH_SIZE 128
#define BUCKET_DEF 4
typedef struct _RLCBUCKET { WORD count; // Number of relocations in the bucket
WORD countMax; // Allocated size
RLCPTR rgRlc; // Run-time relocations
} RLCBUCKET;
typedef struct _RLCHASH // Hash vector for run-time relocations
{ WORD count; // Number of relocations
RLCBUCKET FAR *hash[HASH_SIZE]; // Hash vector
} RLCHASH;
# if ODOS3EXE
extern FTYPE fNewExe; # else
#define fNewExe TRUE
# endif
# endif
#if NOT OSEGEXE
#define fNewExe FALSE
#define dfData 0
#define dfCode FCODE
#define IsCodeFlg(x) ((x & FCODE) != 0)
#define IsDataFlg(x) ((x & FCODE) == 0)
#endif /* NOT OSEGEXE */
/*
* TYPEOF = macro to get basic record type of records which may have * a 386 extension. Used for LEDATA, LIDATA, and FIXUPP. */ #if OMF386
#define TYPEOF(r) (r&~1)
#else
#define TYPEOF(r) r
#endif
typedef AHTETYPE FAR *AHTEPTR; typedef APROPTYPE FAR *APROPPTR; typedef APROPEXPTYPE FAR *APROPEXPPTR; typedef APROPSNTYPE FAR *APROPSNPTR; typedef APROPNAMETYPE FAR *APROPNAMEPTR; typedef APROPIMPTYPE FAR *APROPIMPPTR; typedef APROPFILETYPE FAR *APROPFILEPTR; typedef APROPGROUPTYPE FAR *APROPGROUPPTR; typedef APROPUNDEFTYPE FAR *APROPUNDEFPTR; typedef APROPCOMDAT FAR *APROPCOMDATPTR; typedef APROPALIAS FAR *APROPALIASPTR;
#ifdef O68K
#define MAC_NONE 0 /* Not a Macintosh exe */
#define MAC_NOSWAP 1 /* Not a swappable Macintosh exe */
#define MAC_SWAP 2 /* Swappable Macintosh exe */
#endif
|