Your Browser is not longer supported

Please use Google Chrome, Mozilla Firefox or Microsoft Edge to view the page correctly
Loading...

{{viewport.spaceProperty.prod}}

Statisches Binden mit TSOSLNK

Der Statische Binder TSOSLNK erzeugt aus einem oder mehreren Bindemodulen (Objektmodule oder Großmodule) eine der folgenden Einheiten:

  • ein ablauffähiges Programm, das er in eine eigene katalogisierte Datei bzw. als Element vom Typ „C“ in eine PLAM-Bibliothek ausgibt,

  • oder ein vorgebundenes Modul, ein sog. Großmodul, das er in der temporären EAM-Datei der aktuellen Task bzw. als Element vom Typ „R“ in einer PLAM-Bibliothek hinterlegt.

Das Dienstprogramm TSOSLNK wird mit dem START-PROGRAM-Kommando aufgerufen. Es erwartet anschließend von SYSDTA Steueranweisungen

  • für die Ausgabe, die festlegen,

    • ob das Ergebnis des Binderlaufs ein ablauffähiges Programm oder ein Großmodul sein soll und

    • wohin das Ergebnis ausgegeben werden soll,

  • für die Eingabe, die ihm mitteilen,

    • welche Bindemodule er einbinden soll und

    • aus welchen Bibliotheken er offene Externverweise befriedigen soll.

Steueranweisungen für den TSOSLNK

Die Steueranweisungen für TSOSLNK und deren Operanden sind ausführlich im Handbuch „TSOSLNK“ [9] beschrieben; die Zusammenstellung auf der folgenden Seite gibt nur einen Überblick über die wichtigsten Angaben.

Anweisung

Kurzbeschreibung

PROGRAM
PROG

weist den Binder an, aus den eingelesenen Objektmodulen ein Programm zu erzeugen, und legt dessen Eigenschaften und Ausgabeziel (PLAM-Bibliothek oder katalogisierte Datei) fest. Unter anderem können folgende Operanden angegeben werden:

  • SYMTEST=MAP oder SYMTEST=ALL
    erlauben es dem Benutzer, beim Testen mit der Dialogtesthilfe AID die symbolischen Namen aus der Übersetzungseinheit zu verwenden.
    Voraussetzung dafür ist, dass COBOL2000 beim Übersetzen durch eine entsprechende Steueranweisung veranlasst wurde, LSD-Informationen zu erzeugen.

  • SYMTEST=ALL weist den Binder an, diese Informationen sofort an das Programm weiterzugeben, während SYMTEST=MAP bewirkt, dass im Testfall LSD-Informationen aus dem Objektmodul nachgeladen werden können (siehe dazu Handbuch „AID“ [8]).

  • LOADPT=*XS
    legt die Ladeadresse des Programms im Adressraum oberhalb 16 Mbyte fest. Diese Angabe ist nur möglich, wenn ausschließlich Objektmodule gebunden werden, die in den oberen Adressraum geladen werden können.

  • ENTRY/START=einsprungstelle
    vereinbart den Startpunkt des Programmlaufs. Diese Angabe wird benötigt, falls beim Binden zu einem ablauffähigen Programm das COBOL-Hauptprogramm nicht als erstes eingebunden wird.e
    insprungstelle ist dann der (ggf. auf 7 Stellen verkürzte) PROGRAM-ID Name mit dem Suffix „$“.

Die Anweisungen PROGRAM und MODULE (siehe unten) schließen sich gegenseitig aus.

MODULE
MOD

veranlasst den Binder, die eingelesenen Objektmodule zu einem Großmodul zu verknüpfen, und legt dessen Ausgabeziel fest.
Die Anweisungen MODULE und PROGRAM (siehe oben) schließen sich gegenseitig aus.

INCLUDE

gibt einzelne Objektmodule an, aus denen der Binder das Programm bzw. das Großmodul aufbauen soll.

RESOLVE

weist TSOSLNK PLAM-Bibliotheken für das (unten beschiebene) Autolink-Verfahren zu.

EXCLUDE

schließt die angegebene PLAM-Bibliothek vom (unten beschriebenen) Autolink-Verfahren aus.

ENTRY

siehe ENTRY- bzw. START-Operand der PROGRAM-Anweisung.

END

markiert das Ende der Eingabe von Binderanweisungen.

Tabelle 9: Steueranweisungen für den TSOSLNK

Findet TSOSLNK in einem Modul externe Adressverweise, die nicht durch die Module befriedigt werden können, die in INCLUDE-Anweisungen angegeben wurden, so geht er nach folgendem Autolink-Verfahren vor:

  1. Als erstes prüft TSOSLNK, ob dem Externverweis mit einer RESOLVE-Anweisung explizit eine Bibliothek zugeordnet wurde, in der ein passendes Modul zu suchen ist.

  2. Kann TSOSLNK im ersten Schritt den Externverweis nicht befriedigen, so durchsucht er sämtliche Bibliotheken, die in RESOLVE-Anweisungen angegeben wurden. Dabei können Bibliotheken durch EXCLUDE-Anweisungen von der Suche ausgeschlossen werden.

  3. Ist es TSOSLNK auch im zweiten Schritt nicht gelungen, den Externverweis zu befriedigen, durchsucht er die Bibliothek TASKLIB, sofern dies nicht durch die Anweisung NCAL oder eine entsprechende EXCLUDE-Anweisung verhindert wurde. Falls es unter der Benutzerkennung der aktuellen Task keine Datei namens TASKLIB gibt, verwendet TSOSLNK die Bibliothek des Systems, $.TASKLIB.

Sind auch nach dem Autolink-Verfahren noch unbefriedigte Externverweise vorhanden, gibt TSOSLNK ihre Namen in einer Liste nach SYSOUT und SYSLST aus.

Beispiel 6-1

Statisches Binden zu einem ablauffähigen Programm

/START-PROGRAM FROM-FILE = $TSOSLNK ——————————————————————————————————— (1)
 % BLS0500 PROGRAM 'TSOSLNK', VERSION 'V21.0E02' OF '1999-03-15' LOADED
 % BLS0552 ...
*PROG COBOLPROG,LIB=PLAM.LIB,ELEM=COBOLLAD ———————————————————————————— (2)
*INCLUDE COBOLMOD,PLAM.LIB ———————————————————————————————————————————— (3)
*RESOLVE ,$.SYSLNK.CRTE ——————————————————————————————————————————————— (4)
*END —————————————————————————————————————————————————————————————————— (5)
 % LNK0500 PROG BOUND
 % LNK0506 PROGRAM LIBRARY : PLAM.LIB
 % LNK0507 PHASE WRITTEN TO ELEMENT 'COBOLLAD'

(1)

(2)

Das Dienstprogramm TSOSLNK wird aufgerufen.

Die PROG-Anweisung legt fest, dass TSOSLNK ein ablauffähiges Programm mit dem Namen COBOLPROG erzeugen und als Element unter dem Namen COBOLLAD in der PLAM-Bibliothek PLAM.LIB ablegen soll

(3)

Die INCLUDE-Anweisung teilt dem Binder mit, dass er das Objektmodul COBOLMOD aus der PLAM-Bibliothek PLAM.LIB binden soll.

(4)

TSOSLNK soll Externverweise zunächst mit Modulen aus dem Laufzeitsystem befriedigen, das an dieser Anlage unter dem Namen $.SYSLNK.CRTE katalogisiert ist.

(5)

END schließt die Eingabe der Steueranweisungen ab und leitet den Bindevorgang ein; nach dessen Abschluss informiert TSOSLNK über das erstellte Programm.

Binden von segmentierten Programmen mit Überlagerungsstruktur

Durch geeignete COBOL-Sprachmittel (siehe Handbuch „COBOL2000-Sprachbeschreibung“ [1]) kann der Compiler veranlasst werden, den Maschinencode für eine Übersetzungseinheit nicht als ein einziges Objektmodul, sondern, in Teile zerlegt, in Form mehrerer Objektmodule auszugeben. Dieser Vorgang heißt
Segmentierung; die dabei entstehenden Programmteile nennt man Segmente.

Beim Binden eines segmentierten Programmes lässt sich eine Überlagerungsstruktur definieren (siehe auch Handbuch „TSOSLNK“ [9]):

Abgesehen vom Root-Segment, das während des gesamten Programmlaufs im Speicher bleibt, kann der Benutzer die einzelnen Segmente programmgesteuert nachladen lassen, wenn sie für den Ablauf erforderlich sind. Dabei können sich Segmente gegenseitig überlagern, d.h. nacheinander einen gemeinsamen Speicherbereich belegen. Welche Segmente einander überlagern können, wird durch Steueranweisungen beim Binden des Programms festgelegt.
Da jedoch der Ablaufteil des BS2000 von sich aus ein Programm in Seiten, d.h. Teile von 4096 Byte, gliedert und bei der Programmausführung jeweils nur die Seiten in den Hauptspeicher lädt, die gerade für den Ablauf benötigt werden, ist im BS2000 Segmentierung zur Entlastung des Hauptspeichers nicht notwendig. Erforderlich wird sie lediglich dann, wenn der virtuelle Adressraum nicht ausreicht, das gesamte Programm einschließlich der Daten aufzunehmen. Aus diesem Grund ist es nicht möglich, eine echte Überlagerungsstruktur für Programme zu definieren, die im oberen Adressraum ablaufen sollen.

Mit folgenden TSOSLNK-Anweisungen lassen sich Überlagerungsstrukturen für segmentierte Programme definieren:

Anweisung

Kurzbeschreibung

OVERLAY

bestimmt die Überlagerungsstruktur für das Programm: Die OVERLAY-Anweisungen eines Binderlaufs legen fest,

  • welche Segmente einander überlagern können und

  • an welchen Stellen im Programm sie sich gegenseitig überlagern sollen.

OVERLAY-Anweisungen sind nur beim Binden eines Programms erlaubt (PROGRAM-Anweisung); beim Binden eines Großmoduls (MODULE-Anweisung) werden sie mit einer Fehlermeldung zurückgewiesen.
Im Adressraum oberhalb 16 Mbyte (Angabe LOADPT=*XS in der PROGRAM- oder OVERLAY-Anweisung) sind keine echten Überlagerungsstrukturen möglich; der Binder akzeptiert zwar die OVERLAY-Anweisung, ordnet aber die Segmente hintereinander an.

TRAITS

vereinbart für einen Programmteil, dass er

  • beim Laden auf Seitengrenze ausgerichtet werden soll

  • während des Programmlaufs nur gelesen werden darf
    (Angabe READONLY=Y).