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.
 
 
 
 
 
 

620 lines
15 KiB

/***********************************************************************
* Microsoft (R) 32-Bit Incremental Linker
*
* Copyright (C) Microsoft Corp 1992-1996. All rights reserved.
*
* File: globals.h
*
* File Comments:
*
* This file declares all global data structures used by the linker
*
***********************************************************************/
typedef struct ARGUMENT_LIST {
char *OriginalName;
char *ModifiedName;
PARP parp; // parsed representation of argument (if switch)
DWORD TimeStamp;
WORD Flags;
struct ARGUMENT_LIST *Next;
} ARGUMENT_LIST, *PARGUMENT_LIST;
typedef struct NAME_LIST {
PARGUMENT_LIST First;
PARGUMENT_LIST Last;
DWORD Count;
} NAME_LIST, *PNAME_LIST;
typedef struct NUM_ARGUMENT_LIST {
char *szOriginalName;
char *szModifiedName;
DWORD dwNumber;
WORD Flags;
struct NUM_ARGUMENT_LIST *Next;
} NUM_ARGUMENT_LIST, *PNUM_ARGUMENT_LIST;
typedef struct NUMBER_LIST {
PNUM_ARGUMENT_LIST First;
PNUM_ARGUMENT_LIST Last;
WORD Count;
} NUMBER_LIST, *PNUMBER_LIST;
struct CVSEEKS {
DWORD Base;
DWORD SubsectionDir;
};
struct CVSUBSECTION {
DWORD PointerToSubsection;
DWORD SizeOfSubsection;
DWORD Precompiled;
};
typedef struct CVINFO {
PMOD pmod; // the module represented
char *ObjectFilename;
CVSUBSECTION Publics;
CVSUBSECTION Locals;
CVSUBSECTION Types;
CVSUBSECTION Linenumbers;
CVSUBSECTION Module;
} CVINFO, *PCVINFO;
// CVSEG: used temporarily in EmitCvInfo to build the sstModule table for
// each module. Each CVSEG will become an array element in the sstModule
// subsection.
struct CVSEG {
PGRP pgrp; // the group which the CON's are in
PCON pconFirst, pconLast; // first and last CON described
struct CVSEG *pcvsegNext;
};
enum DUMP_RAW_DISPLAY_TYPE {
Bytes,
Shorts,
Longs
};
enum DEBUG_INFO {
None,
Minimal,
Partial,
Full
};
enum DEBUG_TYPE {
NoDebug = 0,
CoffDebug = 1,
CvDebug = 2,
FpoDebug = 4,
FixupDebug = 8,
MiscDebug = 16
};
enum TOOL_TYPE {
NotUsed,
Linker,
Librarian,
Dumper,
Editor,
#if DBG
DbInspector,
#endif // DBG
Binder
};
enum FORCE_TYPE {
ftNone = 0,
ftUnresolved = 1,
ftMultiple = 2
};
struct LINKSWITCH {
BOOL Out;
BOOL Base;
BOOL Heap;
BOOL Stack;
#ifdef NT_BUILD
BOOL fCallTree;
#endif
BOOL fChecksum;
BOOL fDriver;
BOOL fFixed;
BOOL fMacBundle;
BOOL fMap;
BOOL fMapLines;
BOOL fMiscInRData;
BOOL fNewGlue; // UNDONE: Temporary. Always on for VC++ 5.0
BOOL fNewRelocs; // UNDONE: Temporary for testing PE VxDs
BOOL fNoDefaultLibs;
BOOL fNoEntry;
BOOL fNoPack;
BOOL fNoPagedCode;
BOOL fNotifyFullBuild;
BOOL fOptIdata;
BOOL fOrder;
BOOL fPadMipsCode;
BOOL fPE;
BOOL fProfile;
BOOL fROM;
BOOL fTCE;
DWORD GpSize;
DEBUG_INFO DebugInfo;
DEBUG_TYPE DebugType;
FORCE_TYPE Force;
char *szMacCreator;
char *szMacType;
};
struct LIBSWITCH {
char *DllName; // for .def only
char *DllExtension; // for .def only
BOOL List;
BOOL DefFile;
};
struct DUMPSWITCH {
WORD LinkerMember;
WORD RawDisplaySize;
WORD SymbolType;
DUMP_RAW_DISPLAY_TYPE RawDisplayType;
BOOL Headers;
BOOL Relocations;
BOOL Linenumbers;
BOOL Symbols;
BOOL BaseRelocations;
BOOL Imports;
BOOL Exports;
BOOL RawData;
BOOL Summary;
BOOL ArchiveMembers;
BOOL FpoData;
BOOL PData;
BOOL OmapTo;
BOOL OmapFrom;
BOOL Fixup;
BOOL SymbolMap;
BOOL Warnings;
BOOL Disasm;
BOOL Directives;
};
struct SWITCH {
LINKSWITCH Link;
LIBSWITCH Lib;
DUMPSWITCH Dump;
};
struct SWITCH_INFO {
DWORD UserOpts; // bit vector for user set options
DWORD cbComment; // byte count of comment
char *szEntry; // entry point
char *szMacInit; // PowerMac init routine
char *szMacTerm; // PowerMac term routine
PLEXT plextIncludes; // list of include symbols
NAME_LIST SectionNames; // list of -section cmdline attributes
};
typedef BYTE OPTION_ACTION;
struct SECTION_INFO {
char *Name;
DWORD Characteristics;
};
struct RESERVED_SECTION {
SECTION_INFO ReadOnlyData;
SECTION_INFO Common;
SECTION_INFO GpData; // MIPS/Alpha
SECTION_INFO Xdata; // MIPS/Alpha
SECTION_INFO Debug;
SECTION_INFO Export;
SECTION_INFO ImportDescriptor;
SECTION_INFO Resource;
SECTION_INFO Exception;
SECTION_INFO BaseReloc;
SECTION_INFO Directive;
SECTION_INFO CvSymbols;
SECTION_INFO CvTypes;
SECTION_INFO CvPTypes;
SECTION_INFO FpoData;
SECTION_INFO Text; // PowerMac
SECTION_INFO Data; // PowerMac
SECTION_INFO PowerMacLoader; // PowerMac
};
enum THKSYM
{
thksymExport, // Export symbol (Function/Data)
thksymIAT, // __imp_Function/__imp_Data
thksymName, // Name in .idata$6 section
thksymToc, // .toc
thksymMax,
};
struct THUNK_RELOC
{
BYTE VirtualAddress;
BYTE thksym;
WORD Type;
};
struct THUNK_INFO
{
const BYTE *EntryCode;
const THUNK_RELOC *EntryCodeRelocs;
DWORD EntryCodeSize;
WORD EntryCodeRelocsCount;
WORD ExportReloc;
WORD ImportReloc;
WORD ThunkReloc;
WORD DebugSectionRelReloc;
WORD DebugSectionNumReloc;
};
struct BASE_RELOC {
WORD Type;
SHORT isecTarget;
DWORD rva;
DWORD Value;
};
// VxD-specific data structures:
struct VXDRELOC {
struct VXDRELOC *pvxdrelocNext;
BYTE bType;
BYTE isecTarget; // Destination address in section:offset format:
DWORD ibTarget;
WORD cibAlloc; // Number of DWORDs for ib allocated
BYTE cibSrc; // Number of entries in chain
WORD *pibSrc; // Pointer to array of source offsets
};
#define VXD_BLOCKSIZE 16 // pibSrc[] array in VXD_BASE_RELOC grows in
// increments of this size.
struct VXDPAGE {
struct VXDRELOC *pvxdreloc;
DWORD fo;
};
struct INTERNAL_ERROR {
char *Phase;
char CombinedFilenames[_MAX_PATH*2];
};
typedef INT MainFunc;
// List of RVA's.
#define crvaInLrva 32
struct LRVA {
DWORD rgrva[crvaInLrva];
struct LRVA *plrvaNext;
};
typedef struct OMAP
{
DWORD rva;
DWORD rvaTo;
} OMAP, *POMAP;
typedef struct XFIXUP {
WORD wType;
WORD wExtra;
DWORD rva;
DWORD rvaTarget;
} XFIXUP, *PXFIXUP;
#define cxfixupPage 341
struct FIXPAG {
struct FIXPAG *pfixpagNext;
XFIXUP rgxfixup[cxfixupPage];
};
// ilink failure values: add as required
enum ERRINC {
errNone,
errNoChanges,
errFileAdded,
errFileDeleted,
errLibChanged,
errTooManyChanges,
errExports,
errDataMoved,
errCommonSym,
errAbsolute,
errJmpTblOverflow,
errWeakExtern,
errUndefinedSyms,
errCalcPtrs,
errOutOfMemory,
errOutOfDiskSpace,
errTypes,
errFpo,
errBaseReloc,
errDirectives,
errNotSupportedForTarget,
errPdata,
errTocTblOverflow, // PowerMac specific
errDescOverflow, // PowerMac specific
errLibRefSetChanged,
errMultDefFound,
errComdat,
errDbiFormat
};
typedef struct SYMBOL_INFO { // used for ilink to avoid searching
BOOL fJmpTbl; // for externs while doing fixups
DWORD Offset;
} SYMBOL_INFO, *PSYMBOL_INFO;
typedef struct EXPINFO {
const char *szExpFile; // name of DEF file OR export object if any
DWORD tsExp; // timestamp of DEF file or export object
const char *szImpLib; // name of import library if any
DWORD tsImpLib; // timestamp of import library
PMOD pmodGen; // mod of export file generated, NULL if .exp was used.
NAME_LIST nlExports; // list of exports (NULL if export obj used)
} EXPINFO, *PEXPINFO;
// RESN -- a linked list of records describing "non-code" stuff which is to be written to
// the .exe file.
enum RESNT
{
resntBinaryResource, // data is a Mac binary resource file
resntDataFork, // data is arbitrary contents of the app's data fork (68K only, not PPC)
resntAfpInfo // data is finder info (type, creator, and bundle bit)
};
struct RESN {
struct RESN *presnNext;
RESNT resnt;
char *szFilename;
BYTE *pbData; // valid iff szFilename==NULL
DWORD cb;
PCON pcon;
DWORD TimeStamp;
};
struct MFLR // Mapfile Linenum Record
{
DWORD line;
struct SEC *psec;
DWORD offset;
};
struct MFL // Mapfile linenums
{
char *szFilename;
BLK blkRgmflr;
struct MFL *pmflNext;
};
struct WEAK_EXTERN_LIST {
PEXTERNAL pext;
PEXTERNAL pextWeakDefault;
struct WEAK_EXTERN_LIST *pwelNext;
};
extern WEAK_EXTERN_LIST *pwelHead;
extern const IMAGE_FILE_HEADER DefImageFileHdr;
extern const IMAGE_OPTIONAL_HEADER DefImageOptionalHdr;
extern const SWITCH DefSwitch;
extern const SWITCH_INFO DefSwitchInfo;
extern const IMAGE_SECTION_HEADER NullSectionHdr;
extern const IMAGE_SYMBOL NullSymbol;
extern const RESERVED_SECTION ReservedSection;
extern const char *Delimiters;
extern BOOL fCtrlCSignal;
extern INT FileReadHandle, FileWriteHandle;
extern DWORD MemberSeekBase;
extern DWORD MemberSize;
extern DWORD CoffHeaderSeek;
extern char *StringTable;
extern BOOL Verbose;
extern BOOL fVerboseLib;
extern FILE *InfoStream;
extern char *OutFilename;
extern char *szInfoFilename;
extern char *DefFilename;
extern char *szModuleName;
extern DWORD dwMaxCurrentVer; // Current Version of the shared library in PowerMac
extern DWORD dwMinOldAPIVer; // Old API Version of the shared library in PowerMac
extern DWORD dwMinOldCodeVer; // Old Code Version of the shared library in PowerMac
// ilink specific
extern INT FileIncrDbHandle;
extern BOOL fIncrDbFile;
extern BOOL fINCR;
extern DWORD cextFCNs;
extern PCON pconJmpTbl;
extern ERRINC errInc;
extern char *szIncrDbFilename;
extern char *PdbFilename;
extern NAME_LIST ModFileList;
extern PLMOD PCTMods;
extern PCON pconTocTable; // PowerMac Specific
extern PCON pconMppcFuncTable; // PowerMac Specific
extern PCON pconTocDescriptors; // PowerMac Specific
extern PCON pconGlueCode; // PowerMac Specific
extern PCON pconPowerMacLoader; // PowerMac Specific
extern BOOL fMfilePad; // PowerMac Specific Mfile padding
extern OPTION_ACTION OAComment, OAStub;
#ifdef INSTRUMENT
extern LOG Log;
#endif // INSTRUMENT
extern BOOL fPdb;
extern BOOL fOpenedOutFilename;
extern CVSEEKS CvSeeks;
extern PCVINFO CvInfo;
extern DWORD NextCvObject;
extern NAME_LIST SwitchArguments;
extern NAME_LIST ExportSwitches;
extern NAME_LIST MergeSwitches;
extern NAME_LIST FilenameArguments;
extern NAME_LIST ObjectFilenameArguments;
extern NAME_LIST ArchiveFilenameArguments;
extern NAME_LIST SectionNames;
extern NAME_LIST NoDefaultLibs;
extern NAME_LIST WeakImportsFunctionList; // Weak imports list for Functions
extern NAME_LIST WeakImportsContainerList; // Weak imports list for Containers
extern NAME_LIST ZappedBaseRelocList; // Deleted Base Reloc list for MPPC iLink
extern NAME_LIST MacResourceList; // PowerMac specific resource List
extern NAME_LIST MppcImportList; // PowerMac specific import List
extern DWORD *MemberStart;
extern PARGUMENT_LIST LastUserLib;
extern PARGUMENT_LIST FirstDefaultLib;
extern PARGUMENT_LIST pargFirst;
extern const char *ToolName;
extern const char *ToolGenericName;
extern char *Entry;
extern DWORD csymDebug;
extern char ShortName[];
extern DWORD UndefinedSymbols;
extern DWORD foCoffSyms;
extern DWORD VerifyImageSize;
extern DWORD cextWeakOrLazy;
extern BOOL BadFuzzyMatch;
extern BOOL fMultipleDefinitions;
extern PSEC psecBaseReloc;
extern PSEC psecCommon;
extern PSEC psecData;
extern PSEC psecDebug;
extern PSEC psecException;
extern PSEC psecExport;
extern PSEC psecGp;
extern PSEC psecXdata;
extern PSEC psecIdata2;
extern PSEC psecIdata5;
extern PSEC psecImportDescriptor;
extern PSEC psecPowerMacLoader;
extern PSEC psecReadOnlyData;
extern PSEC psecResource;
extern PGRP pgrpCvPTypes;
extern PGRP pgrpCvSymbols;
extern PGRP pgrpCvTypes;
extern PGRP pgrpExport;
extern PGRP pgrpFpoData;
extern PGRP pgrpPdata;
extern PMOD pmodLinkerDefined;
extern PEXTERNAL pextEntry;
extern TOOL_TYPE Tool;
extern BOOL IncludeDebugSection;
extern BOOL fImageMappedAsFile;
extern BASE_RELOC *rgbr;
extern BASE_RELOC *pbrCur;
extern BASE_RELOC *pbrEnd;
extern INTERNAL_ERROR InternalError;
extern BOOL fAlphaCheckLongBsr;
extern DWORD csymDebugEst;
extern DWORD totalStringTableSize;
extern INT fdExeFile;
extern PFI *rgpfi;
extern PEXTERNAL pextGp;
extern unsigned cFixupError;
extern char SzFixupMapInfo[81];
extern DWORD RvaFixupMapLast;
extern BOOL fReproducible;
extern size_t cbFree, cbTotal, cbTemp;
extern BYTE *pch;
extern BOOL PrependUnderscore;
extern BOOL SkipUnderscore;
extern WORD NextMember;
extern DWORD SmallestOrdinal;
extern DWORD LargestOrdinal;
extern DWORD TotalSizeOfForwarderStrings;
extern DWORD TotalSizeOfInternalNames;
extern char szDefaultCvpackName[];
extern LRVA *plrvaFixupsForMapFile;
extern DWORD crvaFixupsForMapFile;
extern DWORD crelocTotal;
extern FIXPAG *pfixpagHead;
extern FIXPAG *pfixpagCur;
extern DWORD cfixpag;
extern DWORD cxfixupCur;
extern BOOL fNeedSubsystem;
extern BOOL fDidMachineDependentInit;
extern BOOL fMPPCVersionConflict;
extern BOOL fNeedBanner;
extern BOOL fExplicitOptRef;
extern BLK blkResponseFileEcho;
extern BLK blkComment;
extern PLIB plibCmdLineObjs;
extern PCON pconCvSignature;
extern PCON pconDebugDir;
extern PCON pconCoffDebug;
extern PCON pconFixupDebug;
extern PCON pconMiscDebug;
extern WORD WarningLevel;
extern char szCvtomfSourceName[]; // import from cvtomf (if linked)
extern char *ImplibFilename;
extern char *szReproDir;
extern FILE *pfileReproResponse;
extern const BYTE DosHeaderArray[];
extern const LONG DosHeaderSize;
extern BOOL fExceptionsOff;
extern BOOL fAlphaCheckLongBsr;
extern unsigned cError;
extern RESN *presnFirst;
extern BOOL fPowerPC;
extern BYTE *mpisymbToc;
extern DWORD *mpisymdwRestoreToc;
extern PEXTERNAL pextToc;
extern PEXTERNAL pextFTInfo;
extern char szVersion[];
extern size_t cbExternal;
extern DWORD rvaGp;
extern DWORD rvaGpMax;
extern BOOL fErr;
extern BOOL fExportDirective;
extern BOOL fDbgImpLib;
extern BOOL fNoBaseRelocs;
extern BOOL fTest;
#ifdef ILINKLOG
extern BOOL fIlinkLog;
extern WORD wMachine; // UNDONE: take it out after ImgFileHdr can be used
#endif // ILINKLOG