Allgemeines
Anwendungsgebiet: | Binden und Laden; siehe "Binden und Laden" |
Makrotyp: | S-Typ, MF-Format 2: Standardform/C-/D-/L-/E-/M-Form; |
Zum dynamischen Bindelader DBL siehe auch Handbuch „BLSSERV“ [4].
Makrobeschreibung
Der Makroaufruf ASHARE bindet und lädt Shared Code des Benutzers, der aus einer Menge von Modulen bestehen kann, in einen Common Memory Pool (siehe Abschnitt „Gemeinsamer Speicherbereich für mehrere Anwender (Memory Pool)“). Auf ein solches gemeinsam benutzbares Programm kann jeder Benutzer, der an den Common Memory Pool angeschlossen ist, über den Programmnamen bzw. über alle anderen nicht maskierten CSECTs oder ENTRYs zugreifen. Der Zugriff ist über die Kommandos LOAD-EXECUTABLE-PROGRAM und START-EXECUTABLE-PROGRAM (bzw. LOAD-PROGRAM und START-PROGRAM) bzw. über die Makros BIND und VSVI1 möglich.
Beim indirekten Binden kann ASHARE zum Laden von Server-Modulen in einen Common Memory Pool verwendet werden.
Makroaufrufformat und Operandenbeschreibung
|
|
In der nachfolgenden Operandenbeschreibung sind die Operanden alphabetisch geordnet.
ALTLIB=
Legt fest, ob alternative Bibliotheken nach dem mit SYMBOL oder SYMBOL@ vereinbarten Objekt durchsucht werden. Alternative Bibliotheken werden mit dem Dateikettungsnamen BLSLIBnn (00<=nn<=99) bzw. $BLSLBnn (für alternative Systembibliotheken) zugewiesen. Sie werden auch für die Autolink-Funktion des DBL benutzt.
*DBLOPT
Der Operandenwert wird aus dem letzten Aufruf des Kommandos MODIFY-DBL-DEFAULTS übernommen. Falls für den betreffenden Operanden mit MODIFY-DBL-DEFAULTS noch kein Wert festgelegt wurde, gilt ALTLIB=NO.
NO
Alternative Bibliotheken werden nicht durchsucht.
YES
Alternative Bibliotheken werden durchsucht.
CONTEXT=
Gibt den Namen des Kontexts an, in den das Programm geladen wird. Existiert dieser Kontext bereits in einem für die Benutzertask zugreifbaren Memory Pool, so muss sich dieser Name auf den bei MPID angegebenen Memory Pool beziehen. In einem Memory Pool können maximal 15 Kontexte definiert werden.
name
Kontextname. Das erste Zeichen des Kontextnamens muss ein „#“ sein. Der Name darf maximal 32 Zeichen lang sein. Der Standardname ist ein „#“ gefolgt von den ersten
31 Zeichen des Namens des Memory Pools, der mit dem Operanden MPID angegeben wird.
CONTXT@=
Gibt die Adresse eines Feldes an, das den Kontextnamen enthält. Angabe nur mit MF=M.
adr
Adresse eines Hilfsfeldes, das die gesuchte Feldadresse enthält.
(r)
r = Register mit der gesuchten Feldadresse.
INTVERS=
Der Operand legt die Version der Makro-Schnittstelle ASHARE fest.
BLSP2
Default. Entspricht der Makro-Version 2.
SRV001
Entspricht der Makro-Version 3. Diese Version wird ab BLSSERV V2.4A unterstützt.
LIBLINK=name
Explizite Angabe des Dateikettungsnamens der Hauptbibliothek.
Er darf maximal 8 Zeichen lang sein.
LIBLNK@=
Gibt die Adresse eines Feldes an, das den Dateikettungsnamen der Hauptbibliothek enthält. Angabe nur mit MF=M.
adr
Adresse eines Hilfsfeldes, das die gesuchte Feldadresse enthält.
(r)
r = Register mit der gesuchten Feldadresse.
LIBNAM=
Legt die Hauptbibliothek fest, in der das mit SYMBOL oder SYMBOL@ vereinbarte Objekt gesucht wird. Die Hauptbibliothek kann durch explizite Angabe des Dateinamens der Bibliothek oder durch einen Dateikettungsnamen festgelegt werden. Die EAM-Bindemoduldatei wird durch den Dateinamen „*“ festgelegt. Ein Dateikettungsname ist für die EAM-Bindemoduldatei nicht möglich. Fehlen die Operanden LIBNAM, LIBNAM@, LIBLINK und LIBLNK@, wird die Bibliothek mit dem Dateikettungsnamen BLSLIB durchsucht.
Die Hauptbibliothek wird vor den alternativen Bibliotheken durchsucht (siehe "BIND - Ladeeinheit binden und laden"). Sie wird auch für die Autolink-Funktion des DBL benutzt. Ist der Operand LIBLINK oder LIBLNK@ angegeben, wird LIBNAM bzw. LIBNAM@ ignoriert.
datei
Explizite Angabe des Dateinamens der Hauptbibliothek. Der Dateiname darf maximal 54 Zeichen lang sein.
*
Vereinbart als Hauptbibliothek die EAM-Bindemoduldatei.
LIBNAM@=
Gibt die Adresse eines Feldes an, das den Namen der Hauptbibliothek enthält. Angabe nur mit MF=M.
adr
Adresse eines Hilfsfeldes, das die gesuchte Feldadresse enthält.
(r)
r = Register mit der gesuchten Feldadresse.
MAP=
Angabe nur mit INTVERS=SRVxxx und xxx >= 001
Legt fest, ob eine DBL-Liste ausgegeben wird oder nicht und gibt das Ausgabeziel für die DBL-Liste an.
*DBLOPT
Der Operandenwert wird aus dem letzten Aufruf des Kommandos MODIFY-DBL-DEFAULTS übernommen. Falls für den betreffenden Operanden mit MODIFY-DBL-DEFAULTS noch kein Wert festgelegt wurde, gilt MAP=NO.
NO
Es wird keine DBL-Liste ausgegeben.
BOTH
Das Ausgabeziel ist die Systemdatei SYSOUT und die Systemdatei SYSLST00.
(BOTH,nn)
Das Ausgabeziel ist die Systemdatei SYSOUT und eine Systemdatei SYSLSTnn (00<=nn<=99).
nn
Das Ausgabeziel ist eine Systemdatei aus der Menge SYSLST00 bis SYSLST99, deren Nummer hier anzugeben ist.
Die Nummer muss 2-stellig angegeben werden (00 für 0 usw.).
SYSOUT
Das Ausgabeziel ist die Systemdatei SYSOUT.
MF=
Zur allgemeinen Beschreibung des Operanden MF, der dazugehörenden Operandenwerte und der evtl. angegebenen Operanden PREFIX, MACID und PARAM siehe Abschnitt „S-Typ-Makroaufrufe“. Die gültigen MF-Werte sind zu Beginn der Makrobeschreibung bei „Makrotyp“ angegeben und aus dem Aufrufformat ersichtlich.
Bei der C-Form, D-Form oder M-Form des Makroaufrufs kann ein Präfix PREFIX (ein Buchstabe) und bei der C-Form oder M-Form zusätzlich eine Macid MACID (drei Buchstaben) angegeben werden (siehe Abschnitt „S-Typ-Makroaufrufe“).
MPID=adr
Symbolische Adresse eines 4 Byte langen Feldes, das die Kurzkennung eines Memory Pools enthält, in den die Ladeeinheit geladen wird. Diese Kurzkennung wird dem Benutzer durch den Makroaufruf ENAMP zur Verfügung gestellt, der vor dem Makroaufruf ASHARE durchgeführt werden muss.
(r)
r = Register mit dem Adresswert adr. Angabe nur mit MF=M.
MSGCTRL=
Legt die niedrigste Meldungsklasse fest, ab der Meldungen des DBL ausgegeben werden. Als Default-Wert wird der Wert übernommen, der beim Ladeaufruf mit LOAD- oder START-EXECUTABLE-PROGRAM (bzw. LOAD- oder START-PROGRAM) angegeben wurde.
*DBLOPT
Der Operandenwert wird aus dem letzten Aufruf des Kommandos MODIFY-DBL-DEFAULTS übernommen. Falls für den betreffenden Operanden mit MODIFY-DBL-DEFAULTS noch kein Wert festgelegt wurde, gilt MSGCTRL=INFORMATION.
INFORMATION
Die Meldungen aller Meldungsklassen werden ausgegeben.
WARNING
Nur Meldungen der Meldungsklasse WARNING und ERROR werden ausgegeben.
ERROR
Nur Meldungen der Meldungsklasse ERROR werden ausgegeben.
NONE
Es werden keine DBL-Meldungen ausgegeben.
PGMVERS=
Gibt die Programmversion an.
*STD
Die aus dem Ladeaufruf resultierende Ladeeinheit erhält als Programmversion die Version des geladenen Bibliothekselements. Wenn das im Ladeaufruf angegebene Symbol bereits geladen ist, wird die Programmversion gesucht, die mit dem Kommando SELECT-PROGRAM-VERSION festgelegt wurde. Falls noch keine Programmversion festgelegt ist, verwendet DBL das zuerst gefundene Symbol.
version
Die Versionsangabe darf maximal 24 Zeichen lang sein. Wenn diese Version des Programms bereits im Common Memory Pool existiert, dann wird der Ladevorgang abgebrochen und der entsprechende Returncode übergeben.
PGMVER@=
Gibt die Adresse eines Feldes an, das die Programmversion enthält. Angabe nur mit MF=M.
adr
Adresse eines Hilfsfeldes, das die gesuchte Feldadresse enthält.
(r)
r = Register mit der gesuchten Feldadresse.
PROGRAM=
Identifiziert das Programm.
name
Der angegebende Name muss eindeutig und darf nicht länger als 32 Zeichen sein. Standardwert ist der bei SYMBOL oder SYMBOL@ angegebene Name. Existiert dieses Programm bereits in einem Common Memory Pool, auf den Benutzer zugreifen können, dann wird der Ladevorgang abgebrochen.
PROG@=
Gibt die Adresse eines Feldes an, das den Programmnamen enthält. Angabe nur mit MF=M.
adr
Adresse eines Hilfsfeldes, das die gesuchte Feldadresse enthält.
(r)
r = Register mit der gesuchten Feldadresse.
REPFILE=
Gibt den Namen der REP-Datei an, die REP-Sätze im BS2000-üblichen Format enthält (siehe Handbuch „Systembetreuung“ [10]). Tritt während der REP-Verarbeitung ein Fehler auf, so gibt DBL eine Fehlermeldung auf SYSOUT aus, ignoriert den fehlerhaften REP und setzt die Verarbeitung fort.
datei
Der Dateiname darf maximal 54 Zeichen lang sein.
REPFIL@=
Gibt die Adresse eines Feldes an, das den Namen der REP-Datei enthält. Angabe nur mit MF=M.
adr
Adresse eines Hilfsfeldes, das die gesuchte Feldadresse enthält.
(r)
r = Register mit der gesuchten Feldadresse.
RESMP=
Gibt den Geltungsbereich für die Befriedigung von Externverweisen im Shared Code im Memory Pool an.
NO
Nur der beim Operanden CONTEXT angegebene Kontext wird zur Befriedigung von Externverweisen genutzt.
YES
Alle Kontexte, die sich auf den Memory Pool beziehen, werden zur Befriedigung von Externverweisen genutzt.
RESSYS=
Gibt an, ob zur Befriedigung von Externverweisen auch der Shared Code im Systemadressraum (Klasse-3/4/5-Speicher) durchsucht wird. Dieser Shared Code wird mit DSSM in Form von nichtprivilegierten Subsystemen geladen.
NO
Keine Befriedigung von Externverweisen durch Shared Code im Systemadressraum.
YES
Shared Code im Systemadressraum wird zur Befriedigung von Externverweisen genutzt, wenn nach dem Durchsuchen des Shared Code in Memory Pools noch unbefriedigte Externverweise vorhanden sind.
START@=adr
Symbolische Adresse eines 4 Byte langen Feldes, in das der DBL die Startadresse der Ladeeinheit im Memory Pool übergibt. Das Feld muss auf Wortgrenze ausgerichtet sein. Der Benutzer muss die Startadresse mit START@ explizit anfordern, sie wird standardmäßig nicht zurückgegeben.
(r)
r = Register mit dem Adresswert adr. Angabe nur mit MF=M.
SYMBOL=name
Explizite Angabe eines Objektnamens. Der DBL nutzt diesen Namen, um das erste Modul in der Ladeeinheit zu bestimmen, die in den Memory Pool geladen werden soll. Der Name kann sich auf folgende Objekte beziehen:
Programmabschnitt (CSECT),
Einsprungstelle (ENTRY),
Bindemodul (OM) (Elementname),
Bindelademodul (LLM) (Elementname).
Der Name darf maximal 32 Zeichen lang sein. Der Typ des Objekts wird mit dem Operanden SYMTYP festgelegt.
SYMBOL@=
Gibt die Adresse eines Feldes an, das den Namen des Objektes enthält. Angabe nur mit MF=M.
adr
Adresse eines Hilfsfeldes, das die gesuchte Feldadresse enthält.
(r)
r = Register mit der gesuchten Feldadresse.
SYMTYP=
Gibt den Typ des Objekts an, das mit dem Namen SYMBOL oder SYMBOL@ vereinbart wurde und legt die Suchreihenfolge für das Objekt fest. Als Typ des Objekts kann ein Symbol (CSECT oder ENTRY) oder ein Modul (OM oder LLM) bestimmt werden.
Bei einem Symbol bezeichnet der Name SYMBOL oder SYMBOL@ einen Symbolnamen und kann sein:
der Name eines nicht maskierten CSECT- oder ENTRY-Eintrags in einer Programmbibliothek (Typ R oder Typ L),
der Name eines nicht maskierten CSECT- oder ENTRY-Eintrags in einer Bindemodulbibliothek (OML), oder in der EAM-Bindemoduldatei.
Bei einem Modul bezeichnet der Name SYMBOL oder SYMBOL@ einen Modulnamen und kann sein
der Name eines Bibliothekselements (Typ R oder Typ L) in einer Programmbibliothek,
der Name eines Bibliothekselement in einer Bindemodulbibliothek (OML).
ANY
Gesucht wird in folgender Reihenfolge:LLMs mit dem Modulnamen SYMBOL oder SYMBOL@
OMs mit dem Modulnamen SYMBOL oder SYMBOL@
Symbole mit dem Symbolnamen SYMBOL oder SYMBOL@ in einem LLM. Zuerst werden CSECTs gesucht. Wird keine CSECT gefunden, werden ENTRYs gesucht.
Symbole mit dem Symbolnamen SYMBOL oder SYMBOL@ in einem OM. Zuerst werden CSECTs gesucht. Wird keine CSECT gefunden, werden ENTRYs gesucht.
CSECT
Nur Programmabschnitte (CSECTs) mit dem Symbolnamen SYMBOL@ oder SYMBOL werden gesucht.ENTRY
Nur Einsprungstellen (ENTRYs) mit dem Symbolnamen SYMBOL oder SYMBOL@ werden gesucht.CSEN
CSECTs und ENTRYs mit dem Symbolnamen SYMBOL oder SYMBOL@ werden gesucht. Zuerst werden CSECTs gesucht. Wird kein CSECT gefunden, werden ENTRYs gesucht.MODULE
Nur Module mit dem Modulnamen SYMBOL oder SYMBOL@ werden gesucht.
VERSION=
Gibt die Elementversion des mit SYMBOL oder SYMBOL@ vereinbarten Bibliothekselements an.
Für SYMTYP=ANY wird der Operand VERSION nur berücksichtigt, wenn sich der Objektname (SYMBOL oder SYMBOL@) auf ein Modul in einer Programmbibliothek (Typ R oder Typ L) bezieht. Bei Angabe eines CSECT- oder ENTRY-Namens wird der Operand VERSION ignoriert. Fehlt der Operand, wird der Standardwert für die höchste Elementversion bei Programmbibliotheken übernommen (siehe Handbuch „LMS“ [29]).
version
Explizite Angabe der Elementversion. Die Versionsangabe darf maximal 24 Zeichen lang sein.
VERS@=
Gibt die Adresse eines Feldes an, das die Elementversion enthält. Angabe nur mit MF=M.
adr
Adresse eines Hilfsfeldes, das die gesuchte Feldadresse enthält.
(r)
r = Register mit der gesuchten Feldadresse.
Hinweise zum Makroaufruf
Der Benutzer muss sich vor dem Makroaufruf ASHARE an den Common Memory Pool mit dem Makroaufruf ENAMP angeschlossen haben. Der Memory Pool muss mit dem ENAMP-Operanden FIXED=YES eingerichtet worden sein und SCOPE darf nicht LOCAL sein.
Wurde der Memory Pool im Adressraum oberhalb 16 MB angelegt, müssen alle CSECTs der geladenen Module das Attribut RMODE=ANY haben.
Externverweise, die nicht befriedigt werden können, sowie Namenskonflikte sind nicht zulässig.
LLMs mit benutzerdefinierten Slices können nicht mit dem ASHARE-Makro in Common Memory Pools geladen werden. Bei LLMs, deren Slices nach dem Attribut PUBLIC gebildet wurden, wird nur der PUBLIC-Teil mit ASHARE geladen. Das gilt auch für die Autolink-Funktion des DBL.
Test- und Diagnoseinformationen (LSD) werden nicht berücksichtigt.
Die Anzahl von Memory Pools, in denen der Benutzer Shared Code ablegen kann, ist für eine Benutzerkennung auf 16 pro Geltungsbereich (ENAMP-Operand SCOPE) begrenzt:
maximal 16 Memory Pools mit dem Geltungsbereich SCOPE=GROUP,
maximal 16 Memory Pools, die einer bestimmten Benutzergruppe zugeordnet sind, mit dem Geltungsbereich SCOPE=USER-GROUP,
maximal 16 Memory Pools mit dem Geltungsbereich SCOPE=GLOBAL.
Eine Task kann demzufolge auf insgesamt 48 Memory Pools für Shared Code im Benutzeradressraum zugreifen.
Shared Code, der wie bei SCOPE=GLOBAL für alle Benutzer zugreifbar sein soll, kann mit DSSM auch als nichtprivilegiertes Subsystem in den Systemadressraum geladen werden.Wenn die angegebene Programmversion noch nicht geladen ist, aber ein Programm mit diesem Namen im Link-Kontext (siehe Operand CONTEXT) bereits vorhanden ist, wird das Laden wegen Namenskonflikt abgewiesen.
Um solche Namenskonflikte zu vermeiden, müssen verschiedene Versionen eines Programmes in verschiedene Kontexte geladen werden.Für Binde- und Ladeinformationen der mit ASHARE geladenen Module steht nur eine begrenzte Anzahl von Speicherseiten im Systemadressraum zur Verfügung, die im Startup-Parameterservice mit dem Systemparameter BLSUSLIM festgelegt wird.
Ein residenter Memory Pool kann bei ASHARE nur verwendet werden, wenn er in einem Lademodul erzeugt wird, das mit dem entsprechenden Wert für RESIDENT-PAGES (siehe Kommando START-EXECUTABLE-PROGRAM [19]) geladen wurde.
Beim Suchen nach der Primäreingabe werden bei ASHARE Symbole des Typs ILE übergangen, da der Eintrittspunkt eines Server-Moduls für das indirekte Binden nie ein ILE-Symbol sein darf.
Rückinformation und Fehleranzeigen
Die Startadresse der Ladeeinheit wird in dem Feld übergeben, das mit dem Operanden START@ festgelegt wurde.
Standardheader:
+---------------+ | | | | | |c|c|b|b|a|a|a|a| +---------------+
Über die Ausführung des Makros ASHARE wird im Standardheader folgender Returncode übergeben (cc=Subcode2, bb=Subcode1, aaaa=Maincode):
X'cc' | X'bb' | X'aaaa' | Erläuterung |
X'00' | X'00' | X'0000' | Die Funktion wurde normal ausgeführt. |
X'00' | X'01' | X'0001' | Der Symbolname fehlt. |
X'00' | X'01' | X'0002' | Die Kurzkennung des Memory Pools (Operand MPID) fehlt. |
X'00' | X'01' | X'0003' | Die Kurzkennung bei MPID ist ungültig. |
X'00' | X'01' | X'0004' | Der Kontextname ist ungültig. |
X'00' | X'01' | X'0005' | Der Symboltyp ist ungültig. |
X'00' | X'01' | X'0006' | Die Feldadresse für START@ ist ungültig. |
X'00' | X'01' | X'0007' | Der Memory-Pool-Name ist ungültig. |
X'00' | X'01' | X'0008' | Der Operand MAP ist ungültig. |
X'00' | X'01' | X'0009' | Die SYSLST-Nummer beim Operanden MAP ist ungültig. |
X'00' | X'01' | X'0011' | Die Task ist nicht an den Memory Pool angeschlossen. |
X'00' | X'01' | X'0012' | Der Memory Pool wurde mit falschen Attributen eingerichtet: |
X'00' | X'01' | X'0013' | Der Programmname bei PROGRAM ist nicht eindeutig; er existiert bereits in einem Memory Pool. |
X'00' | X'01' | X'0014' | Der bei CONTEXT angegebene Kontext existiert bereits in einem anderen Memory Pool. |
X'00' | X'01' | X'0015' | Der Kontext kann nicht erzeugt werden, da die maximale Anzahl von 15 Kontexten in diesem Memory Pool erreicht ist. |
X'00' | X'01' | X'0016' | Die maximal nutzbare Anzahl von 16 Memory Pools mit diesem Geltungsbereich ist für die Benutzerkennung erreicht. Die Nutzung weiterer Memory Pools mit diesem Geltungsbereich ist nicht zulässig. |
X'00' | X'01' | X'0017' | Der Systemspeicherbereich für Binde- und Ladeinformation ist belegt (die mit dem Systemparameter BLSUSLIM festgelegte Anzahl von Speicherseiten ist erreicht). |
X'00' | X'01' | X'0018' | Das angegebene Symbol ist im gegebenen Kontext bereits geladen. |
X'00' | X'01' | X'0019' | Der Memory Pool wurde schon in einem BIND-Makroaufruf angegeben. |
X'00' | X'01' | X'0020' | Fehler während des Bindens/Ladens. Der Returncode dieses fehlerhaften Ladevorgangs wird in der Parameterliste übergeben. Die möglichen Werte sind beim BIND-Makro beschrieben. |
X'00' | X'20' | X'0100' | Systemfehler |
X'00' | X'20' | X'0101' | Interner DBL-Fehler |
X'00' | X'20' | X'0103' | Fehler des DBL-Lock-Managers während der Abarbeitung des ASHARE-Makros. |
X'00' | X'01' | X'FFFF' | Die Funktion wird nicht mehr oder noch nicht unterstützt. |
X'00' | X'03' | X'FFFF' | Die Version der Schnittstelle wird nicht unterstützt. |
Weitere Returncodes, deren Bedeutung durch Konvention makroübergreifend festgelegt ist, können der Tabelle „Standard-Returncodes“ (Standardheader) entnommen werden.