Your Browser is not longer supported

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

{{viewport.spaceProperty.prod}}

Befriedigen von Externverweisen

Der DBL versucht, alle nicht befriedigten Externverweise in den Modulen einer Ladeeinheit zu befriedigen. Dazu durchsucht er zuerst die bereits eingebundenen Module nach CSECTs oder ENTRYs mit dem gleichen Namen. Findet er dort keine passenden Symbole, dann sucht er nach neuen Modulen mit solchen CSECTs oder ENTRYs und fügt diese Module in die Ladeeinheit ein. Diesen Ladevorgang bezeichnet man als Autolink-Funktion des DBL. Die Autolink-Funktion behandelt nur CSECTs und ENTRYs, die nicht maskiert sind (siehe Handbuch „BINDER“ [1]).

Suchstrategie

Der DBL sucht die Module, die Externverweise befriedigen, in verschiedenen Containern. Wird ein Modul mit passenden CSECTs oder ENTRYs in einem Container gefunden, wird das Modul in die Ladeeinheit eingefügt und der Suchvorgang beendet. Der Suchvorgang verläuft standardmäßig in folgenden Stufen, wobei die Reihenfolge der Stufen 1 bis 4 vom Benutzer verändert werden kann (siehe Hinweis „Benutzerdefinierte Suchreihenfolge"):

  1. Suche im Link-Kontext (siehe "Kontext als Umgebung für das Binden und Laden").

  2. Suche im Shared Code des Benutzers, der mit dem ASHARE-Makro geladen wurde.

    • Die Suche im Shared Code des Benutzers wird nur im RUN-MODE=*ADVANCED ausgeführt.

    • In Common Memory Pools wird nur dann gesucht, wenn der Benutzer SHARE-SCOPE=*MEMORY-POOL(...)/*ALL angegeben hat, da der Default-Wert fürSHARE-SCOPE=*SYSTEM-MEMORY ist. Die Suche kann auf Common Memory Pools mit einem definierten Geltungsbereich eingeschränkt oder ganz unterdrückt werden (SHARE-SCOPE=*NONE).

  3. Suche im Shared Code des Systems, der aus den unprivilegierten Subsystemen im Klasse-3/4/5-Speicher besteht (siehe Handbuch „Verwaltung von Subsystemen“ [10]). Wird ein Externverweis durch ein Symbol eines Subsystems befriedigt, dann baut der DBL eine Verbindung zu diesem Subsystem auf. Das Durchsuchen der unprivilegierten Subsysteme kann der Benutzer im Ladeaufruf unterdrücken (Operand SHARE[-SCOPE]=*NONE).

  4. Suche in Referenz-Kontexten (siehe "Kontext als Umgebung für das Binden und Laden"), die der Benutzer festgelegt hat. Bei mehreren Referenz-Kontexten erfolgt die Suche in der vorliegenden Reihenfolge. Gibt es keine Referenz-Kontexte, wird dieser Schritt übergangen. Außerdem ist er nur für den Makro BIND möglich.

  5. Durchsuchen der Bibliothek, die der Benutzer im Ladeaufruf angegeben hat (Operand LIBRARY bzw. LIBNAM@/LIBNAM/LIBLINK). Wenn im RUN-MODE= *ADVANCED eine solche Bibliothek nicht angegeben wurde, aber der Link-Name BLSLIB einer Bibliothek zugewiesen wurde, dann verwendet der DBL diese Standardbibliothek mit dem Link-Namen BLSLIB. Ist die angegebene Bibliothek fehlerhaft oder existiert sie nicht, so wird die Verarbeitung mit einer Fehlermeldung abgebrochen.
    Diese Suche wird nicht durchgeführt, wenn AUTOLINK=ALTLIB angegeben wurde.

  6. Durchsuchen von alternativen Bibliotheken.

    Es gibt zwei Gruppen von alternativen Bibliotheken:

    1. Alternative Bibliotheken, die über Dateikettungsnamen vereinbart wurden.

      Hierbei unterscheidet man zwischen

      • alternativen Benutzerbibliotheken mit den Dateikettungsnamen BLSLIBnn und

      • alternativen Systembibliotheken mit den Dateikettungsnamen $BLSLBnn Alternative Systembibliotheken werden für Komponenten des von Fujitsu ausgelieferten Laufzeitsystems benötigt. Sie werden über den Dateikettungsnamen $BLSLBnn (00<=nn<=99) von der jeweiligen Laufzeitkomponente selbst zugewiesen. Der Benutzer hat darauf keinen Einfluss. Die Dateikettungsnamen der alternativen Systembibliotheken werden von der Software-Entwicklung der Fujitsu Technology Solutions GmbH verwaltet und sind ausschließlich für deren Softwareprodukte reserviert.

    2. System- und Benutzer-Tasklibs

      Hierbei handelt es sich um Bibliotheken mit dem Namen TASKLIB oder um eine Bibliothek, die mit dem Kommando SET-TASKLIB zugewiesen wurde.

    Über Dateikettungsnamen vereinbarte alternative Bibliotheken werden in folgender Reihenfolge durchsucht:

    1. Alternative Systembibliotheken mit den Dateikettungsnamen $BLSLB00 .. 49

    2. Alternative Bibliotheken, die vom Benutzer mit dem Dateikettungsnamen BLSLIBnn (00<=nn<=99) zugewiesen wurden.

    3. Alternative Systembibliotheken mit den Dateikettungsnamen $BLSLB50 .. 99

    Innerhalb einer Gruppe von Bibliotheken werden diese nach aufsteigenden Nummern „nn“ durchsucht.

    System- und Benutzertasklibs werden in folgender Reihenfolge durchsucht:

    1. Die Bibliothek, die vom Benutzer mit dem Kommando SET-TASKLIB zugewiesen wurde

    2. Die Bibliothek „$userid.TASKLIB“
      oder, falls diese nicht existiert:
      Die Bibliothek „$defluid.TASKLIB“.
      Dabei ist „defluid“ der Name der System-Standardkennung (Wert des Klasse-2-Systemparameters DEFLUID, siehe Handbuch „Einführung in die Systembetreuung“ [9]).

    Welche alternativen Bibliotheken durchsucht werden, hängt davon ab, auf welche Weise der Ladevorgang durchgeführt wurde:

    • Laden mit START/LOAD-EXECUTABLE-PROGRAM
      oder mit dem BIND-Makro (mit INTVERS=SRVxxx, wobei xxx >= 002)

      Der Benutzer kann mit dem Operanden ALTERNATE-LIBRARIES bzw. ALTLIB festlegen, welche der genannten Bibliotheken in welcher Reihenfolge durchsucht werden.

    • Laden mit START/LOAD-PROGRAM und RUN-MODE=*ADVANCED oder mit dem BIND-Makro (INTVERS=BLSP2/SRV001)

      Nur die mit den Dateikettungsnamen BLSLIBnn bzw. $BLSLBnn vereinbarten alternativen Bibliotheken werden durchsucht, falls ALTERNATE-LIBRARIES=*YES angegeben wurde.

    • Laden mit START/LOAD-PROGRAM und RUN-MODE=*STD

      Nur die System- und Benutzer-Tasklibs werden durchsucht.

Die Stufen 5 und 6 können im Ladeaufruf mit START/LOAD-EXECUTABLE-PROGRAM oder mit dem BIND-Makro unterdrückt werden, indem der Operand AUTOLINK=*NO angegeben wird. In diesem Fall durchsucht der DBL nur bereits geladenen privaten und gemeinsam benutzbaren Code. Damit kann das unbeabsichtigte Laden von Laufzeitmodulen verhindert werden. Falls einige Externverweise ungelöst bleiben, behandelt sie der DBL so, wie es in "Befriedigen von Externverweisen" beschrieben ist.

Die Autolink-Funktion bezieht sich nicht auf die temporäre EAM-Bindemoduldatei. Sollen mehrere Module aus der EAM-Bindemoduldatei geladen werden (Operand *OMF im Ladeaufruf), muss der Benutzer darauf achten, dass das erste Modul in der EAM-Bindemoduldatei die Startadresse der Ladeeinheit enthält. Im Ladeaufruf muss dabei angegeben werden, dass alle Module aus der EAM-Bindemoduldatei geholt werden sollen (Operand FROM-FILE=*MODULE(LIBRARY=*OMF,ELEMENT=*ALL,...)).

Aufgrund bedingter Externverweise (WXTRNs) wird kein Nachladen ausgelöst. Sie werden nur befriedigt:

  • in einem unprivilegierten Subsystem oder im Shared Code,

  • durch Module, die z.B. mit der INCLUDE-Anweisung geholt werden,

  • durch die Autolink-Funktion, die durch andere EXTRNs oder V-Konstanten aufgerufen wird.

Ein COMMON-Bereich wird durch die Autolink-Funktion nicht gebunden. Das bedeutet, wenn sich ein Externverweis auf einen COMMON-Bereich bezieht, kann das Modul, das diesen COMMON-Bereich enthält, nicht automatisch geladen werden. Die Externverweise werden nicht befriedigt.

Benutzerdefinierte Suchreihenfolge

Die Suchreihenfolge innerhalb der Stufen 1 bis 4 kann der Benutzer seinen Bedürfnissen entsprechend anpassen. Hierzu stehen folgende Operanden zur Verfügung:

  • Beim Kommando MODIFY-DBL-DEFAULTS:

    RESOL-TYPE=*USER(ORDER=...) und
    PUBLIC-RESOL-TYPE=*USER(ORDER=...)

  • Beim Makro BIND:

    RESORD (mit RESTYP=USER) und PURESOR (mit PURESTY=USER)

Behandlung der unbefriedigten Externverweise

Die Behandlung von Externverweisen, die beim Durchsuchen der alternativen Bibliotheken (siehe 6. in "Befriedigen von Externverweisen") nicht befriedigt wurden, kann der Benutzer mit dem Operanden UNRESOLVED-EXTRNS im Ladeaufruf steuern.

Folgende Möglichkeiten gibt es:

  • Nicht befriedigte Externverweise sind unzulässig (Operand UNRESOLVED-EXTRNS=*ABORT)
    Das Laden der aktuellen Ladeeinheit wird dann abgebrochen.

  • nicht befriedigte Externverweise erhalten eine vom Benutzer festgelegte Adresse (Operand UNRESOLVED-EXTRNS=*STD)
    Die Adresse wird vom Benutzer im Operanden ERROR-EXIT im Ladeaufruf angegeben. Standardwert ist die Adresse X’FFFFFFFF’.

  • nicht befriedigte Externverweise werden zu einem späteren Zeitpunkt befriedigt (Operand UNRESOLVED-EXTRNS=*DELAY).
    Der DBL speichert die nicht befriedigten Externverweise im Link-Kontext (siehe "Kontext als Umgebung für das Binden und Laden"). Wird eine neue Ladeeinheit im Kontext geladen, versucht der DBL am Ende des Ladens, die gespeicherten Externverweise mit CSECTs und ENTRYs der neuen Ladeeinheit zu befriedigen. Dieser Vorgang wiederholt sich beim Laden weiterer Ladeeinheiten, solange der Kontext besteht. Diese Möglichkeit gilt nicht für externe Pseudoabschnitte (XDSECs-R). Externverweise, die zu einem späteren Zeitpunkt befriedigt werden sollen, erhalten beim Speichern im Kontext eine vorläufige Adresse, die vom Benutzer mit dem Operand ERROR-EXIT im Ladeaufruf festgelegt wird. Voreinstellung ist *NONE, was intern der Adresse X’FFFFFFFF’ entspricht.

  • Die Angabe UNRES=DELAYWARN beim BIND-Makro hat im Wesentlichen dieselbe Wirkung wie UNRES=DELAY. Die beiden Angaben unterscheiden sich lediglich im Returncode. Wenn Externverweise existieren, die zu einem späteren Zeitpunkt befriedigt werden müssen, wird bei DELAYWARN ein entsprechender Returncode zurückgegeben, während der Returncode bei DELAY Null ist. Außerdem ist die Angabe UNRES= DELAYWARN Voraussetzung für die Ausgabe von aus früheren Ladevorgängen nicht befriedigt verbliebenen Externverweise in den benutzerdefinierten Datenbereich.

Bei RUN-MODE=*STD wird die Verarbeitung entsprechend dem Operanden UNRESOLVED-EXTRNS=*STD durchgeführt und alle unbefriedigten Externverweise erhalten die Adresse X’FFFFFFFF’.

Alle nicht befriedigten Externverweise protokolliert der DBL in die Systemdatei SYSOUT. Im Dialogbetrieb mit UNRESOLVED-EXTERNS=*STD kann der Benutzer dann entscheiden, ob bei unbefriedigten Externverweisen die Verarbeitung fortgesetzt oder abgebrochen werden soll.
Im Stapelbetrieb wird die Verarbeitung immer fortgesetzt.

Nicht befriedigte Pseudoabschnitte (XDSECs-R) werden dabei getrennt von den übrigen Externverweisen aufgelistet. XDSEC-R werden nur mit XDSEC-D im gleichen Kontext befriedigt.

Der Operand USNUNR@ des BIND-Makros (nur zusammen mit INTVER=SRVxxx, wobei xxx >= 005) ermöglicht die Ausgabe einer Liste unbefriedigter Externverweise in einen benutzerdefinierten Datenbereich. Dieser Operand und der Operand UNRES sind voneinander vollkommen unabhängig. Näheres hierzu finden Sie in der Beschreibung des BIND-Makros im Handbuch „Makroaufrufe an den Ablaufteil“ [7]. Bei Angabe von INTVERS=SRVxxx (xxx >= 006) und UNRES=DELAYWARN im BIND-Makro kann alternativ oder zusätzlich die Liste der aus früheren Ladevorgängen nicht befriedigt verbliebenen Externverweise in den benutzerdefinierter Datenbereich ausgegeben werden.