Windows NT 4.0 source code leak
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.
 
 
 
 
 
 

135 lines
3.5 KiB

/***********************************************************************
* Microsoft (R) 32-Bit Incremental Linker
*
* Copyright (C) Microsoft Corp 1992-95. All rights reserved.
*
* File: incr.h
*
* File Comments:
*
* This include file defines structures & prototypes for incr routines.
*
***********************************************************************/
#ifndef __INCR_H__
#define __INCR_H__
// various padding constants
#define DLL_IATPAD_PERCENT 20
#define DLL_IATPAD_CONST 10
#define DLL_STRPAD_PERCENT 10
#define DLL_STRPAD_CONST 256
#define BSS_PAD_PERCENT 20
#define BSS_PAD_CONST 8
#define CODE_PAD_PERCENT 25
#define CODE_PAD_CONST 4096
#define DATA_PAD_PERCENT 20
#define DATA_PAD_CONST 256
#define XDATA_PAD_PERCENT 10
#define XDATA_PAD_CONST 512
extern size_t cbJumpEntry; // size of each jump tbl entry
inline int CbJumpEntry()
{
assert(cbJumpEntry > 0);
return(cbJumpEntry);
}
#define CPEXT_WEAK 32 // count of externals in each chunk of weak externs
#define CPEXT_REFS 8 // count of externals in each chunk of referenced variables
#define CPEXT_MULT 16 // count of externals in each chunk of multiply defined variables
extern PLMOD plmodNewModsFromLibSrch; // list of mods added as a result of lib search.
// structures
typedef struct EXTCHUNK {
struct EXTCHUNK *pextChunkNext; // ptr to next chunk
} EXTCHUNK;
// list of externs
typedef struct LPEXT {
WORD cpextMax; // max count in chunk
WORD cpextCur; // count in current chunk
DWORD cpextTotal; // total count of externs in list
EXTCHUNK *pextChunkCur; // ptr to first chunk of externs
} LPEXT, *PLPEXT;
#define RgPext(pextChunk) ((EXTERNAL **)((pextChunk)+1))
typedef struct ENM_EXT_LIST {
ENM_BASE enm_base;
LPEXT lpext;
WORD ipext;
// public
PEXTERNAL pext;
} ENM_EXT_LIST, *PENM_EXT_LIST;
// to keep track who defined COMMON syms
typedef struct SYM_DEF {
PEXTERNAL pext;
PMOD pmod;
struct SYM_DEF * psdNext;
} SYM_DEF, *PSYM_DEF;
//
// function prototypes
//
INT IncrBuildImage(PPIMAGE);
VOID SaveExportInfo(PIMAGE, const char *, PEXPINFO);
BOOL FExportsChanged(PEXPINFO, BOOL);
VOID DetermineTimeStamps(VOID);
// jump table functions
PCON PconCreateJumpTable(PIMAGE);
VOID WriteJumpTable(PIMAGE, PCON, DWORD **, DWORD *);
VOID UpdateJumpTable(PIMAGE, DWORD**, DWORD *);
// fpo
VOID WriteFpoRecords(FPOI *, DWORD);
// pdata
VOID WritePdataRecords(PDATAI *, DWORD);
// symbol processing functions
ERRINC ChckExtSym(const char *, PIMAGE_SYMBOL, PEXTERNAL, BOOL);
ERRINC ChckAbsSym(const char *, PIMAGE_SYMBOL, PEXTERNAL, BOOL);
VOID AddExtToList(PLPEXT, BOOL, PEXTERNAL);
VOID AddExtToModRefList(PMOD, PEXTERNAL);
VOID AddExtToMultDefList(PEXTERNAL, PIMAGE);
BOOL RemoveExtFromDefList(PMOD, PEXTERNAL);
VOID RemovePrevDefn(PEXTERNAL);
VOID RemoveAllRefsToPext(PEXTERNAL);
VOID RestoreWeakSymVals(PIMAGE);
void InitEnmExtList(PENM_EXT_LIST, PLPEXT);
BOOL FNextEnmExtList(PENM_EXT_LIST);
void EnmEnmExtList(PENM_EXT_LIST);
// list manipulation functions
VOID AddArgToListOnHeap(PNAME_LIST, PARGUMENT_LIST);
BOOL FArgOnList(PNAME_LIST, PARGUMENT_LIST);
VOID SaveDirectiveSz(const char *, PST, PMOD);
BOOL FVerifyDirectivesPMOD(PIMAGE, PMOD, PNAME_LIST);
// sym handling (bss & absolutes)
VOID RecordSymDef(SYM_DEF **,PEXTERNAL,PMOD);
PMOD FindPmodDefiningSym(SYM_DEF *, PEXTERNAL);
// cleanup routine
INT CleanUp(PPIMAGE);
#if DBG
VOID DumpJmpTbl(PCON, PVOID);
VOID DumpReferences(PIMAGE);
#endif // DBG
#endif // __INCR_H__