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 = @(#)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 */
|