/*********************************************************************** * 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