1
0
mirror of https://github.com/PDP-10/its.git synced 2026-02-27 09:18:58 +00:00

STINKR - new linker. No source.

This commit is contained in:
Lars Brinkhoff
2017-01-27 10:24:20 +01:00
committed by Eric Swenson
parent 544dbc74af
commit d0555d8c41
5 changed files with 164 additions and 1 deletions

View File

@@ -6,7 +6,7 @@ SRC = system syseng sysen1 sysen2 sysen3 sysnet kshack dragon channa \
bawden _mail_ l lisp libdoc comlap lspsrc nilcom rwk \
inquir acount gz sys decsys ecc alan sail
DOC = info _info_ sysdoc kshack _teco_ emacs emacs1
BIN = sysbin device emacs _teco_ lisp liblsp alan inquir sail comlap
BIN = sys2 sysbin device emacs _teco_ lisp liblsp alan inquir sail comlap
# These directories are put on the minsys tape.
MINSYS = _ sys

View File

@@ -203,6 +203,7 @@ A list of [known ITS machines](doc/machines.md).
- SPELL, ESPELL spell checker.
- SRCCOM, Compares/merges source files, compares binary files.
- STINK, linker.
- STINKR, new linker (binary only).
- STY, pseudo-terminal for multiple sessions.
- STYLOG, convert PTY output file into ascii file.
- SUPDUP, Supdup client.

BIN
bin/sys2/ts.stinkr Executable file

Binary file not shown.

88
doc/_info_/stinkr.info Executable file
View File

@@ -0,0 +1,88 @@
----- STINKR INFO ----- 20 April 1977 ----- AS@DM -----
STINKR is a new loader that accepts RELOCATABLE output produced by
MIDAS. It does not implement all of the features implemented by
STINK (see below). However, it has some features of its own, namely:
1. multiple (up to 16) segments (location counters)
2. automatic segment allocation
3. loads into an inferior, so that there are no loading
restrictions
4. can invoke an initialization routine
5. does its own PDUMPing
The following STINK features are not implemented:
a) fancy FAIL stuff (e.g. fixups)
b) global relocation
c) global offset
d) local symbols (they are ignored)
e) load-time conditionals
f) load-time operations
g) libraries
h) COMMON
i) 1PASS assembly
j) shifted relocation by globals
-- JCL Format --
JCL to STINKR is optional. If present, it should consist of a
sequence of arguments separated by spaces. An argument can be
an option string or a file name. An option string has the form
-abc, where a, b, and c are option names. The existing options are:
s - print symbol table
p - print description of RELOCATABLE files loaded
d - print additional STINKR debugging info
A file name is either loaded or xfiled, depending upon its format.
If no second file name is given, it is assumed to be STINKR.
Patterns using * (matches any sequence of characters) and ? (matches
any single character) can be given. If no file names are specified,
command input is taken from the terminal.
-- Command Format --
STINKR takes commands from files or the terminal in a manner similar
to STINK. A command consists of a single line, beginning with the
command name, optionally followed by arguments. The commands are:
s <o0>,<o1>,<o2>,... define segments (see below)
l <file> load file <file>
x <file> execute command file <file>
i <name> specify initialization routine
o <file> specify output file name
; <anything> a comment
Blank command lines are ignored.
The basic operation of STINKR is to read all of the commands, loading
specified files and remembering the other information. When the
basic command file is finished (or ^@ is typed, if terminal input),
STINKR then does the following:
a) print list of undefined symbols, if any
b) print segment map
c) print symbol table, if desired (-s option)
d) call initialization routine, if any
e) PDUMP to output file, if any
-- Segments --
In order to use multiple segments, one must use the macros in the
file SYSENG;MULSEG INSERT while assembling. If more than one segment
is to be used, the s command must be given, before any files are
loaded. The arguments to the s command are a list of OCTAL
addresses, which specify the origins of all of the segments,
starting with segment 0. Instead of giving a particular origin,
one may also specify either N (next location) or P (next page);
in order for these to work, the MULSEG macros MUST be used.
-- Initialization Routine --
One may specify an initialization routine to be run immediately
before PDUMPing. This routine could, for example, purify read-only
segments. When invoked, locations 20 to 20+N-1 will contain the
FIRST,,LAST locations of the N segments. The initialization routine
should return with a .BREAK 16,0 if successful or a .VALUE if
unsuccessful.

74
src/syseng/mulseg.insert Executable file
View File

@@ -0,0 +1,74 @@
; THIS INSERT FILE ALLOWS USE OF STINKR MULTIPLE SEGMENT FEATURE
; MACROS:
;
; .MSEG o1,o2,o3,...
;
; This macro should come after the RELOCATABLE and any RADIX
; command and before any code. The arguments are the virtual
; origins of the segments other than segment 0. The virtual
; origin of segment 0 is always 0. The virtual origins are used
; internally to distinguish the various segments. For example,
; if one has done .MSEG 400000, then relocatable addresses in
; segment 1 will start from relocatable 400000. The choice
; of virtual segment origins is important only in that it
; limits the maximum size of the various segments.
;
; .SEG n
;
; This macro switches to segment n, where n ranges from 0 to
; one less than the number of segments. Initially, the current
; segment is 0.
;
IF1,[
DEFINE MS%AS *PREFIX*,#SEGNO,*SUFFIX*
PREFIX!SEGNO!SUFFIX
TERMIN
DEFINE .MSEG ARGS/
MS%NS==1
MS%O0==0
MS%L0==.
IRP ARG,,[ARGS]
MS%AS /MS%O/,MS%NS,/==ARG/
MS%AS /MS%L/,MS%NS,/==.+ARG/
MS%AS /.KILL MS%O/,MS%NS
MS%AS /.KILL MS%L/,MS%NS
MS%NS==MS%NS+1
TERMIN
MS%CS==0
TERMIN
DEFINE .SEG N
IFN N-MS%CS,[
MS%AS /MS%L/,MS%CS,/==./
MS%CS==N
MS%AS /LOC MS%L/,MS%CS
]
TERMIN
EQUALS MS%END END
EXPUNGE END
DEFINE END ENDLOC
MS%AS /MS%L/,MS%CS,/==./
EQUALS END MS%END
END ENDLOC
TERMIN
]
IF2,[
WORD <24._25.>+<MS%NS_18.>
MS%CS==0
REPEAT MS%NS,[
MS%AS /MS%TMP==.ABSP MS%L/,MS%CS,
MS%AS /MS%TMP==MS%TMP-MS%O/,MS%CS
MS%AS /WORD <MS%TMP,,MS%O/,MS%CS,/>/
MS%CS==MS%CS+1
]
WORD 0 ; CHECKSUM
MS%CS==0
.KILL MS%NS,MS%CS,MS%TMP,MS%L0,MS%O0
]