|
|
DataMuseum.dkPresents historical artifacts from the history of: Bogika Butler |
This is an automatic "excavation" of a thematic subset of
See our Wiki for more about Bogika Butler Excavated with: AutoArchaeologist - Free & Open Source Software. |
top - metrics - download
Length: 9600 (0x2580)
Types: TextFile
Names: »LINK.TXT«
└─⟦6661ddda9⟧ Bits:30009789/_.ft.Ibm2.50007339.imd Mogens Pelles Zilog 80,000 / EOS projekt
└─⟦this⟧ »LINK.TXT«
$#venstre240
$#højre1680
$#indryk120
$#linieafstand10
$#h/f-venstre216
$#h/f-højre1704
$#h/f-linieafstand10
$#hoved-højde60
$#fod-højde40
$#lige-margen0
$#sidenummer1
$#hovedav METANIC Aps.
$#hovedam
$#hovedah 1985.05.??
$#hovedbv LGJ
$#hovedbm
$#hovedbh
$#hovedcv V1.0
$#hovedcm
$#hovedch Side #
$#hoveddm ______________________________________________________________
$#formatter
^FMetanic EOS-linkeren.^f
^UIndhold:^u
$#liste 72
$#punkt 1. Introduktion.
$#punkt 2. Kommandosprog.
$#punkt 3. Logudskrift.
$#punkt 4. Filformater.
$#punkt 4.1. Objektkode.
$#punkt 4.2. Biblioteker.
$#punkt 4.3. Loadmoduler.
$#punkt 5. Programbeskrivelse
$#punkt 5.1. Interne datastrukturer.
$#punkt 5.2. Hovedalgoritme.
$#liste 0
^U1. Introduktion.^u
^U2. Kommandosprog.^u
Linkeren aktiveres med styresystemkommandoen link, efter^-fulgt af
en kommando til linkeren. Denne sidste skrives på på samme linie som
link, og har følgende indhold:
$#kopier
LINK " " <option list> " " <file name>+
hvor <option list> kan indeholde
Æ/MÆ=<file name>ÅÅ eller
Æ/OÆ=<file name>ÅÅ
$#formatter
Følgende fejlmeldinger kan eventuelt gives:
$#liste 240
$#punkt Ugyldig kommandosyntaks.
$#punkt Ugyldigt filnavn.
$#punkt Inddatafilen findes ikke.
$#punkt Uddatafilen findes allerede.
$#liste 0
^U3. Logudskrift.^u
Logudskriften indeholder følgende oversigter:
$#liste 240
$#punkt - Aktiveringskommandoen.
$#punkt - Lokaliseringsplan.
$#punkt - Utilfredsstillede referencer.
$#punkt - Symboltabel alfabetisk sorteret.
$#punkt - Symboltabel sorteret efter adresser.
$#liste 0
Hvis linkeren udvides til også at danne load-moduler, kan følgende
fejlmeldinger vedr. de behandlede filer desuden indgå:
Intet EOS-hoved i 1. modul. EOS-hoved i 2..sidste modul.
Ugyldigt inddatafilformat.
Logudskriften har følgende format:
$#blok-start
$#kopier
AKTIVERINGSKOMMANDO:
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
LOKALISERINGSOOVERSIGT:
SEGM# FIL# MODUL# MODULNAVN START LÆNGDE
9999 99 999 XXXXXXXXXXXXXXXXXXXX 99999999 99999999
EKSPORTEREDE SYMBOLER (ALFABETISK):
SEGM# ADRESSE MODUL# SYMBOL
9999 99999999 999 XXXXXXXXXXXXXXXXXXXX
EKSPORTEREDE SYMBOLER (ADRESSEVIS):
SEGM# ADRESSE MODUL# SYMBOL
9999 99999999 999 XXXXXXXXXXXXXXXXXXXX
$#formatter
$#blok-slut
^U5. Programbeskrivelse.^u
Linkeren udfører sit arbejde ved to halve passager over ind^-data. Dette skal
forstås således, at linkeren først læser al resumeinformation fra alle
inddatafiler, opbygger tabeller og dernæst læser resten af filernes indhold.
Ingen del af nogen inddatafil læses således to gange. Objektkodens format
er udformet med henblik på at den information, som skal ^-^-bruges under første
halvpassage, forefindes samlet.
^U5.1. Interne datastrukturer.^u
Linkeren betjener sig af et antal tabeller, hvoraf nogle er permanente (P), medens
andre kun eksisterer under en af ^-^-halv-passagerne (1) eller (2). Tabellerne er:
$#Liste 240
$#punkt 1. Variantkodetabel (P)
$#punkt 2. Filnavnstabel (P)
$#punkt 3. Modultabel (P)
$#punkt 4. Sektionstabel (P)
$#punkt 5. Eksporttabel (P)
$#punkt 6. Symboltabel (1)
$#punkt 7. Tegnstrengstabel (1)
$#punkt 8. Ekstern importtabel (P)
$#punkt 9. Intern importtabel (2)
$#liste 0
Desuden benyttes et antal buffere til at ophobe data midler^-tidigt. Disse er:
$#liste 240
$#punkt 10. Imagebuffer
$#punkt 11. Inputbuffer
$#punkt 12. Rldbuffer
$#punkt 13. Referencebuffer
$#liste 0
I det følgende omtales disse datastrukturer enkeltvis.
^U5.1.1. Variantkodetabel.^u
Variantkodetabellen indeholder oplysning om, hvilke af ^-^-linkerens funktioner,
der skal udføres, idet enhver varia^-tion opfattes som en særlig funktion.
Tabellen opbygges ^-^-under afkodning af linkerens aktiveringskommando.
Variati^-onsmulighederne er:
$#liste 240
$#punkt 1.1 Undlad map-udskrift.
$#punkt 1.2 Dan map-udskrift med implicit angivet navn.
$#punkt 1.3 Dan map-udskrift med eksplicit angviet navn.
$#punkt 2.1 Dan uddatafil med implicit angivet navn.
$#punkt 2.2 Dan uddatafil med eksplicit angivet navn.
$#liste 0
$#klæb
^U5.1.2. Filnavnstabel.^u
Filnavnstabellen indeholder tegnstrengsrepræsentationen af navnene på
samtlige berørte ind- og uddatafiler. Specielt angives navnet på uddatafilen
og eventuelt på map-udskrifts^-filen.
^U5.1.3. Modultabel.^u
Modultabellen indeholder resumeinformation for hvert modul. Denne svarer
indholdsmæssigt til modulernes "header"-del. Desuden angives, om modulerne
er refereret andetsteds fra, deres filnavne og positioner i filerne.
^U5.1.4. Sektionstabel.^u
Sektionstabellen indeholder resumeinformation for hver sek^-tion. Denne svarer
indholdsmæssigt til modulheadernes seg^-mentbeskrivelser.
^U5.1.5. Eksporttabel.^u
Eksporttabellen indeholder værdierne af de eksporterede sym^-boler. Den er
indekseret på samme måde som symboltabellen, således at sammenhørende
elementer har samme indeks. Værdi^-erne er udskilt af symboltabellen for
at det skal være mu^-ligt at slette symboltabellen og tegnstrengstabellen,
når symbolernes
tegnstrengs^-repræsentation ikke længere er nød^-vendig.
^U5.1.6. Symboltabel.^u
Symboltabellen indeholder indekser til tegnstrengstabellen for hver distinkt
symbol. Desuden findes en reference til ophavssektionen og et kædefelt
til brug ved sortering. Ta^-bel^-len er indekseret på samme måde som
eksporttabellen. Sym^-bolernes indeks beregnes ved hashing pga.
tegnstrengsrepræ^-sentationen.
^U5.1.7. Tegnstrengstabel.^u
Tegnstrengstabellen indeholder tegnstrengsrepræsentationen af symbolerne.
For hvert symbol udpeger symboltabellen in^-dekset for første tegn i symbolets
tegnstreng, og det er implicit givet, at det forudgående element i
tegnstrengsta^-bellen indeholder længden af tegnstrengen. Længden placeres i
tegnstrengstabellen fordi placering i symboltabellen ville kræve
maksimalallokering, medens denne metode kun kræver plads til de
længdeangivelser, som faktisk benyttes. Den resterende plads kan udnyttes
til tegnstrenge.
^U5.1.8. Ekstern importtabel.^u
Den eksterne importtabel indeholder referencer til eksport^-tabellen
samt angivelser af,
om referencerne er tilfreds^-stillede. Kun hvis dette er tilfældet giver
de udpegede eks^-porttabelelementer mening, men det tilsvarende element i
symboltabellen vil altid give mening for ethvert benyttet element i
den eks^-terne importtabel.
Indekset for et element beregnes på grundlag af det importerende
moduls nummer og symbolets interne symbolnavn (som er en tæt sekvens af
naturlige tal) indenfor modulet. Desuden indgår modulets offset indenfor
tabellen i bereg^-ningen. Dette beregnes som summen af forudgående modulers
antal eksterne
importere^-de symboler og fremgår af modul^-tabellen.
^U5.1.9. Intern importtabel.^u
Den interne importtabel angiver sammenhængen mellem interne symbolnavne og
(adresser, sektioner). Den er ordnet stigende efter sektion og dernæst efter
adresse.
^U5.1.10. Imagebuffer.^u
Imagebuffer er buffer for uddatafilen og kan rumme en sek^-tor. I denne
buffer opbygges uddatafilen efterhånden.
^U5.1.11. Inputbuffer.^u
Inputbuffer er buffer for den til enhver tid fungerende ind^-datafil og
kan rumme en sektor.
^U5.1.12. Rldbuffer.^u
Rldbuffer benyttes til successiv opbygning af rld medens sek^-tioner samles
til een. Bufferen tømmes, når et segment er samlet.
^U5.1.13. Referencebuffer.^u
Referencebufferen benyttes til successiv opbygning af den interne importliste
medens sektioner samles til een. Buffer^-en tømmes, når et segment er samlet.
^U5.2. Hovedalgoritme.^u
I det følgende skitseres linkerens hovedalgortime:
$#blok-start
$#kopier
link
set up
initialize permanent data structures
get commend
decode command
prepare output files
log command on map file
pass 1
scanning input files do
scanning modules do
read om-head and update module table
read om-export and update symbol table
read om-imp-ext and update import table.
Search symbol table and resolve. log on
map file in case of errors.
read om-image-map and update sectiontable.
calculate and report
calculate relocation constants using section
table
log memory map on map file
relocate symbol table
sort symbol table alphabetically, log on map
file, and write on target file.
sort symbol table by address and log on map
file
scan import table finding unresolved references
and log these on map file
write unresolved symbols on target file.
pass2
scanning segments do
scanning input files do
scanning modules do
read om-imp-int updating composite table
read rld updating composite table
read om-image relocating resolving and
writing it onto target file
write composite om-imp-int table on target file
write composite om-rld table on target file
end
$#blok-slut
$#formatter
«eof»