Trailing-Edge
-
PDP-10 Archives
-
BB-D868D-BM
-
language-sources/link.rnd
There are 6 other files named link.rnd in the archive. Click here to see a list.
.LM0.RM70.F.J.SP1.TS5.AP
.TITLE LINK.DOC -- Changes from LINK 4(765) to LINK 4A(1220)
LINK.DOC -- Changes from LINK 4(765) to LINK 4A(1220)
.BREAK
August 1979
.FG30
COPYRIGHT (C) 1979 BY
.BR
DIGITAL EQUIPMENT CORPORATION, MAYNARD, MASS.
.B 2
THIS SOFTWARE IS FURNISHED UNDER A LICENSE AND MAY BE USED AND COPIED
ONLY IN ACCORDANCE WITH THE TERMS OF SUCH LICENSE AND WITH THE INCLUSION
OF THE ABOVE COPYRIGHT NOTICE. THIS SOFTWARE OR ANY OTHER COPIES
THEREOF MAY NOT BE PROVIDED OR OTHERWISE MADE AVAILABLE TO ANY OTHER
PERSON. NO TITLE TO AND OWNERSHIP OF THE SOFTWARE IS HEREBY TRANSFERRED.
.B 1
THE INFORMATION IN THIS SOFTWARE IS SUBJECT TO CHANGE WITHOUT
NOTICE AND SHOULD NOT BE CONSTRUED AS A COMMITMENT BY DIGITAL
EQUIPMENT CORPORATION.
.B 1
DIGITAL ASSUMES NO RESPONSIBILITY FOR THE USE OR RELIABILITY OF ITS
SOFTWARE ON EQUIPMENT WHICH IS NOT SUPPLIED BY DIGITAL.
.PG
.VARIABLE NOSHIP + -
.!1.0
.HL 1 SUMMARY
.P0,1
LINK is the linking loader for the DECsystem-10 and DECSYSTEM-20. LINK
version 4A is a maintenance release designed to get bug fixes made since the
last release of LINK distributed to the field. Very few new features are
present, but LINK 4A should be significantly more reliable than LINK 4 when
loading user programs.
LINK 4A supercedes all previous versions. It runs under all supported monitors,
and has been tested under TOPS-10 6.03A an 7.00, and under TOPS-20 releases 3A
and 4. All patches published through 21-Aug-79 have been incorporated into
LINK 4A.
LINK is documented in the LINK Reference Manual. This manual is available to
DECsystem-10 sites as part of volume 11 of the TOPS-10 Software Notebooks,
or separately as order number AA-0988C-TB. DECSYSTEM-20 sites can find this
manual in volume 4 of the TOPS-20 Software Notebooks, or it can be ordered
separately as order number AA-4183B-TM.
.PAGE
.!2.0
.HL 1 EXTERNAL CHANGES
.!2.1
.HL 2 Changes to LINK
The following sections contain summaries of all externally visible changes
that have been made to LINK since version 4(765). Refer to the file LINK.PCO
for more information on specific edits.
.!2.1.1
.HL 3 EXE file generation by default
Previous versions of LINK loaded certain types of programs incorrectly
if the user did not ask for an EXE file with /SAVE. For example,
programs containing embedded nonexistent pages due to gaps between psect
were loaded with the pages existent, and programs with very low high segment
origins did not load at all. These problems were all due to LINK's inability
to exit with the user program set up in memory correctly, and they could
all be bypassed by typing /SAVE to LINK.
LINK version 4A will automatically generate an EXE file when programs of this
class are detected. As part of this change, the old LNKNCL and LNKNCX
messages have been deleted, and LINK will now issue the new LNKPCL or LNKPCX
messages whenever it decides to generate an EXE file on its own. For more
information, see the PCL and PCX messages in the file LNKMSG.MAN. This was
edit 1146 to LINK, PCO 10-LINK-264.
.!2.1.2
.HL 3 The .HIGH_. Psect
Declaring a psect with the name .HIGH_. is now equivalent to declaring a
high segment via REL block type 3 (the MACRO HISEG or TWOSEG pseudo-ops).
This provides a convenient mechanism for mixing psect and high segment
code in the same MACRO source file, since you can now put
the high segment code into
the .HIGH_. psect. This was edit 1155 to LINK, PCO 10-LINK-271.
.!2.1.3
.HL 3 Loading Large Programs
LINK now catches attempts to load programs that extend beyond location
777777, and issues the new LNKPTL message. Previous versions of LINK
got various internal errors if this occurred. This was edit 1204 to
LINK, PCO 10-LINK-293.
.!2.1.4
.HL 3 Searching FORLIB
LINK will now search SYS:FORLIB.REL in /SEGMENT:LOW mode when loading
FORTRAN program, unless the program is being loaded in /OTS:NONSHAR
mode. This allows subroutines in FORLIB to be written with two segments
without forcing FOROTS to be read in at load time. This was edit 1200
to LINK, PCO 10-LINK-289.
.!2.1.5
.HL 3 Symbol table differences
LINK 4A generates a slightly different runtime DDT symbol table than its
predecessors, which may lead to differences detected by FILCOM if old and
new EXE files loaded with symbols are compared. The differences are as
follows:
.LIST
.le;The module length of the module PAT._. is now set up just like all other
modules. This will show up as the left half of some word in the symbol table
changing from zero to 777774.
.le;Psect names are no longer put into the runtime symbol table as empty
modules. This will make the runtime symbol table generated by LINK 4A
somewhat smaller than that generated by previous versions of LINK for
programs that use psects, since the word pairs that represented the psect
names will be missing.
.ELS
This was edit 1127 to LINK, PCO 10-LINK-250.
.!2.1.6
.HL 3 High segment code in overlays
LINK 4A does not allow any high segment code when loading into an overlay.
If it sees any, it will issue the new LNKHCL message. Previous
versions of LINK allowed this without complaint, but then proceeded to
generate a non-working EXE file. This is a common error, since it is
what happens if a COBOL program compiled with /R is loaded into an
overlay. This was edit 1115 to LINK, PCO 20-LINK-9.
.!2.1.7
.HL 3 /OTS:NONSHAR by default
In addition to the reasons listed on page D-39 of the LINK manual, LINK
version 4 assumed /OTS:NONSHAR if the low segment exceeded 256P in size
at the time system library searching started, since the OTS cannot be
read in at 400000 at runtime if the low segment extends beyond that
address. With LINK 4A, this check has been extended so that /OTS:NONSHAR
is assumed if the low segment extends beyond 330000. This allows for
the low segment to grow somewhat as a result of system library searching
without causing high segment overlap.
The principle result of this edit is that some large user programs may
now be loaded with the appropriate OTS built in, even though they were
built to bring in the OTS at runtime with previous versions of LINK. If
this is objectionable and the program's low segment does not extend beyond
400000, the /OTS:SHARE switch can be used to override the default action.
This was edit 1131 to LINK, PCO 10-LINK-252.
.PAGE
.!2.1.8
.HL 3 /NOINCLUDE, changes to /INCLUDE
There is a new switch, /NOINCLUDE. This switch turns off include mode set
by a previous /INCLUDE switch seen in a global context. Unlike /INCLUDE,
the new /NOINCLUDE switch takes no arguments.
The /INCLUDE switch has also been changed to always set include mode for
the rest of the line when it is seen in a global context. This change
restores the behavior of /INCLUDE from LINK 3A and earlier. The switch
was changed in LINK 4 to only set include mode for the rest of the line
if it was seen in a global context, and had no arguments.
This was edit 1117 to LINK, PCO 10-LINK-242.
.!2.1.9
.HL 3 CPU type conflict checking
The routines in LINK that process modules built for a certain type of
CPU (with /KA or /KI to FORTRAN, or .DIRECTIVE KA10, KI10, or KL10 to
MACRO) have been generalized to understand the KL10 declaration, and to
allow for future CPU types. As part of this change, the LNKKIA message as
been changed to the LNKCCD message, and the CPU types that the
loaded program will run on are now printed in the map. This was edit
1120 to LINK, PCO 10-LINK-243.
.!2.1.10
.HL 3 Change to /UPTO
The /UPTO_: switch will now take a global symbol as an argument. The symbol
does not need to be defined when the switch is typed, but must be defined
by the end of the load. If it is not, LINK will issue the new LNKUUA message
and ignore the switch. This was edit 1175 to LINK, PCO 10-LINK-286.
.!2.1.11
.HL 3 Size of overlay files
Due to a bug, LINK version 4 wrote overlay files that were considerably
larger than those written by LINK 3A. This bug has now been fixed, so
overlay files written by LINK 4A are comparable in size to those written
by LINK 3A. This was edit 1205 to LINK, PCO 10-LINK-294.
.!2.1.12
.HL 3 Generated module name
If any symbols are defined before a module has been loaded, LINK 4A will
start a module of the same name as the symbol. Previous versions of LINK
just dumped the symbol to the map and runtime symbol table with no preceeding
module name. If some module has already been loaded, LINK 4A will continue
to append the symbol to the last module loaded, just as previous versions of
LINK did. This mainly affects symbols defined with switches (/SET, /DEFINE),
and can only happen if /NOINITIAL is used, since the module JOBDAT is normally
loaded by default. This was edit 1143 to LINK, PCO 10-LINK-263.
.PAGE
.!2.1.13
.HL 3 Change to REL block type 24
With LINK 4A, REL block type 24 just declares a new psect. Under previous
versions of LINK, this REL block also took the actions of REL block type 22,
so that any following low segment code went in to the psect just declared.
This was edit 1137 to LINK, PCO 10-LINK-259.
.!2.1.14
.HL 3 _.JBEDV
LINK 4A contains a new JOBDAT symbol, .JBEDV. This symbol will be used in
future releases of TOPS-10 and TOPS-20 in exec mode only for communication
with EDDT and other indepenently-built exec routines. This was edit 1151
to LINK, PCO 10-LINK-267.
.!2.1.15
.HL 3 /SAVE/EXECUTE on TOPS-20
LINK 4A no longer leaves PA1050 in memory on /SAVE/EXECUTE. PA1050 is still
left in on /EXECUTE (this is a known problem). As part of this edit, several
of the messages generated during the final phase of LINK have been cleaned up,
and long forms of the messages have been added. This was edit 1144 to LINK,
PCO 20-LINK-11.
.!2.1.16
.HL 3 Global definitions of psect names
For each psect loaded, LINK will automatically generate a global
symbol with the same name as the psect name, and with the psect
origin as its value. With LINK 4A, the psect name will now be
suppressed to DDT typeout. This was edit 1157 to LINK, PCO 10-LINK-273.
.!2.1.17
.HL 3 Symbol Names as Switch Arguments
LINK now requires symbols typed as arguments to those switches that accept
symbol names to begin with a letter or special character. Previous versions
of LINK allowed the first character to be a digit. This was edit 1167 to
LINK, PCO 10-LINK-280.
.!2.1.18
.HL 3 Error Message Changes
Several of LINK's messages have changed as the result of an error message
cleanup project. The most noticeable difference is that most of LINK's
errors will now print the module and file being processed when the error
occurred, but there are many other minor changes. Most of LINK's messages
were affected by this edit in some way.
.PAGE
The file LNKMSG.MAN contains an updated version of the error message
portion of the LINK manual (Appendix B). We recommend using this file
instead of the LINK version 4 manual for documentation on LINK's messages,
since so many of them have changed since LINK 4 was released.
The error message cleanup was edit 1174 to LINK, PCO 10-LINK-285.
.!2.2
.HL 2 Changes to the overlay handler
The following sections contain summaries of all externally visible
changes that have been made to OVRLAY (the runtime overlay handler) since
version 4(37). Refer to the file OVRLAY.PCO for more information on
specific edits.
.!2.2.1
.HL 3 Changes to RUNOVL and REMOVL
The manual call subroutine REMOVL has been changed to only accept one
argument: the name (or number) of the top link to be removed. OVRLAY
will remove this link and all of its inferiors from memory. REMOVL has
also been changed to not allow the caller to remove itself, a check which
was documented but not implemented.
The manual call subroutine RUNOVL has been changed to allow the caller to
be overlaid. The documentation stated that this was legal, but OVRLAY did
not permit it.
These changes were edit 43 to OVRLAY, PCO 20-OVRLAY-5.
.!2.2.2
.HL 3 JSYS names changed
The JSYS names used in the TOPS-20 version of OVRLAY have been changed to
be the new name% form that will be present in release 4 of TOPS-20. This
change was made because JSYS names are global symbols, and the TIME and SIN
JSYSes in the overlay handler were conflicting with FORLIB subroutines of
the same name. This was edit 41 to OVRLAY, PCO 20-OVRLAY-3.
.!2.2.3
.HL 3 Symbol table pointer update
The TOPS-20 version of OVRLAY has been changed to keep DDT's symbol table
pointer (@770001) up to date whenever it brings in or removes a link and the
corresponding symbol table. Before this change was made, bringing in a link
would cause DDT to lose some or all of the program's symbol table. This was
edit 40 to OVRLAY, PCO 20-OVRLAY-2.
.!2.2.4
.HL 3 Overlay files in SFDs
The TOPS-10 version of the overlay handler will now attempt to obtain the
path in which to find the overlay file by issuing GETTAB UUOs, which can
return the entire path, including SFDs. If the necessary GETTABs are not
implemented, LINK will continue to use the path information left in the
ACs by the monitor. This was edit 46 to OVRLAY, PCO 10-OVRLAY-20.
.PAGE
.!3.0
.HL 1 KNOWN BUGS AND DEFICIENCIES
The following list includes all known problems with LINK as of 31-Jul-79.
The list is divided into two parts. The first is a list of those
bugs for which a solution is not currently known. These will
be fixed roughly in order of their importance, and the patches published
in the appropriate Software Dispatch. The second part is a list of those
problems for which there are no current plans to fix. These are restrictions
in the product.
.HL 2 Problems to be fixed in the near future
.LS
.le;When LINK cannot find an input file, it does not always clear typeahead
before asking the user to provide the correct file spec.
.le;LINK will leave PA1050 in memory on TOPS-20 if program execution is
requested. This happens on the @DEBUG or @EXECUTE commands, or on /EXECUTE
to LINK.
.LE;Loading TOPS-10 DDT.REL version 40(220) specifying /ONLY:HIGH
results in an illegal memory reference. This is indicative of
several problems with /ONLY.
.IF NOSHIP
The check of R.TWSG in the routine CHKSEG is incorrect.
.ENDIF NOSHIP
.LE;Erroneous LNKUGS messages sometimes result when using /ONLY.
.IF NOSHIP
This happens because LINK sometimes checks a RADIX-50 symbol as if it
were an address to determine the segment.
An example of this is building the Fortran compiler.
.ENDIF NOSHIP
.LE;/BACKSPACE does not skip over the file mark after backspacing
a magtape. This leaves the tape incorrectly positioned.
.le;The LNKIMM message does not increment .JBERR, nor does it use
LINK's internal message facility. Thus, it cannot cause a load
to fail if some included modules were missing, nor be controlled by the
usual LINK message switches.
.IF NOSHIP
.LE;/SET:.HIGH_. sometimes results in erroneous LNKRUM messages.
This happens because the switch routine destroys P1.
.ENDIF NOSHIP
.Le;The LNKDNS message has various problems. The offending switch
is not ignored if the message is fatal, nor does the message get printed
when it should.
.le;The handling of /DDEBUG:(MACRO,FORTRAN) is inconsistent.
.LE;The /NOENTRY_: switch assumes that the symbol specified is not
an inter-link entry point. If another link does reference this symbol
then the program being loaded will fail at runtime.
.LE;/USERLIB:(x,y,z) does not work.
.le;TTY:/MAP:NOW when loading an overlaid program does not work.
.IF NOSHIP
LINK should call in LNKOV2 in this case.
.ENDIF NOSHIP
.LE;/CPU:x is ignored. Also, it only takes a single CPU type
as its argument when it should take a set of allowed CPU types.
.le;The T.1 routine (and many others) uses P2 incorrectly. It
should be the last location desired, but is sometimes set up
as the first free instead. Common side effects are that location 777777
cannot always be loaded, or that LINK reads in too many pages from its
overflow files.
.le;LINK has some problems putting the .EXE file in the proper place.
If an ersatz device was specified to /SAVE, and LINK must
overflow the HC area to disk, then the .EXE file may
end up on the wrong path. Also, if /EXECUTE was specified,
then LINK looks only on the user's default path or connected
directory, in spite of any contrary specification to /SAVE.
.le;The LNKLNS message does not print a carriage-return
line-feed at the end of the line.
.LE;LINK does not accept commands on the monitor command line, as
.lm+5.b;_.R LINK (commands) or @LINK commands
.LM-5
.LE;/LINK when specified in a global context has problems.
.IF NOSHIP
The S.DEBG code from edit 730 should be reworked.
.ENDIF NOSHIP
.LE;/SET specified without an argument results in the LNKISN message.
.LE;The /NOREQUESTS_: switch does not accept the complete radix-50
character set.
.le;The /SEVERITY_: switch takes an octal argument, but should take
a decimal one to be consistent with /ERRORLEVEL_: and the LINK manual.
.le;Defining a common block with the name of .COMM_. does not result in
a definition of blank common.
.le;On TOPS-20, overlay plots are generally 2.54 times too large.
.IF NOSHIP
This arises because most TOPS-20 plotters think metric, but LINK still
thinks English.
.ENDIF NOSHIP
.IF NOSHIP
.LE;The LNKARL message is much too long. It and perhaps some others
should be cut up into several lines.
.ENDIF NOSHIP
.ELS
.PAGE
.HL 2 Problems for which no solution is currently planned.
.LS
.le;If code or data that contains fixups (external, Polish, inter-psect
references, etc.) is overwritten at load time, LINK can get an illegal
memory reference or go into a loop. This can happen if psects overlap,
or if LOC or RELOC statements are used incorrectly in a MACRO program.
This is a restriction.
.LE;Generation of a symbol file via /SYFILE_: requires that symbols
be loaded with the program. This is a restriction.
.le;LINK does not read SWITCH.INI on a LOAD-class command.
This is a SCAN restriction.
.le;On TOPS-20, logical names pointing to files do not work.
This is a restriction.
.ELS
.PAGE
.!4.0
.HL 1 INSTALLATION INSTRUCTIONS
.!4.1
.HL 2 TOPS-10
To install LINK version 4A on your system, copy the files LINK.EXE,
LNK???.EXE, and OVRLAY.REL from the distribution tape to SYS:, and then
copy the file LINK.HLP from the distribution tape to HLP:. Note that
all of LINK's EXE files must be on the same disk structure.
The batch control file LINK.CTL contains all necessary instructions to
assemble and load LINK, and to produce listings and storage maps. It will
normally have to be modified slightly to correspond to the installation
configuration.
.!4.2
.HL 2 TOPS-20
To install LINK version 4 on your system, copy the files LINK.EXE and
OVRLAY.REL from the distribution tape to SYS:, and then copy the file
LINK.HLP from the distribution tape to HLP:. This can be done by
mounting the tape labelled Distribution Tape on MTA0_:, then typing
the following commands:
.B 1;.NF;.NJ;.LM +5
R DUMPER
TAPE MTA0:
REWIND
DENSITY 1600-BPI
SKIP 2
RESTORE DSK*:<*>LINK.EXE (TO) SYS:*.*.-1, -
DSK*:<*>OVRLAY.REL (TO) SYS:*.*.-1, -
DSK*:<*>LINK.HLP (TO) HLP:*.*.-1
REWIND
.LM -5;.F;.J
To rebuild LINK from sources, mount the tape labelled Distribution Tape
on MTA0_:, then type the following commands:
.B 1;.NF;.NJ;.LM +5
R DUMPER
TAPE MTA0:
REWIND
DENSITY 1600-BPI
SKIP 3
RESTORE DSK*:<*>*.*.* (TO) <self>*.*.*
REWIND
CTRL/C
!At this point, you should TYPE LINK.CTL to see what it does.
SUBMIT LINK.CTL/TIME/RESTART
.F;.J;.LM -5
The batch control file LINK.CTL contains the procedures necessary to rebuild
LINK and OVRLAY from sources. It may have to be modified slightly to
run at your installation, so you should type it to see what it does
before typing the SUBMIT command above.
.PAGE
.!5.0
.HL 1 INTERNAL CHANGES
.!5.1
.HL 2 Changes to LINK
All changes made to LINK 4(765) to produce LINK 4A(1220) are summarized
below.
Refer to the file LINK.PCO for more detailed information on specific edits.
.B 2
.TS 9,17,25,33,41,49,57,65
.LITERAL
766 MCHC 17-MAR-78
Store correct KL code(offset calculated by JFFO) for inconsistancy
check of modules to come.
LNKLOD
767 MCHC 17-MAR-78
Clear AC P2(required size) when coing forced dump of LC area,
which returns through LNKCOR and will cause looping if
garbage is in it.
LNKOLD
770 MCHC 17-MAR-78
Add code to allow paging for the first time in routine to
output undefined symbols(especially if undefined symbol table
does not begin at end of a chunk of code.)
LNKXIT
771 MCHC 23-MAR-78
Fix bug in doing large( > 400000) pop loop in 2 chunks.
LNKCOR
772 MCHC 23-MAR-78
Edit 770 did not adjust start of symbol table that came after
the undefined symbol table.
If /SET:FOO:nnnnnn/SYMSEG:PSECT:FOO is used so that a psect
was created just for the symbol table, the following should
happen:
PAT..=nnnnnn
.JBUSY (117)/ -U,,PAT..+100
where U is the length of undefined symbol table
.JBSYM (116)/ -L,,PAR..+100+U
where L is the length of the symbol table
LNKXIT
773 JNG 30-Apr-78
Fix GSDLT in LNKXIT to not leave some area's UB
pointing beyond .JBREL if the GS area is already gone.
Routines: LNKXIT
774 JNG 30-Apr-78 SPR 10-25711
Fix bad calculation of UW in EXE file writer.
Routines: LNKXIT
775 DZN 1-May-78 SPR 20-11396
Make sure /DEBUG:FORTRAN loads the starting address of
FORDDT and not the user's program (unless explicit /START).
Routines: LNKWLD
776 DZN 4-May-78 SPR 10-23733
Fix address check and lost .JBVER when loading small programs
with /SAVE and no data in core-image pages 0 or 1.
Routines: LNKXIT
777 DZN 18-May-78 SPR 10-24008
Fix allocation of COMMON blocks when a COMMON block is first
referenced but not defined, then later defined. Also document
SY.RF as destroying P1-P4.
Routines: LNKOLD, LNKLOD
1000 to 1077 Reserved for Development.
1100 DZN 23-May-78 SPR 10-24042
Fix LNKMAP to correctly free the index blocks it uses for sorting,
to keep the integrity of the DY area.
Routines: LNKMAP
1101 JNG 29-May-78 SPR 10-23623
Fix LINK to correctly load indexed libraries that contain modules
which have no entry points and thus do not appear in the index
when indexed with MAKLIB.
Routines: LNKOLD,LNKLOD,LNKWLD,LNKLOW
1102 DZN 18-Jun-78 SPR 20-11085
Fix paging routines to detect moving a window past 512P. In this
case, make the end of the window set right at 512P.
Routines: LNKLOD
1103 DZN 19-Jun-78
See that the list of .REQUEST/.REQUIRE blocks is not freed twice,
to preserve the integrety of the DY area.
Routines: LNKLOD
1104 JNG 20-Jun-78
Fix address checks when dumping LC or HC area to disk. Remove
edit 750 in LH.DMP, so we will never try to shrink the current
area by more pages than the area has.
Routines: LNKCOR
1105 JNG 20-Jun-78
Fix edit 740 to not destroy an AC that held the input file's PPN.
This caused LINK to not be able to find a file when the user gave
an explicit path including SFDs.
Routines: LNKFIO
1106 JNG 27-Jun-78 QAR RDH
Update HL.S1 from RC.CV of the highest PSECT loaded at the end of
loading. This causes the EXE file generator to allocate all of
the pages that it should if the last PSECT ends with a BLOCK statement.
Routines: LNKLOD
1107 MCHC 3-Aug-78
Fix bug in .SETEX--routine to expand RC.TB and RC.NTB tables
in DY area by obtaining bigger spaces, copying the data from
the old tables, and freeing the old table spaces.
The bug was in address calculation in freeing one of the tables.
The code is re-arranged to do a DY.GET followed by DY.RET
then another DY.GET and DY.RET
LNKWLD
1110 MCHC 7-Aug-78
Type out the PSECT name as part of the error message when a
non-existent one is used with /SYMSEG in GETSST routine.
Don't clear the name from memory cell, loop back without restoring the
stack and treat this case as a default case.
LNKXIT
1111 MCHC 7-Aug-78
Fix LNKXIT core management bug introduced by edit 772.
LNKXIT
1112 JNG 15-Aug-78 SPR 10-25902
Fix one off bugs in map printing segment lengths in K/P and
words free.
Routines: LNKPAR, LNKMAP
1113 DZN 25-Aug-78 SPR 20-12001
Fix memory management problems when plotting the overlay
tree. See that LINK never shrinks back on TOPS-20 until final
placement of the loaded program. Add LNKPOT message to tell user
when LINK is plotting the overlay tree.
Routines: LNKCOR, LNKXIT, LNKPLT, LNKERR
1114 DZN 1-Sep-78 SPR 20-11999
Zero count of COBOL symbol words and ALGOL OWNs loaded when
done loading a module, so they don't get counted in subsequent
modules in the same file.
Routines: LNKOLD, LNKLOD
1115 DZN 2-Sep-78 SPR 20-11997
Add LNKHCL message to complain when loading high segment code
into a link other than the root in an overlaid program.
Routines: LNKERR, LNKOLD
1116 JNG 7-Sep-78
Put back part of the code removed by edit 716. Performance
improvements are only kosher as long as the code removed is
unneeded.
Routines: LNKLOD
1117 DZN 14-Sep-78
Make /INCLUDE:args also set include mode, as it did long ago.
But also add /NOINCLUDE to turn off include mode but not
delete the original args.
Routines: LNKPAR, LNKWLD
1120 DZN 22-Sep-78 SPR 10-26135
Fix CPU mismatch checks so that they work. Remove edit 766,
revamp all CPU check code to use a bit mask of valid CPUs,
delete the LNKKIA message and add LNKCCD, and change the
map to include the correct information. Also, make the map
show which CPUs the entire program can be run on.
Routines: LNKPAR, LNKERR, LNKOLD, LNKLOD, LNKINI, LNKMAP, LNKLOW
1121 JNG 4-Oct-78 QAR JMF
Fix LNKXIT bug so .JBSYM ptr won't include the undefined symbol
table. This was broken by edit 772.
Routines: LNKXIT
1122 DZN 5-Oct-78 SPR 10-26222
Remove edit 740, which attempted to use SCAN's /VERSION switch,
rather than LINK's. SCAN's switch is a file-specific switch, which
is not the way LINK wants it to work. However, still fix the original
problem (having to type /VERSION to 6 characters to work) by making
LINK's /VERSION switch unique to any abbreviation.
Routines: LNKPAR, LNKSCN, LNKWLD, LNKFIO
1123 DZN 10-Oct-78 SPR 10-26580
Use HRLI instead of HRL to load ENTER error flag.
Routines: LNKFIO
1124 DZN 11-Oct-78 SPR 10-26712
Edit 636 broke LINK's ability to be run execute-only. Fix
this by making the TTY log routine once more return into the
potentially execute-only high segment properly.
Routine: LNKINI
1125 JNG 1-Nov-78 SPR 10-26379
Don't try to run the high segment file on /SAVE/RUN (or /SAVE/DEBUG)
when generating an EXE file. This fixes ?nnnLHC.EXE not found when
the user types the above switches and the HC area has overflowed.
Routines: LNKXIT
1126 JNG 1-Nov-78 SPR 10-26433
If all 7.01 GETTABs to determine where we came from are not available,
use the contents of the ACs to do GETSEG UUOs.
Routines: LNKINI
1127 JNG 14-Nov-78 QAR DIB
Set up the module length for PAT.. in the runtime symbol table.
Routine: LNKXIT
1130 DZN 26-Jan-79 SPR 10-27212
Make LINK honor /MAXCOR correctly when a request for memory in a
pagable area is made. In this case, edit 650 made LINK count the
memory request toward the /MAXCOR value, even though the window
can simply be moved.
Routine: LNKCOR
1131 DZN 26-Jan-79 SPR 10-27123
Make LINK decide to load a non-sharable OTS if the low segment
has grown within 40 pages of the origin of the OTS high segment
rather than letting the low segment grow past it first.
Otherwise, the low segment may cross the beginning of the OTS
during the system library search when it is too late to fix it.
Routine: LNKLOD
1132 JNG 30-Jan-79 SPR 10-26576
Re-work EXE file writer to fix several problems, including:
. PSECTs above the high segment not written properly.
. Absolute code not loaded correctly.
. Bad EXE directory if loading overlays and small /SPACE switch.
. PSECT attributes not written into the EXE file.
. Page 1 written into page 0 if page 1 is lowest page containing code.
. Address checks when writing the EXE file.
. Bad EXE file if EXE directory is longer than two pages.
. ?LNKCNW or bad DDT symbol table when loading PSECTs.
Routines: LNKPAR, LNKINI, LNKLOD, LNKOLD, LNKWLD, LNKXIT.
1133 JNG 30-Jan-79 SPR 10-26576
Add a long message for the LNKSTL message.
Routine: LNKERR
1134 JNG 30-Jan-79 SPR 10-27024
Avoid address check in LNKXIT while writing EXE file if lowest
code loaded is between 2000 and 377777, but the program being
loaded is not so large that LINK needs to overflow to disk.
This edit is an extract of part of edit 1132.
Routines: LNKXIT
1135 DZN 31-Jan-79 SPR 10-26792
Force PG.SU to expand anyway if a request crosses a page boundary
and the window is not at least two pages long.
Routine: LNKLOD
1136 JNG 31-Jan-79 SPR 10-26518
Avoid IO to unassigned channel in LNKXIT while writing an EXE file
if segment ends on last word of a page and LINK is not paging to disk.
This edit is an extract of part of edit 1132.
Routine: LNKXIT
1137 JNG 1-Feb-79 SPR 20-12411
Don't change RC.CUR in T.24. Also set default PSECT name to left-
justified .LOW. (not right-justified) if name not given in block.
Routine: LNKOLD
1140 JNG 6-Feb-79 SPR 10-26410
Clear LSTSYM when a non-loaded local is encountered.
Routine: LNKOLD
1141 JNG 15-Feb-79 SPR 10-26290
Make the EXE file writer stop writing when it passes the size
of the user program, instead of writing the entire LC area.
This edit supercedes edit 1136 and is an extract of edit 1132.
Routine: LNKXIT
1142 JNG 16-Feb-79
Fix problems with multiple /SET:.HIGH.s introduced by edit 1132.
Routine: LNKWLD
1143 JNG 16-Feb-79 QAR CKS
Make sure symbols never get into the LS area before a module name.
If they try (/NOINITIAL/SET), dummy up a module name from the symbol.
Routine: LNKLOD
1144 DZN 16-Feb-79 SPR 20-12473
Clean up code to run the .EXE file so that PA1050 is not left in
memory on TOPS-20, and so that more of the final messages use .ERR.
instead of OUTSTRs.
Routines: LNKERR, LNKLOG, LNKLOW, LNKPAR, LNKWLD, LNKXIT
1145 DZN 22-Feb-79
Load local symbols and store symbol table pointers on TOPS-20 if
/DEBUG:DDT and leaving program in memory. Broken by edit 1144.
Routines: LNKXIT, LNKWLD
1146 DZN 8-Mar-79 SPR 10-26290
Change the 'Not enough core to load' message to 'Program too complex'.
Then cause more cases to force .EXE file generation (e.g., PSECTs above
high segment, gaps between PSECTS).
Routines: LNKPAR, LNKXIT, LNKERR
1147 JNG 12-Mar-79
Avoid bad EXE file if lowest location loaded is above 400000, LINK
is overflowing to disk, and lowest location loaded was not the first
location loaded (i.e., load was not monotonic).
Routine: LNKXIT
1150 DZN 14-Mar-79 SPR 10-27632
Make LOGINI in LNKINI.MAC use standard LKNFIO routines to set up the log
file, so that the default path of a log file is preserved over the
ENTER.
Routine: LNKINI
1151 JNG 29-Mar-79
Add the new Job Data Area location .JBEDV to the initial symbols.
Routine: LNKINI
1152 JNG 3-Apr-79
Get EXE file right when loading overlays. Broken by 1132.
Routines: LNKOV1, LNKXIT
1153 JNG 12-Apr-79 QAR JBD
Give LNKIPX message if a Define PSECT block (type 24) contains
an invalid PSECT index.
Routine: LNKOLD
1154 JNG 12-Apr-79 QAR JBD
Re-write T.23 to fix the following problems:
. Don't re-define the PSECT indices in terms of the order of block 23s.
. Don't require a name of zero in the first block 23.
. Don't do a set PSECT (block type 22) action on block type 23.
. Expect PSECT index instead of name in first word (name still works).
Routine: LNKOLD
1155 JNG 13-Apr-79 QAR JBD
Allow PSECT .HIGH. to be synonymous with TWOSEG.
Routines: LNKOLD, LNKWLD
1156 JNG 13-Apr-79 QAR JBD
Relocate the breaks in block type 5 with respect to .LOW.
every time, even if the current PSECT is not .LOW..
Routine: LNKOLD
1157 JNG 13-Apr-79 QAR DZN
Suppress the PSECT name global symbols to DDT typeout.
Routine: LNKWLD
1160 JNG 14-Apr-79 QAR TW/JMF
Don't put junk in runtime undefined symbol table for symbols
that are used in Polish blocks.
Routine: LNKXIT
1161 JNG 4-May-79 SPR 10-27727
Clean up Psect printout in map.
Routines: LNKSUB, LNKMAP.
1162 JNG 4-May-79 SPR 20-12825
Set up DDT's symbol table pointers on /DEBUG/SAVE. This edit is
an extract of edit 1144.
Routines: LNKXIT
1163 JNG 8-May-79 QAR DC
Never mark .HIGH. as relocatable, since we default its origin.
This was broken by edit 1155.
Routine: LNKWLD
1164 JNG 8-May-79 SPR 10-27598
Don't overwrite the first page of the FX area when writing a map
if the LS area is paging and the last piece of the area exactly
fits into the window.
Routine: LNKMAP
1165 DZN 15-May-79 SPR 10-27925
Zero LSTSYM whenever a call to SY.RLS says a symbol requested for symbol
table fixup was not the last symbol loaded. This prevents symbol fixup
requests from finding a long-obsolete symbol in LSTSYM that just happens
to match.
Routine:LNKLOD
1166 JNG 15-May-79
Don't allow PSECT indices in Polish blocks unless the first halfword
was the default PSECT index for the block.
Routine: LNKOLD.
1167 JNG 17-May-79 QAR 10-3081
Don't allow symbols typed as switch arguments to begin with digits.
Routines: LNKSCN
1170 JNG 23-May-79 SPR 10-27945, QAR 10-3070, 10-3087
Fix some memory management problems in LNKXIT when not writing an
EXE file.
Routine: LNKXIT
1171 JNG 30-May-79 QAR 10-3049
Fix edit 1146 to say LNKPCL even on TOPS-10 if it doesn't like
the PSECT attributes.
1172 JNG 5-Jun-79
Fix many memory management problems when writing a runtime symbol
table, especially when psects are involved.
Routines: LNKPAR, LNKINI, LNKOV1, LNKOV2, LNKWLD, LNKXIT
1173 JNG 10-Jun-79
Update RC.HL on /COMMON.
Routine: LNKWLD
1174 DZN 10-Jun-79 SPRs 20-12548, 20-12244, QAR 10-03199
Revamp all error messages.
. Label all messages with E$$xxx:: or Ennxxx:: so messages can be found
when debugging. E$$xxx should be the label of the .ERR. (or its
preceeding PUSH P,[channel]) that defines the .ERxxx text block.
Ennxxx should be the label of all other .ERR.s with the same assigned
mnemonic, with nn starting at 01.
. Include the module and file name in which an error was detected in all
applicable messages.
. Make .OERR. synonamous with OUTSTR for use in place of .ERR. when a
message must be printed with an OUTSTR, so that all such messages can
be found easily.
. Make the list of messages and long text in LNKERR and the actual
messages in LINK agree.
. Fix log device being a terminal other than the controlling one.
. Clean up the wording of all messages to be more consistent.
Routines: All
1175 JNG 12-Jun-79
Fix /START and /UPTO with symbols as arguments.
Routines: LNKLOD, LNKWLD, LNKERR
1176 JNG 12-Jun-79
Disallow /SYMSEG:PSECT:name with /OVERLAY.
Routine: LNKWLD
1177 JNG 12-Jun-79
Make /VERSION in global context not lose local switches.
Routines: LNKPAR, LNKWLD
1200 JNG 13-Jun-79
If loading reentrant FOROTS, search SYS:FORLIB/SEGMENT:LOW.
This is required for FOROTS version 6 and later.
Routine: LNKLOD
1201 JNG 13-Jun-79
Disallow /SEGMENT:PSECT, which worked because it used the same
keyword table as /SYMSEG.
Routines: LNKPAR, LNKLOD, LNKOV1, LNKOV2, LNKWLD
1202 JNG 14-Jun-79
Fix /VERSION after 1172, and make LINK assemble on TOPS-20
after edit 1174.
Routines: LNKPAR, LNKFIO, LNKLOG, LNKXIT.
1203 JNG 14-Jun-79
Add support for Extended FORTRAN.
Routines: LNKPAR, LNKMAP, LNKLOD, LNKERR
1204 JNG 14-Jun-79
Check for programs that extend beyond location 777777, and
issue the LNKPTL message.
Routines: LNKLOW, LNKOLD, LNKLOD, LNKERR
1205 JNG/DZN 14-Jun-79 SPR 10-27954
Re-claim some wasted blocks in .OVL files.
Routine: LNKOV1
1206 JNG 14-Jun-79
Fix a NO.COR in LNK999 that edit 1174 missed.
Routine: LNK999
1207 JNG 29-Jun-79
Make the LNKCMX message continue loading, so the user can run
the program if he wants to.
Routine: LNKLOD
1210 JNG 29-Jun-79
Allow 1-word block type 5's, so SAIL output will load. Also
allow a program break of exactly 1,,0 (bypass the LNKPBI check).
Routine: LNKOLD
1211 JNG 29-Jun-79 QAR 10-3303
Fix typo in LNKDRC message, avoid Illegal UUO. Broken by 1174.
Routine: LNKWLD
1212 DZN 4-Jun-79
Fix various typos and other loose ends in the aftermath of 1174.
1213 JNG 5-Jul-79
Eliminate the ISD message; on multiple partial definitions, just
ignore them if their values agree, and give the MDS message if
they don't.
Routines: LNKPAR, LNKOLD, LNKLOD, LNKERR
1214 DZN 9-Jul-79 QAR 10-03315
Fix mismatched angle brackets so PIP's /V switch doesn't complain.
Comments should not contain angle brackets unless they actually
terminate conditionals, repeats, etc.
Routines: LNKHST, LNKCOR, LNKOV1, LNKXIT
1215 JNG 23-Jul-79 QAR R.ACE
Use RC.HL for .ABS. and .LOW. for LOWLOC update at CHKLLC, since
RC.CV may not be correct. In particular, RC.CV for .ABS. is always
zero.
Routine: LNKLOD
1216 JNG 23-Jul-79 QAR CKS
Preserve P1/P2 in SYMOUT, avoid illegal memory reference if
undefined symbols exist.
Routine: LNKXIT
1217 DZN 25-Jul-79
Clean up the listings for release. Update all copyright notices.
Remove all editing lines. Break pages in good places.
Routines: All
1220 DZN 24-Aug-79
Release on both TOPS-10 and TOPS-20 as version 4A(1220).
Routines: All
.END LITERAL
.PAGE
.!5.2
.HL 2 Changes to OVRLAY
All changes made to OVRLAY 4(37) to produce OVRLAY 4A(50) are summarized
below.
Refer to the file OVRLAY.PCO for more detailed information on specific edits.
.B 2
.TS 9,17,25,33,41,49,57,65
.LITERAL
40 DZN 15-Sep-78
On TOPS-20, if DDT exists, set its internal symbol table pointer
whenever we change .JBSYM.
41 DZN 5-Oct-78
Use new NAME% form of JSYS names to avoid conflicts with user-defined
globals.
42 DZN 5-Oct-78
Change FTENEX conditional to TOPS20 to be consistent with the rest
of LINK. Use proper mnemonics for JSYS arguments. Some code cleanup.
43 DZN 13-Oct-78
Fix link deletion problems. Make REMOV. take only a single argument,
and delete that link and all of its inferiors (otherwise lost links
result). Allow RUNOV. to delete the calling link as documented. Also
remove OVLAOC message (use OVLARC instead).
44 DZN 15-Oct-78
Fix argument checking for calls to manual subroutines. This involves
allowing all double and single precision argument types to work,
making the OVLIAT message fatal and not type junk, and getting
the correct user PC (see edit 10).
45 DZN 15-Oct-78
Fix PDL overflow if many calls to RUNOV. RUNOV. now unbinds back
through the return PC on the stack, allowing replacement of links
at the same level to succeed without the PDL overflow.
46 JNG 15-Jun-79
Try GETTABs to determine the full path that we were run from on
TOPS-10.
47 DZN 25-Jul-79
Clean up the listing for release.
50 DZN 27-Aug-79
Release on both TOPS-10 and TOPS-20 as version 4A(50).
.END LITERAL
.PAGE
.!6.0
.HL 1 SUGGESTIONS
The following suggestion list has been accumulated from various sources,
including SPRs and DECUS sessions. The appearance of a suggestion on
this list does not necessarily mean that DIGITAL ever intends to implement
it.
.LS
.le;Search REL_: for system libraries if they cannot be found on SYS:.
.le;Print an informational message when searching a system library, giving
the number of undefined symbols remaining when the search starts.
.le;Implement relocatable psects.
.le;Support long symbols.
.le;Support a better symbol character set than RADIX-50.
.le;Support extended addressing.
.le;Load programs into another fork on TOPS-20.
.le;Modify LINK to be callable as a subroutine from other programs.
.le;Make LINK use the same message convention as SCAN. In particular,
make LINK recognize SCAN's /MESSAGE switch.
.le;Sort the symbols listed in LINK's map files.
.le;Use a better free memory algorithm. Currently, LINK uses a best-fit
method. This is known to be inferior, potentially slowing LINK down.
.IF NOSHIP
Another result is that many one-word blocks are always on the
front of the free memory list, making debugging of memory management
problems very painful.
.ENDIF NOSHIP
.LE;Use virtual memory more intelligently. In particular,
don't zero memory just allocated via CORE or PAGE_. UUOs, since
it is already zero.
.le;Redesign the structure of the title REL block (block
type 6) to allow easier upward compatibility of CPU types.
.le;Print appropriate error messages if conflicting or inappropriate
psect properties are detected, such as concatenate and overlay.
.le;Implement block type 11 code bits in the symbol store operator.
.le;Make overlaid psects and common blocks coexist. Other DIGITAL loaders
actually handle common blocks as overlaid psects. One advantage would be
that the largest common block declaration would not necessarily have to
be loaded first.
.LE;MACRO and LINK should use some facility (perhaps the proposed
REL block types 1042 and 1043) to allow full file specifications in
library requests embedded in .REL files. Such an implementation
should preferrably use text rather than SIXBIT fields as are now
used.
.le;Make the overlay plotter code able to write an LPT format
file to the disk. This would allow printing with non-default parameters,
for instance.
.le;Make the LNKUGS message print something more informative than
a 0 as the value of a polish expression.
.LE;Add KS10 to the CPU specifications allowed both in MACRO
and LINK.
.IF NOSHIP
.LE;DEBLNK (the multi-segment debugging version of TOPS-10 LINK) does
not work. There are some remaining MOVE ['LNKERR']s that should be
HRRI 'ERR's.
.le;The code implementing the /ESTIMATE and /MAXCOR switches
should be placed under off conditionals on TOPS-20, since
these switches only exist on TOPS-10.
.le;All references to RUNCOR should be removed, since the switch has
been removed.
.le;Add an initialization macro to all of LINK's sources that searches
all of the necessary universal files and does other setup. Currently,
it is very painful to add a new universal file to the list.
.le;LNK999 (the TOPS-10 emergency memory manager) appears broken. There
are problems when running LINK with small virtual limits. This might
be a TOPS-10 7.00/7.01 problem.
.le;The handling of block type 776 (symbol files) is very strange and needs
to be cleaned up.
.ENDIF NOSHIP
.ELS
.B 2
[End of LINK.DOC]