-
Notifications
You must be signed in to change notification settings - Fork 8
/
README.DOC
1184 lines (825 loc) · 37.3 KB
/
README.DOC
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
Microsoft(R) Macro Assembler Package
Version 5.10
Copyright 1988, Microsoft Corporation
Text files on the Macro Assembler disks are tabbed to save
disk space. If your printer does not automatically handle
tabs during printing, you must use a print program that
expands tabs. For example, use the DOS PRINT program to print
this and other document or source files on the disk.
The Microsoft Macro Assembler (MASM)
Mixed-Language Support for Variables and Procedures
---------------------------------------------------
All EXTRN, PUBLIC, and PROC items, as well as uses of the .MODEL
directive, support a language type. The language type of EXTRN
and PUBLIC variables determine whether or not an underscore is
prefixed to the name (an underscore is prefixed only for variables
with a C language type), and the language type of a procedure determines
its calling and naming conventions. For an explanation of calling
and naming conventions, see the Microsoft Mixed-Language Programming
Guide.
The language type consists of the word "C" or "Pascal" and uses the
following syntax (lowercase items are placeholders, and bracketed items
are optional):
EXTRN [<langtype>] <varname>:<type>
PUBLIC [<langtype>] <varname>
procName PROC [NEAR|FAR] [<langtype>] [USES <regs>,] <args>
For example, the C and Pascal keywords are used correctly in the
following example:
.MODEL SMALL,C
EXTRN Pascal DosOpen:FAR
PUBLIC C myVar
myOpen PROC Pascal fName:PTR, mode:WORD
.
.
.
myOpen ENDP
EVEN and ALIGN Directives
-------------------------
Padding for EVEN and ALIGN is now optimized. Data segments
are padded with zeros. Code segments are padded with special
two-byte NOP instructions where possible. The two-byte NOP
consists of the instruction XCHG BX,BX (87 DB hexadecimal)
which is executed faster than two one-byte NOP instructions.
/B Option Ignored
-----------------
The /B option is now ignored, because its effect is irrelevant,
given the new file buffering mechanism. However, the option is
still accepted for the purposes of compatibility.
The PTR Operator
----------------
The PTR operator can be used to specify the size of a
register indirect operand for a CALL or JMP instruction.
However, the size cannot be specified with NEAR or FAR. Use
WORD or DWORD instead. (In 80386 32-bit segments, use DWORD
or FWORD.) Examples are shown below:
; 8086, 80826, or 80386 16-bit mode
jmp WORD PTR [bx] ; Legal near jump
call NEAR PTR [bx] ; Illegal near call
call DWORD PTR [bx] ; Legal far call
jmp FAR PTR [bx] ; Illegal far jump
; 80386 32-bit mode only
jmp DWORD PTR [bx] ; Legal near jump
call NEAR PTR [bx] ; Illegal near call
call FWORD PTR [bx] ; Legal far call
jmp FAR PTR [bx] ; Illegal far jump
This limitation only applies to register indirect operands.
NEAR or FAR can be applied to operands associated with
labels. Examples are shown below:
jmp NEAR PTR pointer[bx] ; Legal
call FAR PTR location ; Legal
Assembler Behavior Change
-------------------------
Some errors and questionable practices that were ignored by
earlier versions are now flagged as errors. As a result,
existing source code may produce errors or warnings.
The following are examples:
- Labels defined only during pass 1 cause errors if
used in expressions.
- A CS ASSUME that changes from pass 1 to pass 2 causes
an error.
- Constants are now checked for type overflow.
- Reserved words used as labels produce warnings.
- The OFFSET operator used with a constant causes an error.
The STACK Combine Type
----------------------
The description of the STACK combine type in Section 5.2.2.3
does not explain how multiple initialized stack segments are
combined. The total size of the stack is the total size of
all stack definitions. LINK puts initialized data for each
defined stack segment at the end of the stack. Data initialized
in the last segment linked override data initialized in
previous segments. This behavior is usually not relevant, since
most programs only define one stack of uninitialized data.
Stack data cannot be initialized with simplified segment
directives.
Clarification of Parsing Error
------------------------------
The following error can be difficult to interpret because of the
way the assembler parses (analyzes) source code:
A2015: Symbol already different kind: <name>
Typically, the assembler generates this error message when a
symbol is used in a way inconsistent with how it was declared: for
example, a symbol is declared as an external absolute but then used
as a local code label. However, the assembler also generates this
error when a symbol in the second source-code field can be interpreted
as either an operation or an operand. The following example illustrates
this problem:
SYM1 MACRO structName, varName
varName structName <>
ENDM
SYM2 STRUCT
field1 DB
field2 DW
SYM2 ENDS
SYM1 SYM2, <mylabel>
The last line of code causes error A2015 to be generated. The
assembler first looks at the second field of the line, which
contains the symbol SYM2. Since SYM2 is a structure, the assembler
considers SYM2 to be an operation rather than an operand, and therefore
it considers SYM1 to be a label (rather than an operation). The way
to avoid this error is simply code the instruction as:
SYM1 <SYM2>, <mylabel>
HIGH and LOW Operators
----------------------
The HIGH and LOW operators work reliably only with constants
and with offsets to external symbols. HIGH and LOW operations are
not supported for offsets to local symbols.
Mixed-Mode Programming (386 Only)
---------------------------------
When assembling code for .386 mode, the assembler now supports direct-
addressing modes between segments with different USE sizes. (Segments can
have the USE16 or USE32 attribute; these attributes refer to the default
size of offsets.) Direct-addressing references to labels in other segments
are correctly resolved. In the following example, the assembler correctly
uses a 32-bit offset to access the data at label a32:
.386
SEG32 SEGMENT USE32
a32 DD ?
SEG32 ENDS
SEG16 SEGMENT USE16
assume ds:seg32
mov eax,a32
SEG16 ENDS
You can also execute a CALL or a JMP to a label in a segment with a
different USE size. However, the label must be declared FAR, and the
CALL or JMP must not be a forward reference. The following example
shows the correct method for executing such a CALL or JMP:
.386
COD16 SEGMENT USE16 'CODE'
proc16 PROC FAR
ret
proc16 ENDP
lab16 LABEL FAR
COD16 ENDS
COD32 SEGMENT USE32 'CODE'
call proc16
jmp lab16
COD32 ENDS
Additional Error Messages
-------------------------
19 Wrong type of register
The register specified in the operand field was incompatible with the
directive or instruction in the operation field. For example, the following
instruction causes this error because you cannot increment the
code segment:
inc cs
36 Extra NOP inserted
During pass 1 the assembler did not have enough information to
correctly infer the length of the encoding for the instruction.
During pass 2 the encoding was found to be shorter than the space
allocated from pass 1, so one or more NOP instructions were inserted
as padding. It may be possible to generate a smaller amount of code
by eliminating a forward reference to a symbol.
The Microsoft Cross-Reference Utility (CREF)
New Feature
-----------
Cross-reference listing files created with CREF now have an
additional symbol. A line number followed by + indicates
that a symbol is modified at the given line. For example:
TST . . . . . . . . . . . . . . 134# 237 544+
The symbol TST is defined at line 134, used at line 237, and
modified at line 544.
The Mouse Driver
If you use the Microsoft Mouse with the Microsoft CodeView(R) debugger
you must have Version 6.0 or later of the Microsoft Mouse. If you do not, use
the version of the MOUSE.COM driver provided in this package. Copy MOUSE.COM
to the appropriate mouse directory. When you are ready to use the mouse, type
mouse
at the DOS command level. If you want to install the mouse driver automatically
every time you reboot, insert the "mouse" command in your AUTOEXEC.BAT file.
Note that in earlier releases of Microsoft C, both the MOUSE.SYS and the
MOUSE.COM driver were provided. If you have been using an earlier version
of the MOUSE.SYS driver, delete the following line from your CONFIG.SYS file:
device=\<directory>\mouse.sys
where <directory> is the directory where the earlier mouse driver resides.
Microsoft CodeView Debugger
New Command-Line Option
-----------------------
If you have an IBM Personal System/2, then you can use the /50
command-line option to start the CodeView debugger in 50-line mode.
Note that you must be in 25-line mode to effectively use either the
/43 or /50 command-line option.
CONFIG.SYS Setting for CVP
--------------------------
To run the protected-mode CodeView debugger (CVP.EXE), you must have
the following line in your CONFIG.SYS file:
IOPL=YES
Using the 7 Command in Protected Mode
-------------------------------------
If you are using OS/2 protected mode and have a math coprocessor, then
you need to use a patch before you can use the CVP 7 command. To apply
the patch, use the OS2PATCH.EXE and PTRACE87.PAT files that come on the
same disk that CVP.EXE comes on. You also need to locate the PATCH.EXE file
that comes with OS/2 and make sure that this file is in a directory listed
in your PATH environment variable. Then follow these steps:
1) Change the current drive and directory to the root directory of the
boot disk. (If the boot disk is a floppy, make sure it is inserted
in the drive you used to boot from.)
2) Give the following command line at the DOS prompt:
OS2PATCH /A PTRACE87.PAT
Note that you may need to give the complete path names for the
OS2PATCH.EXE and for the PTRACE87.PAT file. You do not need to give
a path name for the OS2PATCH.EXE file if you have placed this file
in a directory listed in your PATH environment variable.
Using the Real-Mode Debugger in the Compatibility Box
-----------------------------------------------------
When running the real-mode CodeView debugger in the DOS 3.x
compatibility box, start the debugger with the /S command-line
option. Otherwise, the mouse pointer will not appear.
Using the CodeView Debugger with BIND
-------------------------------------
The real-mode CodeView debugger cannot debug bound (dual-mode)
applications. However, the protected-mode CodeView debugger,
CVP, can debug bound applications.
Expression Evaluator for BASIC Programs
---------------------------------------
In the BASIC expression evaluator, "+" is not supported for string
concatenation.
Stack Trace Command
-------------------
In order for the Stack Trace command (or the Calls menu) to work
reliably, you need to execute to at least the beginning of the main
function or procedure, and the current module should have full CodeView
information (a module has full CodeView information if compiled or
assembled with /Zi).
Error Messages
--------------
The error message "? cannot display" indicates that the Display
Expression command (?) has been passed a valid symbol that it
cannot display. In previous versions of the debugger, structures
could not be displayed. With current version of the debugger, only
the enums type cannot be displayed.
The error message "Expression not a memory address" occurs when
the Tracepoint command is given without a symbol that evaluates to
a single memory address. For example, the commands "TP?1" and
"TP?a+b" each produce this error message. The proper way to put a
tracepoint on the word at address 1 is with the command "TPW 1".
The error message "Function call before 'main'" occurs when you
attempt to evaluate a program-defined function before you have entered
the main function. Execute to at least to the beginning of the main
function before attempting to evaluate program-defined functions.
The error message "Bad emulator info" occurs when CodeView cannot
read data from the floating-point emulator.
The error message "Floating point not loaded" has a special meaning
for CVP (in addition to the explanation given in the CodeView and
Utilities manual). Each thread has its own floating-point emulator.
This message is issued when the current thread has not initialized
its own emulator.
Microsoft Pascal Programs
-------------------------
In this release, Microsoft Pascal programs cannot be debugged with
the CodeView debugger.
Exit Codes for Utilities
The exit codes for LINK and the utilities in the Microsoft CodeView
and Utilities manual should appear as follows:
LINK
----
Code Meaning
0 No error.
2 Program error--something was wrong with the commands
or files input to the linker.
4 System error. The linker
- ran out of space on output files
- was unable to reopen the temporary file
- experienced an internal error
- was interrupted by the user
LIB, EXEPACK, EXEMOD, MAKE, and SETENV
---------------------------------------
Code Meaning
0 No error.
2 Program error--something was wrong with the commands
or files input to the utility.
4 System error. The utility ran out of memory, was
interrupted by the user, or experienced an internal
error.
Microsoft Overlay Linker (LINK)
Overlay Restrictions
--------------------
You cannot use long jumps (using the longjmp library function) or indirect
calls (through a function pointer) to pass control to an overlay. When a
function is called through a pointer, the called function must be in the same
overlay or in the root.
Changed LINK Error Messages
---------------------------
The explanation for fatal-error message L1008 is changed as follows:
The /SEGMENTS option specified a limit greater than 3072 on the
number of segments allowed.
Error message L1009 has been changed to read as follows:
L1009 <number> : CPARMAXALLOC : illegal value
Error message L1053 has been changed to read as follows:
L1053 out of memory for symbol table
The program had more symbolic information (such as public, external,
segment, group, class, and file names) than the amount that could fit
in available real memory.
Try freeing memory by linking from the DOS command level instead of
from a MAKE file or from an editor. Otherwise, combine modules or
segments and try to eliminate as many public symbols as possible.
Warning message L4050 has been changed as follows:
L4050 too many public symbols for sorting
The linker uses the stack and all available memory in the
near heap to sort public symbols for the /MAP option. If
the number of public symbols exceeds the space available
for them, this warning is issued, and the symbols are not
sorted in the map file but are listed in arbitrary order.
New LINK Error Messages
-----------------------
L1003 /QUICKLIB, /EXEPACK incompatible
You cannot link with both the /QU option and the /E option.
L1006 <option-text>: stack size exceeds 65535 bytes
The value given as a parameter to the /STACKSIZE option exceeds the
maximum allowed.
L1063 out of memory for CodeView information
The linker was given too many object files with debug information,
and the linker ran out of space to store it. Reduce the number
of object files that have debug information.
L1115 /QUICKLIB, overlays incompatible
You specified overlays and used the /QUICKLIB option.
These cannot be used together.
L2013 LIDATA record too large
An LIDATA record contained more than 512 bytes. This is
probably a compiler error.
L2024 <name>: special symbol already defined
Your program defined a symbol name that is already used by the linker
for one of its own low-level symbols. (For example, the linker
generates special symbols used in overlay support and other operations.)
Choose another name for the symbol in order to avoid conflict.
L2025 <segmentname>: segment with > 1 class name not allowed with /INC
Your program defined a segment more than once, giving the segment
different class names. Different class names for the same segment
are not allowed when you link with the /INCREMENTAL option. Normally,
this error should never appear unless you are programming with MASM.
For example, if you give the two MASM statements
_BSS segment 'BSS'
and
_BSS segment 'DATA'
then the statements have the effect of declaring two distinct segments.
ILINK does not support this situation, so it is disallowed when the
/INCREMENTAL option is used.
L2041 stack plus data exceed 64K
The total of near data and requested stack size exceeds 64K,
and the program will not run correctly. Reduce the stack size.
The linker only checks for this condition if /DOSSEG
is enabled, which is done automatically in the library
startup module.
L2043 Quick Library support module missing
When creating a Quick library, you did not link with the required
QUICKLIB.OBJ module.
L2044 <name> : symbol multiply defined, use /NOE
The linker found what it interprets as a public-symbol
redefinition, probably because you have redefined a symbol that
is defined in a library. Relink with the /NOEXTDICTIONARY
(/NOE) option. If error L2025 results for the same symbol, then you
have a genuine symbol-redefinition error.
L4003 intersegment self-relative fixup at <offset> in segment <name>
pos: <offset> Record type: 9C target external '<name>'
The linker found an intersegment self-relative fixup. This error
may be caused by compiling a small-model program with the /NT
option.
L4034 more than 239 overlay segments; extra put in root
Your program designated more than the limit of 239 segments to
go in overlays. Starting with the 234th segment, they are assigned to
the root (that is, the permanently resident portion of the program).
Microsoft Library Manager (LIB)
New Option
----------
There is a new option for LIB: /NOIGNORECASE (abbreviated as /N).
This option tells LIB to not ignore case when comparing symbols.
names. By default, LIB ignores case. Multiple symbols that are
the same except for case can be put in the same library. An
example of this is: "_Open" and "_open". Normally you could not
add both these symbols to the same library.
Note that if a library is built with /NOI, the library is
internally "marked" to indicate /NOI. All libraries built
with earlier versions of LIB are not marked.
If you combine multiple libraries, and any one of them is
marked /NOI, then /NOI is assumed for the output library.
In addition, LIB also supports the option /IGNORECASE (/I), which
is completely analogous to /NOIGNORECASE. /I is the default. The only
reason to use it would be if you have an existing library marked /NOI
that you wanted to combine with other libraries which were not marked,
and have the output library be not marked. If you don't use
/IGNORECASE, the output is marked /NOI (see above).
Changed LIB Error Messages
--------------------------
Warning messages U4152, U4155, and U4157-U4159 for LIB are now
nonfatal error messages U2152, U2155, and U2157-U2159, respectively.
Warning message U4151 has been changed to read as follows:
U4151 '<name>' : symbol defined in module <name>, redefinition ignored
New LIB Error Messages
----------------------
The following new warning messages have been added for LIB:
U4155 <modulename> : module not in library
A module specified to be replaced does not already exist in the
library. LIB adds the module anyway.
U4157 insufficient memory, extended dictionary not created
U4158 internal error, extended dictionary not created
For the reason indicated, LIB could not create an extended
dictionary. The library is still valid, but the linker
is not able to take advantage of the extended dictionary
to speed linking.
Microsoft Program Maintenance Utility (MAKE)
New Error Message
-----------------
U1015: <file> : error redirection failed
This error occurs if the /X option is given and error output cannot
be redirected to the given file (for example, because the file
is read-only).
Inference Rules
---------------
You cannot have inference rules in both the TOOLS.INI and the description
file that use both the same inextension and outextension. For example, you
cannot place the following inference rule in the TOOLS.INI file:
.c.obj:
cl /c /Zi /Od $*.c
while also placing the following line in the description file:
.c.obj:
cl /Ot $*.c
However, you can define the same macro in both the TOOLS.INI and the
description file. In such cases, the definition in the description file
takes precedence.
Backslash (\) as Continuation Character
---------------------------------------
Note that MAKE considers a backslash immediately followed by a new-line
character to be a continuation character. When it finds this combination
in a description file, MAKE concatenates the line immediately following
the combination with the line where the combination appears.
If you define a macro that ends in a backslash, make sure that you put a
space after the terminating backslash. For example, if you want to define
macros for the path C:\SRC\BIN and C:\SRC\LIB, you must use the format
illustrated below:
BINPATH=C:\SRC\BIN\<space><newline>
LIBPATH=C:\SRC\LIB\<space><newline>
To illustrate the problems that can result if you do not put a space before the
new-line character, assume that the macros above appear as shown below
instead:
BINPATH=C:\SRC\BIN\<newline>
LIBPATH=C:\SRC\LIB\<newline>
Because a new-line character appears immediately after the backslash at the end
of the first macro, MAKE assumes that you are defining the single macro shown
below:
BINPATH=C:\SRC\BIN\LIBPATH=C:\SRC\LIB\
Microsoft STDERR Redirection Utility (ERROUT)
The ERROUT utility does not accept batch files. To redirect standard-error
output from a batch file, you must enter a command of the following form:
ERROUT COMMAND /c <batchcommand>
If no /f option is given, then ERROUT redirects standard-error output to
the standard-output device.
Mixed-Language Programming
Setting Up Calls to High-Level Languages
----------------------------------------
Section 6.6 of the Microsoft Mixed-Language Programming Guide gives in-
structions for setting up a call to a high-level language from assembly
language. Before you execute a call to a BASIC, Pascal, or FORTRAN routine,
remember to declare an additional parameter if the return value is noninteger.
This additional parameter must contain the offset address of the return value,
for which you must allocate room within the stack segment (normally DGROUP,
the same as the default data segment).
The BIND Utility
Specifying Libraries
--------------------
You need to include DOSCALLS.LIB on the BIND command line. If
DOSCALLS.LIB is not in the current directory, you must give the
complete path name to DOSCALLS.LIB.
BIND automatically searches for API.LIB by looking in directories
listed in the LIB environment variable. However, if API.LIB is
specified on the command line, then BIND will not check the LIB
environment variable; instead, you will need to give the complete
path name.
For example, the following command line successfully uses BIND, if
API.LIB is located in a directory listed in the LIB environment
variable:
BIND FOO.EXE \LIB\DOSCALLS.LIB
Using BIND with Packed Files
----------------------------
The version of BIND released with this package does not work with
files that have been linked with the /EXEPACK linker option.
Running Bound Files with DOS 2.1
--------------------------------
A dual-mode executable file produced with BIND can be run in both
DOS 3.x and DOS 2.x environments. However, if you change the name
of an executable file produced by BIND, then it will not run under
DOS 2.1.
The Microsoft Incremental Linker (ILINK)
ILINK Fatal Error Messages
--------------------------
.sym seek error
.sym read error
The .SYM file is corrupted. Do a full link. If the error
persists, contact Microsoft.
.sym write error
The disk is full or the .SYM file already exists with the
READONLY attribute.
map for segment <name> exceeds 64K
The symbolic information associated with the given segment
exceeds 64K bytes, which is more than ILINK can handle.
can't ilink library <name>
You tried to incrementally link an altered library.
ILINK does not link .LIB files but only .OBJ files.
Use a full link instead.
.obj close error
The operating system returned an error when ILINK attempted
to close one of the .OBJ files. Do a full link. If the error
persists, contact Microsoft.
too many LNAMES in <modname>
An object module has more than 255 LNAME records.
too many SEGDEFs in <modname>
The given object module has more than 100 SEGDEF records.
too many GRPDEFs in <modname>
The given object module has more than 10 GRPDEF records.
symbol <name> multiply defined
The given symbol is defined more than once.
#3
Please report this error to Microsoft.
Out of Memory
ILINK ran out of memory for processing the input. If you
are running ILINK under MAKE, try running it from the shell.
Otherwise, do a full link.
could not run exec
ILINK was unable to find the file EXEC.EXE, which should be
placed somewhere in the search path or in the current
directory.
.exe file too big, change alignment
The segment sector alignment value in the .EXE file is too
small to express the size of one of the segments. Do a full
link and increase the alignment value with the /ALIGNMENT
option to LINK.
.ilk seek error
The .ILK file is corrupted. Do a full link. If the error
persists, contact Microsoft.
Too many defined segments
ILINK has a limit of 255 defined segments, which are segments
defined in an object module as opposed to an executable segment.
Reduce the number of segments if you want to use ILINK.
too many library files
ILINK has a limit of 32 runtime libraries (.LIB files). Reduce
the number of libraries.
too many modules
ILINK has a limit of 1204 modules in a program. Reduce the
number of modules.
.ilk write error
The disk is full, or else ILINK cannot write to the .SYM file
because a .SYM file currently exists and has the READONLY attribute.
file <name> does not exist
ILINK was unable to open the given file. The file named was
in the file list in the .ILK file.
seek error on library
A .LIB file was corrupted. Do a full link and check your .LIB
files.
library close error
The operating system returned an error when ILINK attempted
to close one of the .LIB files. Do a full link. If the error
persists, contact Microsoft.
error closing EXE file
The operating system returned an error when ILINK attempted
to close the .EXE file. Do a full link. If the error
persists, contact Microsoft.
Invalid module reference <module>
The program makes a dynamic link reference to a dynamic link
module which is not represented in the .EXE file.
could not update time on <filename>
The operating system returned an error when ILINK attempted
to update the time on the given file. Possibly the file had
the READONLY attribute set.
invalid flag <flag>
only one -e command allowed
The ILINK command syntax is incorrect.
User Abort
The user issued CTRL+C or CTRL+BREAK.
file <name> write protected
The .EXE, .ILK, or .SYM file needed to be updated and has the
READONLY attribute. Change attribute to READWRITE.
file <name> missing
One of the .OBJ files specified on the command line is missing.
file <name> invalid .OBJ format
file <name> has invalid <recordtype> record
The given .OBJ file has an invalid format or one that is not
recognized by ILINK. This may have been caused by a compiler
or assembler.
file <module> was not full linked
An .OBJ file was specified as input to ILINK, which was not in
the list of files in the original full link.
LOBYTE seg-relative fixups not supported
This error message should occur only with MASM files. See the
Microsoft Macro Assembler 5.0 Programmer's Guide. This type of
object module is not supported by ILINK.
<number> undefined symbols
The given number of symbols were referred to in fixups but
never publicly defined in the program.
Incremental Violations
----------------------
These errors cause a full link to occur if the -e option is used and -i
is not used, else they are fatal errors:
symbol <name> deleted
A symbol was deleted from an incrementally-linked module.
<modname> contains new SEGMENT
A segment was added to the program.
<modname> contains changed segment <name>
The segment contribution (code or data which the module
contributes to a segment) changed for the given module: it
contributed to a segment it didn't previously contribute to,
or a contribution was removed.
<modname>'s segment <name> grew too big
The given segment grew beyond the padding for the given module.
<modname> contains new GROUP <name>
A new group was defined, via the GROUP directive in assembly
language or via the /ND C compiler option.
<modname> redefines group <name> to include <name>
The members of the given group changed.
symbol <name> changed
The given data symbol was moved.
can't add new communal data symbol <name>
A new communal data symbol was added as an uninitialized variable
in C or with the COMM feature in MASM.
communal variable <name> grew too big
The given communal variable changed size too much.
invalid symbol type for <name>
A symbol which was previously code became data, or vice versa.
too many COMDEFS
too many EXTDEFS
The limit on the total of COMDEF records (communal data variables)
and EXTDEF records (external references) is 2000.
invalid CodeView information in .EXE file
The CodeView information found is invalid.
<name> contains new Codeview symbolic info
A module previously compiled without -Zi was compiled with -Zi.
<name> contains new linnum info
A module previously compiled without -Zi or -Zd was compiled
with -Zi or -Zd.
<name> contains new public CV info
New information on public-symbol addresses was added.
invalid .exe file
The .EXE file is invalid. Make sure you are using an up-to-date
linker. If the error persists, contact Microsoft.
invalid .ilk file
.ilk read error
.ilk seek error
The .ILK file is invalid. Make sure you are using an up-to-date
linker. If the error persists, contact Microsoft.
.SYM/.ILK mismatch
The .SYM and .ILK files are out of sync. Make sure you are using
an up-to-date linker. If the error persists, contact Microsoft.
<libname> has changed
The given library has changed.
can't link 64K-length segments
ILINK cannot handle segments greater than 65,535 bytes long.
can't link iterated segments
ILINK cannot handle programs linked with /EXEPACK.
Entry table expansion not implemented
The program call tree changed in such a way that ILINK could
not handle it.
file <name> does not exist
The .EXE, .SYM, or .ILK files are missing.
<name> has changed
The given library module name has changed.
ILINK Warning messages
----------------------
Fixup frame relative to an (as yet) undefined symbol - assuming ok
See documentation for LINK error messages L4001 and L4002,
in the Microsoft CodeView and Utilities manual.
<name> contains TYPEDEFs - ignored
<name> contains BLKDEFs - ignored
The .OBJ file contains records no longer supported by Microsoft
language compilers.
old .EXE free information lost
The free list in the .EXE file has been corrupted. The free
list keeps track of "holes" of free space in the EXE file. These
holes are made available when segments are moved to new locations.
file <name> has no useful contribution
The given module makes no contribution to any segment.
Main entry point moved
The program starting address changed. You may want to consider
doing a full link.