mirror of https://github.com/lianthony/NT4.0
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.
352 lines
11 KiB
352 lines
11 KiB
/***********************************************************************
|
|
* Microsoft (R) 32-Bit Incremental Linker
|
|
*
|
|
* Copyright (C) Microsoft Corp 1992-1996. All rights reserved.
|
|
*
|
|
* File: proto.h
|
|
*
|
|
* File Comments:
|
|
*
|
|
* Prototypes of most global functions.
|
|
*
|
|
***********************************************************************/
|
|
|
|
// coff.cpp
|
|
MainFunc HelperMain(int, char *[]);
|
|
|
|
// contrib.cpp
|
|
void MoveToBeginningOfPGRPsPCON(PCON);
|
|
void MoveToBeginningOfPSECsPGRP(PGRP);
|
|
PSEC PsecApplyMergePsec(PSEC);
|
|
|
|
// disasm.cpp
|
|
void DisasmBuffer(WORD, BOOL, DWORD, const BYTE *, DWORD,
|
|
const PIMAGE_SYMBOL *, DWORD, DWORD, FILE *);
|
|
|
|
// disasm68.cpp
|
|
void DisasmBuffer68K(const BYTE *, DWORD, const PIMAGE_SYMBOL *, DWORD);
|
|
|
|
// incr.cpp
|
|
void MarkExtern_FuncFixup(PIMAGE_SYMBOL, PIMAGE, PCON);
|
|
|
|
// lnkmain.cpp
|
|
|
|
#ifdef ILINKLOG
|
|
void IlinkLog(UINT);
|
|
#endif // ILINKLOG
|
|
void BuildArgList(PIMAGE, PCON, PNAME_LIST, char *);
|
|
void ApplyDirectives(PIMAGE, PCON, char *);
|
|
BOOL FScanSwitches(const char *);
|
|
void SaveImage(PIMAGE);
|
|
INT SpawnFullBuild(BOOL);
|
|
INT SpawnFullBuildVXD(DWORD);
|
|
void FlushWorkingSet(void);
|
|
MainFunc LinkerMain(int, char *[]);
|
|
|
|
// link.cpp
|
|
|
|
DWORD AdjustImageBase(DWORD);
|
|
void AllocateCommon(PIMAGE);
|
|
void AllocateCommonPMOD(PIMAGE, PMOD);
|
|
void AllocateCommonPEXT(PIMAGE, PEXTERNAL);
|
|
INT BuildImage(PIMAGE, BOOL *);
|
|
void CheckForReproDir(void);
|
|
void CloseReproDir(void);
|
|
void CopyFileToReproDir(const char *, BOOL);
|
|
BOOL IsDebugSymbol(BYTE, SWITCH *);
|
|
void SaveDebugFixup(WORD, WORD, DWORD, DWORD);
|
|
void EmitRelocations(PIMAGE);
|
|
DWORD Cmod(PLIB);
|
|
void CalculateGpRange(void);
|
|
|
|
extern char *EntryPointName;
|
|
extern char *OrderFilename;
|
|
|
|
// lnkp1.cpp
|
|
|
|
void Pass1(PIMAGE);
|
|
void Pass1Arg(ARGUMENT_LIST *, PIMAGE, PLIB);
|
|
void SetDefaultOutFilename(PIMAGE, ARGUMENT_LIST *);
|
|
void WarningIgnoredExports(const char *);
|
|
void PrepLibForSearching(PIMAGE, PLIB);
|
|
void ResolveExternalsInLibs(PIMAGE);
|
|
|
|
// lnkp2.cpp
|
|
|
|
void AddSectionsToDBI(PIMAGE);
|
|
void CountFixupError(PIMAGE);
|
|
void OrderPCTMods(void);
|
|
void Pass2(PIMAGE);
|
|
const char *SzNameFixupSym(PIMAGE, PIMAGE_SYMBOL);
|
|
void AddPublicMod(PIMAGE, const char *, WORD, PEXTERNAL);
|
|
|
|
// i386.cpp
|
|
|
|
void I386LinkerInit(PIMAGE pimage, BOOL *);
|
|
const char *SzI386RelocationType(WORD, WORD *, BOOL *);
|
|
|
|
// mips.cpp
|
|
void AdjustMipsCode(PCON, PIMAGE_OPTIONAL_HEADER);
|
|
void MipsLinkerInit(PIMAGE, BOOL *);
|
|
const char *SzMipsRelocationType(WORD, WORD *, BOOL *);
|
|
void WriteMipsRomRelocations (PIMAGE);
|
|
|
|
// alpha.cpp
|
|
void AlphaLinkerInit(PIMAGE, BOOL *);
|
|
const char *SzAlphaRelocationType(WORD, WORD *, BOOL *);
|
|
|
|
// ppc.cpp
|
|
void CreatePconToc(PIMAGE);
|
|
void PpcLinkerInit(PIMAGE, BOOL *);
|
|
void ProcessTocSymbol(PIMAGE, PMOD, PEXTERNAL, DWORD, BYTE);
|
|
const char *SzPpcRelocationType(WORD, WORD *, BOOL *);
|
|
void ValidateToc(PIMAGE);
|
|
void WriteToc(void);
|
|
BOOL IsPPCTocRW(PIMAGE);
|
|
void MergeTocData(PIMAGE);
|
|
|
|
// mppc.cpp
|
|
void MPPCLinkerInit(PIMAGE, BOOL *);
|
|
const char *SzMPPCRelocationType(WORD, WORD *, BOOL *);
|
|
void CollectAndSort(PIMAGE);
|
|
void AddVersionList(const char *, const char *, const char *, const char *);
|
|
DWORD CalculateMFilePad(DWORD);
|
|
|
|
// m68k.cpp
|
|
void ApplyM68KSectionResInfo(PSEC, BOOL);
|
|
void MacAllocA5Array(void);
|
|
void AssignTMAC(PSEC);
|
|
void InitSTRefTab(DWORD);
|
|
void ProcessSTRef(DWORD, PSEC, DWORD);
|
|
void UpdateExternThunkInfo(PEXTERNAL, DWORD);
|
|
void UpdateLocalThunkInfo(PIMAGE, PCON, PIMAGE_SYMBOL, DWORD);
|
|
DWORD CalcThunkTableSize(PST, BOOL);
|
|
void CreateThunkTable(BOOL, PIMAGE);
|
|
void CleanupSTRefTab(void);
|
|
void WriteResourceHeader(PCON, BOOL);
|
|
void AddDFIXSym(DWORD, PCON);
|
|
void InitResmap(WORD);
|
|
void AddRRM(DWORD, PSEC);
|
|
void WriteResmap(void);
|
|
DWORD WriteDFIX(PIMAGE, DWORD);
|
|
void InitMSCV(void);
|
|
void AddMSCVMap(PSEC, BOOL);
|
|
void WriteMSCV(PIMAGE);
|
|
void WriteSWAP0(void);
|
|
void AssignCodeSectionNums(PIMAGE);
|
|
void AddRelocInfo(RELOCINFO *, PCON, DWORD);
|
|
void AddRawUnknownRelocInfo(PCON, DWORD, DWORD);
|
|
void CleanupUnknownObjriRaw(PST, PIMAGE_SYMBOL, char *, PMOD);
|
|
void SortRawRelocInfo(void);
|
|
void UpdateRelocInfoOffset(PSEC, PIMAGE);
|
|
DWORD WriteRelocInfo(PSEC, DWORD);
|
|
void ProcessCSECTAB(PIMAGE);
|
|
void ProcessDupCons(void);
|
|
void AddDupConsToSec(PSEC, PIMAGE);
|
|
PEXTNODE IsDupCon(PCON);
|
|
void CreateDummyDupConModules(PPEXTNODE);
|
|
void DeleteOriginalDupCons(void);
|
|
void BuildResNumList(void);
|
|
RESINFO *FindResInfo(LONG, DWORD);
|
|
SHORT GetNextResNum(RESINFO *);
|
|
void CheckForIllegalA5Ref(WORD);
|
|
PEXTERNAL FindExtAlternatePcodeSym(PEXTERNAL, PST, BOOL);
|
|
void CreateCVRSymbol(char *, PST, DWORD);
|
|
void NoteMacExport(const char *, PST, BOOL, BOOL);
|
|
void AssignMemberNums(PST);
|
|
void BuildMacVTables(PST);
|
|
void EmitClientVTableRecs(PIMAGE, const char *);
|
|
void EmitMacThunk(PIMAGE, PEXTERNAL, const THUNK_INFO *, const char *);
|
|
void EmitMacDLLObject(INT, PIMAGE, const char *, DWORD);
|
|
WORD CchParseMacVersion(const char *, DWORD *);
|
|
WORD CchParseMacVersionRange(const char *, DWORD *, DWORD *);
|
|
void ParseFunctionSetVersion(const char *);
|
|
WORD ParseDefMacFlags(char *, const char *);
|
|
WORD ParseDefLoadHeap(char *);
|
|
WORD ParseDefClientData(const char *, const char *);
|
|
void M68KLinkerInit(PIMAGE, BOOL *);
|
|
const char *SzM68KRelocationType(WORD, WORD *, BOOL *);
|
|
LONG ReadMacWord(INT);
|
|
|
|
// mac.cpp
|
|
void UseMacBinaryRes(char *szResFilename, RESNT resnt, INT);
|
|
void IncludeMacPbCb(BYTE *pb, DWORD cb, RESNT resnt);
|
|
void GenFinderInfo(BOOL, const char *, const char *);
|
|
BOOL FIsProgramPsec(PSEC psec);
|
|
RESN *GetMacResourcePointer(const char *, PIMAGE);
|
|
BOOL FIsMacResFile (INT);
|
|
|
|
// lib.cpp
|
|
DWORD CountExternTable(PST, DWORD *, DWORD *, DWORD *);
|
|
MainFunc LibrarianMain(int, char *[]);
|
|
void WriteMemberHeader(const char *, BOOL, time_t, unsigned short, LONG);
|
|
void EmitStrings(PST, BOOL);
|
|
void EmitOffsets(PST, BOOL);
|
|
|
|
// deflib.cpp
|
|
void AddOrdinal(DWORD);
|
|
MainFunc DefLibMain(PIMAGE);
|
|
WORD IsDefinitionKeyword(const char *);
|
|
WORD SkipToNextKeyword(void);
|
|
|
|
// dump.cpp
|
|
MainFunc DumperMain(int, char *[]);
|
|
void DumpMemberHeader(PLIB, IMAGE_ARCHIVE_MEMBER_HEADER, DWORD);
|
|
void DumpNamePsym(FILE *, const char *, PIMAGE_SYMBOL);
|
|
|
|
// edit.cpp
|
|
MainFunc EditorMain(int, char *[]);
|
|
void ProcessEditorSwitches(const char *, INT);
|
|
void ParseSection(const char * szArgs,
|
|
char **szsOrig,
|
|
char **szsNew,
|
|
const char *szFileName);
|
|
void PrepareToModifyFile(PARGUMENT_LIST);
|
|
|
|
// shared.cpp
|
|
|
|
void AddArgument(PNAME_LIST, char *);
|
|
void AddArgumentToList(PNAME_LIST, char *, char *);
|
|
void AddArgumentToNumList (PNUMBER_LIST, char *, char *, DWORD);
|
|
void AddToLext(LEXT **, PEXTERNAL);
|
|
void AddWeakExtToList(PEXTERNAL,PEXTERNAL);
|
|
DWORD AppendLongName(PST, const char *);
|
|
void ApplyCommandLineSectionAttributes(PSEC);
|
|
void BuildExternalSymbolTable(PIMAGE, PBOOL, PMOD, WORD, WORD);
|
|
void CalculateBaseForIdataRecords(void);
|
|
void CheckDupFilename(const char *, PARGUMENT_LIST);
|
|
void ChecksumImage(PIMAGE);
|
|
INT __cdecl Compare(void const *, void const *);
|
|
void DumpExternTable(PST);
|
|
DWORD DwSwap(DWORD);
|
|
const char *ExpandMemberName(PLIB, const char *);
|
|
BOOL FArgumentInList(const char *, PNAME_LIST);
|
|
PIMAGE_SYMBOL FetchNextSymbol(PIMAGE_SYMBOL *);
|
|
PCHAR _find(PCHAR);
|
|
INT __cdecl FpoDataCompare(void const *, void const *);
|
|
void FreeArgumentList(PNAME_LIST);
|
|
void FreeArgumentNumberList(PNUMBER_LIST);
|
|
void FreeRgrel(PIMAGE_RELOCATION);
|
|
void FreeStringTable(char *);
|
|
void FreeSymbolTable(PIMAGE_SYMBOL);
|
|
void FreeWeakExtList(VOID);
|
|
BOOL FValidFileHdr(const char *, PIMAGE_FILE_HEADER);
|
|
BOOL IsArchiveFile(const char *, INT);
|
|
void LocateUndefinedExternals(PST);
|
|
DWORD LookupLongName(PST, const char *);
|
|
void MultiplyDefinedSym(SWITCH *, const char *, const char *, const char *);
|
|
void ParseCommandLine(INT, char *[], const char *);
|
|
LEXT * PlextFind (LEXT *, PEXTERNAL);
|
|
PEXTERNAL PextWeakDefaultFind(PEXTERNAL);
|
|
void PrintBanner(void);
|
|
void PrintUndefinedExternals(PST);
|
|
void ProcessArgument(char *, BOOL);
|
|
PIMAGE_SYMBOL PsymAlternateStaticPcodeSym(PIMAGE, PCON, BOOL, PIMAGE_SYMBOL, BOOL);
|
|
PIMAGE_ARCHIVE_MEMBER_HEADER ReadArchiveMemberHeader(void);
|
|
void ReadImageSecHdrInfoPMOD(PMOD, IMAGE_SECTION_HEADER **);
|
|
void ReadFileHeader(INT, PIMAGE_FILE_HEADER);
|
|
void ReadOptionalHeader(INT, PIMAGE_OPTIONAL_HEADER, WORD);
|
|
void ReadRelocations(INT, PIMAGE_RELOCATION, DWORD);
|
|
PIMAGE_RELOCATION ReadRgrelPCON(PCON, DWORD *);
|
|
void ReadSpecialLinkerInterfaceMembers(PLIB, PIMAGE);
|
|
char * ReadStringTable(const char *, LONG, DWORD *);
|
|
PIMAGE_SYMBOL ReadSymbolTable(DWORD, DWORD, BOOL);
|
|
void ReadSymbolTableEntry(INT, PIMAGE_SYMBOL);
|
|
void ResolveSymbol_icsym(PIMAGE);
|
|
DWORD RvaAlign(DWORD, DWORD);
|
|
void SaveFixupForMapFile(DWORD);
|
|
void SearchLib(PIMAGE, PLIB, PBOOL, PBOOL);
|
|
DWORD sgetl(DWORD *);
|
|
DWORD sputl(DWORD *);
|
|
void SwapBytes(void *, DWORD);
|
|
char * SzGetArgument(char *, BOOL *);
|
|
char * SzModifyFilename(const char *, const char *);
|
|
const char *SzObjSectionName(const char *, const char *);
|
|
char * SzSearchEnv(const char *, const char *, const char *);
|
|
void UpdateExternalSymbol(PEXTERNAL, PCON, DWORD,
|
|
SHORT, WORD, WORD, PMOD,
|
|
PST);
|
|
void VerifyMachine(const char *, WORD, PIMAGE_FILE_HEADER);
|
|
void WriteAuxSymbolTableEntry(INT, PIMAGE_AUX_SYMBOL);
|
|
void WriteFileHeader(INT, PIMAGE_FILE_HEADER);
|
|
void WriteOptionalHeader(INT, PIMAGE_OPTIONAL_HEADER, WORD);
|
|
void WriteRelocations(INT, PIMAGE_RELOCATION, DWORD);
|
|
void WriteSectionHeader(INT, PIMAGE_SECTION_HEADER);
|
|
void WriteStringTable(INT, PST);
|
|
void WriteSymbolTableEntry(INT, PIMAGE_SYMBOL);
|
|
WORD WSwap(WORD);
|
|
|
|
// convert.cpp
|
|
|
|
void ConvertOmfObjects();
|
|
void RemoveConvertTempFiles(void);
|
|
WORD VerifyAnObject(PARGUMENT_LIST, PIMAGE);
|
|
void VerifyObjects(PIMAGE);
|
|
|
|
// map.cpp
|
|
void EmitMap(PIMAGE, const char *);
|
|
void SaveStaticForMapFile(const char *, PCON, DWORD, BOOL);
|
|
void SaveTocForMapFile(PEXTERNAL);
|
|
|
|
// cv.cpp
|
|
void EmitCvInfo(PIMAGE);
|
|
|
|
// textpad.cpp
|
|
BOOL ComputeTextPad(DWORD, DWORD *, DWORD, DWORD, DWORD *);
|
|
|
|
// export.cpp
|
|
void ParseExportDirective(char *, PIMAGE, BOOL, const char *);
|
|
void AddExportToSymbolTable(const char *, const char *, BOOL, EMODE, DWORD,
|
|
const char *, BOOL, PIMAGE, BOOL, BOOL);
|
|
|
|
// cpp.cpp
|
|
|
|
char *SzUndecorateNameOnly(const char *);
|
|
char *SzOutputSymbolName(const char *, BOOL);
|
|
|
|
// linenumber.cpp
|
|
|
|
void FeedLinenums(PIMAGE_LINENUMBER, DWORD, PCON, PIMAGE_SYMBOL, DWORD, DWORD, BOOL, BOOL);
|
|
void WriteMapFileLinenums(PIMAGE);
|
|
|
|
// dbiapi.cpp
|
|
|
|
void FreeLineNumInfo(LMod *);
|
|
|
|
// vxd.cpp
|
|
void InitImageVXD(PIMAGE);
|
|
void WriteExtendedVXDHeader(PIMAGE, INT);
|
|
void WriteVXDEntryTable(PIMAGE, INT);
|
|
void WriteVXDBaseRelocations(PIMAGE);
|
|
|
|
// errmsg.cpp
|
|
void DisableWarning(unsigned);
|
|
void FinalizeErrorFile(void);
|
|
|
|
void __cdecl Error(const char *, UINT, ...);
|
|
void __cdecl ErrorPcon(PCON, UINT, ...);
|
|
void __cdecl Fatal(const char *, UINT, ...);
|
|
void __cdecl FatalNoDelete(const char *, UINT, ...);
|
|
void __cdecl FatalPcon(PCON, UINT, ...);
|
|
void OutOfMemory(void);
|
|
void __cdecl Message(UINT, ...);
|
|
void __cdecl PostNote(const char *, UINT, ...);
|
|
void __cdecl Warning(const char *, UINT, ...);
|
|
void __cdecl WarningPcon(PCON, UINT, ...);
|
|
|
|
// cmdline.cpp
|
|
void TransferLinkerSwitchValues(PIMAGE, PIMAGE);
|
|
BOOL CheckAndUpdateLinkerSwitches(PIMAGE, PIMAGE);
|
|
|
|
#if DBG
|
|
// dbinsp.cpp
|
|
MainFunc DbInspMain(int, char *[]);
|
|
#endif // DBG
|
|
|
|
// pdata.cpp
|
|
void SortFunctionTable(PIMAGE);
|
|
|
|
// alpha.cpp
|
|
void EmitAlphaThunks(void);
|
|
void AlphaAddToThunkList(PCON, DWORD, DWORD);
|
|
DWORD CalculateTextSectionSize(PIMAGE, DWORD);
|