119 lines
4.3 KiB
C
119 lines
4.3 KiB
C
|
/* SCCSID = @(#)bndrel.h 4.3 86/07/21 */
|
||
|
/*
|
||
|
* Copyright Microsoft Corporation, 1983, 1984, 1985
|
||
|
*
|
||
|
* This Module contains Proprietary Information of Microsoft
|
||
|
* Corporation and should be treated as Confidential.
|
||
|
*
|
||
|
* bndrel.h
|
||
|
* Relocation record definitions
|
||
|
*/
|
||
|
#if OEXE
|
||
|
|
||
|
// DOS run-time relocation record
|
||
|
|
||
|
#pragma pack(1)
|
||
|
|
||
|
typedef struct _DOSRLC
|
||
|
{
|
||
|
WORD ra; // Relocation offset
|
||
|
SATYPE sa; // Relocation segment
|
||
|
}
|
||
|
DOSRLC;
|
||
|
|
||
|
#pragma pack()
|
||
|
|
||
|
#define CBRLE sizeof(DOSRLC)
|
||
|
|
||
|
#if FEXEPACK
|
||
|
|
||
|
// EXEPACKed DOS run-time relocation storage
|
||
|
|
||
|
typedef struct _FRAMERLC
|
||
|
{
|
||
|
WORD count; // Number of relocation for this frame
|
||
|
WORD size; // Size of rgRlc
|
||
|
WORD FAR *rgRlc; // Array of packed relocation offsets
|
||
|
}
|
||
|
FRAMERLC;
|
||
|
|
||
|
#define DEF_FRAMERLC 64
|
||
|
|
||
|
#endif
|
||
|
|
||
|
// Not EXEPACKed DOS run-time relocation storage
|
||
|
|
||
|
typedef struct _RUNRLC
|
||
|
{
|
||
|
WORD count; // Number of relocation for this overlay
|
||
|
WORD size; // Size of rgRlc
|
||
|
DOSRLC FAR *rgRlc; // Array of relocation addresses
|
||
|
}
|
||
|
RUNRLC;
|
||
|
|
||
|
#define DEF_RUNRLC 128
|
||
|
#endif
|
||
|
|
||
|
#define LOCLOBYTE 0 /* Lo-byte (8-bit) fixup */
|
||
|
#define LOCOFFSET 1 /* Offset (16-bit) fixup */
|
||
|
#define LOCSEGMENT 2 /* Segment (16-bit) fixup */
|
||
|
#define LOCPTR 3 /* "Pointer" (32-bit) fixup */
|
||
|
#define LOCHIBYTE 4 /* Hi-byte fixup (unimplemented) */
|
||
|
#define LOCLOADOFFSET 5 /* Loader-resolved offset fixup */
|
||
|
#define LOCOFFSET32 9 /* 32-bit offset */
|
||
|
#define LOCPTR48 11 /* 48-bit pointer */
|
||
|
#define LOCLOADOFFSET32 13 /* 32-bit loader-resolved offset */
|
||
|
#define T0 0 /* Target method T0 (segment index) */
|
||
|
#define T1 1 /* Target method T1 (group index) */
|
||
|
#define T2 2 /* Target method T2 (extern index) */
|
||
|
#define F0 0 /* Frame method F0 (segment index) */
|
||
|
#define F1 1 /* Frame method F1 (group index) */
|
||
|
#define F2 2 /* Frame method F2 (extern index) */
|
||
|
#define F3 3 /* Frame method F3 (frame number) */
|
||
|
#define F4 4 /* Frame method F4 (location) */
|
||
|
#define F5 5 /* Frame method F5 (target) */
|
||
|
|
||
|
/*
|
||
|
* Fixup record bits
|
||
|
*/
|
||
|
|
||
|
#define F_BIT 0x80
|
||
|
#define T_BIT 0x08
|
||
|
#define P_BIT 0x04
|
||
|
#define M_BIT 0x40
|
||
|
#define S_BIT 0x20
|
||
|
#define THREAD_BIT 0x80
|
||
|
#define D_BIT 0x40
|
||
|
|
||
|
#define FCODETOCODE 0
|
||
|
#define FCODETODATA 1
|
||
|
#define FDATATOCODE 2
|
||
|
#define FDATATODATA 3
|
||
|
#define BREAKPOINT 0xCC /* Op code for interrupt 3 (brkpt) */
|
||
|
#define CALLFARDIRECT 0x9A /* Op code for long call */
|
||
|
#define CALLNEARDIRECT 0xE8 /* Op code for short call */
|
||
|
#define JUMPFAR 0xEA /* Op code for long jump */
|
||
|
#define JUMPNEAR 0xE9 /* Op code for short (3-byte) jump */
|
||
|
#define KINDSEG 0
|
||
|
#define KINDGROUP 1
|
||
|
#define KINDEXT 2
|
||
|
#define KINDLOCAT 4
|
||
|
#define KINDTARGET 5
|
||
|
#define NOP 0x90 /* Op code for no-op */
|
||
|
#define PUSHCS 0x0E /* Op code for push CS */
|
||
|
#define INTERRUPT 0xCD /* Op code for interrupt */
|
||
|
|
||
|
typedef struct _FIXINFO
|
||
|
{
|
||
|
WORD f_dri; /* Data record index */
|
||
|
WORD f_loc; /* Fixup location type */
|
||
|
KINDTYPE f_mtd; /* Target specification method */
|
||
|
WORD f_idx; /* Target specification index */
|
||
|
DWORD f_disp; /* Target displacement */
|
||
|
KINDTYPE f_fmtd; /* Frame specification method */
|
||
|
WORD f_fidx; /* Frame specification index */
|
||
|
FTYPE f_self; /* Self-relative boolean */
|
||
|
FTYPE f_add; /* Additive fixup boolean */
|
||
|
}
|
||
|
FIXINFO; /* Fixup information record */
|