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

4 years ago
  1. /***********************************************************************
  2. * Microsoft (R) 32-Bit Incremental Linker
  3. *
  4. * Copyright (C) Microsoft Corp 1992-1996. All rights reserved.
  5. *
  6. * File: globals.h
  7. *
  8. * File Comments:
  9. *
  10. * This file declares all global data structures used by the linker
  11. *
  12. ***********************************************************************/
  13. typedef struct ARGUMENT_LIST {
  14. char *OriginalName;
  15. char *ModifiedName;
  16. PARP parp; // parsed representation of argument (if switch)
  17. DWORD TimeStamp;
  18. WORD Flags;
  19. struct ARGUMENT_LIST *Next;
  20. } ARGUMENT_LIST, *PARGUMENT_LIST;
  21. typedef struct NAME_LIST {
  22. PARGUMENT_LIST First;
  23. PARGUMENT_LIST Last;
  24. DWORD Count;
  25. } NAME_LIST, *PNAME_LIST;
  26. typedef struct NUM_ARGUMENT_LIST {
  27. char *szOriginalName;
  28. char *szModifiedName;
  29. DWORD dwNumber;
  30. WORD Flags;
  31. struct NUM_ARGUMENT_LIST *Next;
  32. } NUM_ARGUMENT_LIST, *PNUM_ARGUMENT_LIST;
  33. typedef struct NUMBER_LIST {
  34. PNUM_ARGUMENT_LIST First;
  35. PNUM_ARGUMENT_LIST Last;
  36. WORD Count;
  37. } NUMBER_LIST, *PNUMBER_LIST;
  38. struct CVSEEKS {
  39. DWORD Base;
  40. DWORD SubsectionDir;
  41. };
  42. struct CVSUBSECTION {
  43. DWORD PointerToSubsection;
  44. DWORD SizeOfSubsection;
  45. DWORD Precompiled;
  46. };
  47. typedef struct CVINFO {
  48. PMOD pmod; // the module represented
  49. char *ObjectFilename;
  50. CVSUBSECTION Publics;
  51. CVSUBSECTION Locals;
  52. CVSUBSECTION Types;
  53. CVSUBSECTION Linenumbers;
  54. CVSUBSECTION Module;
  55. } CVINFO, *PCVINFO;
  56. // CVSEG: used temporarily in EmitCvInfo to build the sstModule table for
  57. // each module. Each CVSEG will become an array element in the sstModule
  58. // subsection.
  59. struct CVSEG {
  60. PGRP pgrp; // the group which the CON's are in
  61. PCON pconFirst, pconLast; // first and last CON described
  62. struct CVSEG *pcvsegNext;
  63. };
  64. enum DUMP_RAW_DISPLAY_TYPE {
  65. Bytes,
  66. Shorts,
  67. Longs
  68. };
  69. enum DEBUG_INFO {
  70. None,
  71. Minimal,
  72. Partial,
  73. Full
  74. };
  75. enum DEBUG_TYPE {
  76. NoDebug = 0,
  77. CoffDebug = 1,
  78. CvDebug = 2,
  79. FpoDebug = 4,
  80. FixupDebug = 8,
  81. MiscDebug = 16
  82. };
  83. enum TOOL_TYPE {
  84. NotUsed,
  85. Linker,
  86. Librarian,
  87. Dumper,
  88. Editor,
  89. #if DBG
  90. DbInspector,
  91. #endif // DBG
  92. Binder
  93. };
  94. enum FORCE_TYPE {
  95. ftNone = 0,
  96. ftUnresolved = 1,
  97. ftMultiple = 2
  98. };
  99. struct LINKSWITCH {
  100. BOOL Out;
  101. BOOL Base;
  102. BOOL Heap;
  103. BOOL Stack;
  104. #ifdef NT_BUILD
  105. BOOL fCallTree;
  106. #endif
  107. BOOL fChecksum;
  108. BOOL fDriver;
  109. BOOL fFixed;
  110. BOOL fMacBundle;
  111. BOOL fMap;
  112. BOOL fMapLines;
  113. BOOL fMiscInRData;
  114. BOOL fNewGlue; // UNDONE: Temporary. Always on for VC++ 5.0
  115. BOOL fNewRelocs; // UNDONE: Temporary for testing PE VxDs
  116. BOOL fNoDefaultLibs;
  117. BOOL fNoEntry;
  118. BOOL fNoPack;
  119. BOOL fNoPagedCode;
  120. BOOL fNotifyFullBuild;
  121. BOOL fOptIdata;
  122. BOOL fOrder;
  123. BOOL fPadMipsCode;
  124. BOOL fPE;
  125. BOOL fProfile;
  126. BOOL fROM;
  127. BOOL fTCE;
  128. DWORD GpSize;
  129. DEBUG_INFO DebugInfo;
  130. DEBUG_TYPE DebugType;
  131. FORCE_TYPE Force;
  132. char *szMacCreator;
  133. char *szMacType;
  134. };
  135. struct LIBSWITCH {
  136. char *DllName; // for .def only
  137. char *DllExtension; // for .def only
  138. BOOL List;
  139. BOOL DefFile;
  140. };
  141. struct DUMPSWITCH {
  142. WORD LinkerMember;
  143. WORD RawDisplaySize;
  144. WORD SymbolType;
  145. DUMP_RAW_DISPLAY_TYPE RawDisplayType;
  146. BOOL Headers;
  147. BOOL Relocations;
  148. BOOL Linenumbers;
  149. BOOL Symbols;
  150. BOOL BaseRelocations;
  151. BOOL Imports;
  152. BOOL Exports;
  153. BOOL RawData;
  154. BOOL Summary;
  155. BOOL ArchiveMembers;
  156. BOOL FpoData;
  157. BOOL PData;
  158. BOOL OmapTo;
  159. BOOL OmapFrom;
  160. BOOL Fixup;
  161. BOOL SymbolMap;
  162. BOOL Warnings;
  163. BOOL Disasm;
  164. BOOL Directives;
  165. };
  166. struct SWITCH {
  167. LINKSWITCH Link;
  168. LIBSWITCH Lib;
  169. DUMPSWITCH Dump;
  170. };
  171. struct SWITCH_INFO {
  172. DWORD UserOpts; // bit vector for user set options
  173. DWORD cbComment; // byte count of comment
  174. char *szEntry; // entry point
  175. char *szMacInit; // PowerMac init routine
  176. char *szMacTerm; // PowerMac term routine
  177. PLEXT plextIncludes; // list of include symbols
  178. NAME_LIST SectionNames; // list of -section cmdline attributes
  179. };
  180. typedef BYTE OPTION_ACTION;
  181. struct SECTION_INFO {
  182. char *Name;
  183. DWORD Characteristics;
  184. };
  185. struct RESERVED_SECTION {
  186. SECTION_INFO ReadOnlyData;
  187. SECTION_INFO Common;
  188. SECTION_INFO GpData; // MIPS/Alpha
  189. SECTION_INFO Xdata; // MIPS/Alpha
  190. SECTION_INFO Debug;
  191. SECTION_INFO Export;
  192. SECTION_INFO ImportDescriptor;
  193. SECTION_INFO Resource;
  194. SECTION_INFO Exception;
  195. SECTION_INFO BaseReloc;
  196. SECTION_INFO Directive;
  197. SECTION_INFO CvSymbols;
  198. SECTION_INFO CvTypes;
  199. SECTION_INFO CvPTypes;
  200. SECTION_INFO FpoData;
  201. SECTION_INFO Text; // PowerMac
  202. SECTION_INFO Data; // PowerMac
  203. SECTION_INFO PowerMacLoader; // PowerMac
  204. };
  205. enum THKSYM
  206. {
  207. thksymExport, // Export symbol (Function/Data)
  208. thksymIAT, // __imp_Function/__imp_Data
  209. thksymName, // Name in .idata$6 section
  210. thksymToc, // .toc
  211. thksymMax,
  212. };
  213. struct THUNK_RELOC
  214. {
  215. BYTE VirtualAddress;
  216. BYTE thksym;
  217. WORD Type;
  218. };
  219. struct THUNK_INFO
  220. {
  221. const BYTE *EntryCode;
  222. const THUNK_RELOC *EntryCodeRelocs;
  223. DWORD EntryCodeSize;
  224. WORD EntryCodeRelocsCount;
  225. WORD ExportReloc;
  226. WORD ImportReloc;
  227. WORD ThunkReloc;
  228. WORD DebugSectionRelReloc;
  229. WORD DebugSectionNumReloc;
  230. };
  231. struct BASE_RELOC {
  232. WORD Type;
  233. SHORT isecTarget;
  234. DWORD rva;
  235. DWORD Value;
  236. };
  237. // VxD-specific data structures:
  238. struct VXDRELOC {
  239. struct VXDRELOC *pvxdrelocNext;
  240. BYTE bType;
  241. BYTE isecTarget; // Destination address in section:offset format:
  242. DWORD ibTarget;
  243. WORD cibAlloc; // Number of DWORDs for ib allocated
  244. BYTE cibSrc; // Number of entries in chain
  245. WORD *pibSrc; // Pointer to array of source offsets
  246. };
  247. #define VXD_BLOCKSIZE 16 // pibSrc[] array in VXD_BASE_RELOC grows in
  248. // increments of this size.
  249. struct VXDPAGE {
  250. struct VXDRELOC *pvxdreloc;
  251. DWORD fo;
  252. };
  253. struct INTERNAL_ERROR {
  254. char *Phase;
  255. char CombinedFilenames[_MAX_PATH*2];
  256. };
  257. typedef INT MainFunc;
  258. // List of RVA's.
  259. #define crvaInLrva 32
  260. struct LRVA {
  261. DWORD rgrva[crvaInLrva];
  262. struct LRVA *plrvaNext;
  263. };
  264. typedef struct OMAP
  265. {
  266. DWORD rva;
  267. DWORD rvaTo;
  268. } OMAP, *POMAP;
  269. typedef struct XFIXUP {
  270. WORD wType;
  271. WORD wExtra;
  272. DWORD rva;
  273. DWORD rvaTarget;
  274. } XFIXUP, *PXFIXUP;
  275. #define cxfixupPage 341
  276. struct FIXPAG {
  277. struct FIXPAG *pfixpagNext;
  278. XFIXUP rgxfixup[cxfixupPage];
  279. };
  280. // ilink failure values: add as required
  281. enum ERRINC {
  282. errNone,
  283. errNoChanges,
  284. errFileAdded,
  285. errFileDeleted,
  286. errLibChanged,
  287. errTooManyChanges,
  288. errExports,
  289. errDataMoved,
  290. errCommonSym,
  291. errAbsolute,
  292. errJmpTblOverflow,
  293. errWeakExtern,
  294. errUndefinedSyms,
  295. errCalcPtrs,
  296. errOutOfMemory,
  297. errOutOfDiskSpace,
  298. errTypes,
  299. errFpo,
  300. errBaseReloc,
  301. errDirectives,
  302. errNotSupportedForTarget,
  303. errPdata,
  304. errTocTblOverflow, // PowerMac specific
  305. errDescOverflow, // PowerMac specific
  306. errLibRefSetChanged,
  307. errMultDefFound,
  308. errComdat,
  309. errDbiFormat
  310. };
  311. typedef struct SYMBOL_INFO { // used for ilink to avoid searching
  312. BOOL fJmpTbl; // for externs while doing fixups
  313. DWORD Offset;
  314. } SYMBOL_INFO, *PSYMBOL_INFO;
  315. typedef struct EXPINFO {
  316. const char *szExpFile; // name of DEF file OR export object if any
  317. DWORD tsExp; // timestamp of DEF file or export object
  318. const char *szImpLib; // name of import library if any
  319. DWORD tsImpLib; // timestamp of import library
  320. PMOD pmodGen; // mod of export file generated, NULL if .exp was used.
  321. NAME_LIST nlExports; // list of exports (NULL if export obj used)
  322. } EXPINFO, *PEXPINFO;
  323. // RESN -- a linked list of records describing "non-code" stuff which is to be written to
  324. // the .exe file.
  325. enum RESNT
  326. {
  327. resntBinaryResource, // data is a Mac binary resource file
  328. resntDataFork, // data is arbitrary contents of the app's data fork (68K only, not PPC)
  329. resntAfpInfo // data is finder info (type, creator, and bundle bit)
  330. };
  331. struct RESN {
  332. struct RESN *presnNext;
  333. RESNT resnt;
  334. char *szFilename;
  335. BYTE *pbData; // valid iff szFilename==NULL
  336. DWORD cb;
  337. PCON pcon;
  338. DWORD TimeStamp;
  339. };
  340. struct MFLR // Mapfile Linenum Record
  341. {
  342. DWORD line;
  343. struct SEC *psec;
  344. DWORD offset;
  345. };
  346. struct MFL // Mapfile linenums
  347. {
  348. char *szFilename;
  349. BLK blkRgmflr;
  350. struct MFL *pmflNext;
  351. };
  352. struct WEAK_EXTERN_LIST {
  353. PEXTERNAL pext;
  354. PEXTERNAL pextWeakDefault;
  355. struct WEAK_EXTERN_LIST *pwelNext;
  356. };
  357. extern WEAK_EXTERN_LIST *pwelHead;
  358. extern const IMAGE_FILE_HEADER DefImageFileHdr;
  359. extern const IMAGE_OPTIONAL_HEADER DefImageOptionalHdr;
  360. extern const SWITCH DefSwitch;
  361. extern const SWITCH_INFO DefSwitchInfo;
  362. extern const IMAGE_SECTION_HEADER NullSectionHdr;
  363. extern const IMAGE_SYMBOL NullSymbol;
  364. extern const RESERVED_SECTION ReservedSection;
  365. extern const char *Delimiters;
  366. extern BOOL fCtrlCSignal;
  367. extern INT FileReadHandle, FileWriteHandle;
  368. extern DWORD MemberSeekBase;
  369. extern DWORD MemberSize;
  370. extern DWORD CoffHeaderSeek;
  371. extern char *StringTable;
  372. extern BOOL Verbose;
  373. extern BOOL fVerboseLib;
  374. extern FILE *InfoStream;
  375. extern char *OutFilename;
  376. extern char *szInfoFilename;
  377. extern char *DefFilename;
  378. extern char *szModuleName;
  379. extern DWORD dwMaxCurrentVer; // Current Version of the shared library in PowerMac
  380. extern DWORD dwMinOldAPIVer; // Old API Version of the shared library in PowerMac
  381. extern DWORD dwMinOldCodeVer; // Old Code Version of the shared library in PowerMac
  382. // ilink specific
  383. extern INT FileIncrDbHandle;
  384. extern BOOL fIncrDbFile;
  385. extern BOOL fINCR;
  386. extern DWORD cextFCNs;
  387. extern PCON pconJmpTbl;
  388. extern ERRINC errInc;
  389. extern char *szIncrDbFilename;
  390. extern char *PdbFilename;
  391. extern NAME_LIST ModFileList;
  392. extern PLMOD PCTMods;
  393. extern PCON pconTocTable; // PowerMac Specific
  394. extern PCON pconMppcFuncTable; // PowerMac Specific
  395. extern PCON pconTocDescriptors; // PowerMac Specific
  396. extern PCON pconGlueCode; // PowerMac Specific
  397. extern PCON pconPowerMacLoader; // PowerMac Specific
  398. extern BOOL fMfilePad; // PowerMac Specific Mfile padding
  399. extern OPTION_ACTION OAComment, OAStub;
  400. #ifdef INSTRUMENT
  401. extern LOG Log;
  402. #endif // INSTRUMENT
  403. extern BOOL fPdb;
  404. extern BOOL fOpenedOutFilename;
  405. extern CVSEEKS CvSeeks;
  406. extern PCVINFO CvInfo;
  407. extern DWORD NextCvObject;
  408. extern NAME_LIST SwitchArguments;
  409. extern NAME_LIST ExportSwitches;
  410. extern NAME_LIST MergeSwitches;
  411. extern NAME_LIST FilenameArguments;
  412. extern NAME_LIST ObjectFilenameArguments;
  413. extern NAME_LIST ArchiveFilenameArguments;
  414. extern NAME_LIST SectionNames;
  415. extern NAME_LIST NoDefaultLibs;
  416. extern NAME_LIST WeakImportsFunctionList; // Weak imports list for Functions
  417. extern NAME_LIST WeakImportsContainerList; // Weak imports list for Containers
  418. extern NAME_LIST ZappedBaseRelocList; // Deleted Base Reloc list for MPPC iLink
  419. extern NAME_LIST MacResourceList; // PowerMac specific resource List
  420. extern NAME_LIST MppcImportList; // PowerMac specific import List
  421. extern DWORD *MemberStart;
  422. extern PARGUMENT_LIST LastUserLib;
  423. extern PARGUMENT_LIST FirstDefaultLib;
  424. extern PARGUMENT_LIST pargFirst;
  425. extern const char *ToolName;
  426. extern const char *ToolGenericName;
  427. extern char *Entry;
  428. extern DWORD csymDebug;
  429. extern char ShortName[];
  430. extern DWORD UndefinedSymbols;
  431. extern DWORD foCoffSyms;
  432. extern DWORD VerifyImageSize;
  433. extern DWORD cextWeakOrLazy;
  434. extern BOOL BadFuzzyMatch;
  435. extern BOOL fMultipleDefinitions;
  436. extern PSEC psecBaseReloc;
  437. extern PSEC psecCommon;
  438. extern PSEC psecData;
  439. extern PSEC psecDebug;
  440. extern PSEC psecException;
  441. extern PSEC psecExport;
  442. extern PSEC psecGp;
  443. extern PSEC psecXdata;
  444. extern PSEC psecIdata2;
  445. extern PSEC psecIdata5;
  446. extern PSEC psecImportDescriptor;
  447. extern PSEC psecPowerMacLoader;
  448. extern PSEC psecReadOnlyData;
  449. extern PSEC psecResource;
  450. extern PGRP pgrpCvPTypes;
  451. extern PGRP pgrpCvSymbols;
  452. extern PGRP pgrpCvTypes;
  453. extern PGRP pgrpExport;
  454. extern PGRP pgrpFpoData;
  455. extern PGRP pgrpPdata;
  456. extern PMOD pmodLinkerDefined;
  457. extern PEXTERNAL pextEntry;
  458. extern TOOL_TYPE Tool;
  459. extern BOOL IncludeDebugSection;
  460. extern BOOL fImageMappedAsFile;
  461. extern BASE_RELOC *rgbr;
  462. extern BASE_RELOC *pbrCur;
  463. extern BASE_RELOC *pbrEnd;
  464. extern INTERNAL_ERROR InternalError;
  465. extern BOOL fAlphaCheckLongBsr;
  466. extern DWORD csymDebugEst;
  467. extern DWORD totalStringTableSize;
  468. extern INT fdExeFile;
  469. extern PFI *rgpfi;
  470. extern PEXTERNAL pextGp;
  471. extern unsigned cFixupError;
  472. extern char SzFixupMapInfo[81];
  473. extern DWORD RvaFixupMapLast;
  474. extern BOOL fReproducible;
  475. extern size_t cbFree, cbTotal, cbTemp;
  476. extern BYTE *pch;
  477. extern BOOL PrependUnderscore;
  478. extern BOOL SkipUnderscore;
  479. extern WORD NextMember;
  480. extern DWORD SmallestOrdinal;
  481. extern DWORD LargestOrdinal;
  482. extern DWORD TotalSizeOfForwarderStrings;
  483. extern DWORD TotalSizeOfInternalNames;
  484. extern char szDefaultCvpackName[];
  485. extern LRVA *plrvaFixupsForMapFile;
  486. extern DWORD crvaFixupsForMapFile;
  487. extern DWORD crelocTotal;
  488. extern FIXPAG *pfixpagHead;
  489. extern FIXPAG *pfixpagCur;
  490. extern DWORD cfixpag;
  491. extern DWORD cxfixupCur;
  492. extern BOOL fNeedSubsystem;
  493. extern BOOL fDidMachineDependentInit;
  494. extern BOOL fMPPCVersionConflict;
  495. extern BOOL fNeedBanner;
  496. extern BOOL fExplicitOptRef;
  497. extern BLK blkResponseFileEcho;
  498. extern BLK blkComment;
  499. extern PLIB plibCmdLineObjs;
  500. extern PCON pconCvSignature;
  501. extern PCON pconDebugDir;
  502. extern PCON pconCoffDebug;
  503. extern PCON pconFixupDebug;
  504. extern PCON pconMiscDebug;
  505. extern WORD WarningLevel;
  506. extern char szCvtomfSourceName[]; // import from cvtomf (if linked)
  507. extern char *ImplibFilename;
  508. extern char *szReproDir;
  509. extern FILE *pfileReproResponse;
  510. extern const BYTE DosHeaderArray[];
  511. extern const LONG DosHeaderSize;
  512. extern BOOL fExceptionsOff;
  513. extern BOOL fAlphaCheckLongBsr;
  514. extern unsigned cError;
  515. extern RESN *presnFirst;
  516. extern BOOL fPowerPC;
  517. extern BYTE *mpisymbToc;
  518. extern DWORD *mpisymdwRestoreToc;
  519. extern PEXTERNAL pextToc;
  520. extern PEXTERNAL pextFTInfo;
  521. extern char szVersion[];
  522. extern size_t cbExternal;
  523. extern DWORD rvaGp;
  524. extern DWORD rvaGpMax;
  525. extern BOOL fErr;
  526. extern BOOL fExportDirective;
  527. extern BOOL fDbgImpLib;
  528. extern BOOL fNoBaseRelocs;
  529. extern BOOL fTest;
  530. #ifdef ILINKLOG
  531. extern BOOL fIlinkLog;
  532. extern WORD wMachine; // UNDONE: take it out after ImgFileHdr can be used
  533. #endif // ILINKLOG