Allgemeines
Anwendungsgebiet: | Binden und Laden; siehe "Binden und Laden" |
Makrotyp: | S-Typ, MF-Format 2: Standardform/C-/D-/L-/E-/M-Form; siehe "S-Typ-Makroaufrufe" |
Zum dynamischen Bindelader DBL siehe auch Handbuch „BLSSERV“ [4].
Makrobeschreibung
Der Makroaufruf UNBIND gibt während des Programmlaufs den Speicherplatz frei, der von nicht mehr benötigten Objekten belegt ist. Das Objekt kann ein Kontext, eine Ladeeinheit, ein LLM oder ein Bindemodul (OM) sein. Die Symbole in den entladenen Objekten sind dann nicht mehr verfügbar. Der belegte Speicherplatz wird nur seitenweise (in Einheiten von 4 KB) freigegeben. Der Speicherplatz wird dem Memory Management nur zurückgegeben, falls keine anderen Module auf derselben Seite Speicherplatz beanspruchen. Ansonsten vermerkt sich der DBL die freien Bereiche und verwendet sie bei der nächsten Gelegenheit.
Wahlfrei können Programmabschnitte (CSECTs) und Einsprungstellen (ENTRYs) in dem Objekt entbunden werden, d.h. Externverweise zu diesen Symbolen behandelt dann der DBL als nicht befriedigte Externverweise. Entbinden ist nur innerhalb eines Kontextes möglich und auch nur dann, wenn beim Laden LDINFO=REF (beim Makro BIND) bzw. LOAD-INFORMATION=*REFERENCES (beim Kommando LOAD-PROGRAM) angegeben wurde.
Makroaufrufformat und Operandenbeschreibung
UNBIND |
[ {CONTEXT=name / CONTXT@={adr / (r)} ] [,{UNIT=name / UNIT@={adr / (r)}}] [,{MODULE=name / MODULE@={adr / (r)}}] [,{PGMVERS={*STD / version} / PGMVER@={adr / (r)}}] ,UNLINK=NO / YES ,MSG=*DBLOPT / INFORMATION / WARNING / ERROR / NONE ,MF=S / C / D / E / L / M [,PARAM=adr / (r)] ,PREFIX=P / p [,LABEL=name] |
CONTEXT=name
gibt den Namen des Kontextes an, der entladen wird, oder in dem Objekte entladen werden. Objekte können sein:
eine mit UNIT festgelegte Ladeeinheit oder
ein mit MODULE festgelegtes Modul.
„name“ kann maximal 32 Zeichen lang sein und darf nicht mit dem Zeichen „$“ oder „#“ beginnen.
Fehlt der Operand, wird als Standardwert „LOCAL#DEFAULT“ angenommen.
CONTXT@=
Angabe nur mit MF=M.
Gibt die Adresse eines Feldes an, das den Namen des Kontextes enthält, der entladen wird.
adr
Adresse des Feldes, das den Namen enthält.
(r)
r = Register mit dem Adresswert adr.
UNIT=name
gibt den Namen der Ladeeinheit an, die entladen wird, oder in das ein mit MODULE festgelegtes Modul entladen wird. name ist der Name der Ladeeinheit, der zum Zeitpunkt des Ladens im Makroaufruf BIND angegeben wurde. Dies kann sein:
der mit dem Operanden UNIT@ oder UNIT vereinbarte Name oder
der mit dem Operanden SYMBOL@ oder SYMBOL vereinbarte Name, falls UNIT@ oder UNIT nicht angegeben wurde.
name kann maximal 32 Zeichen lang sein.
UNIT@=
Angabe nur mit MF=M.
Gibt die Adresse eines Feldes an, das den Namen der Ladeeinheit enthält, die entladen wird.
adr
Adresse des Feldes, das den Namen enthält.
(r)
r = Register mit dem Adresswert adr.
MODULE=name
gibt den Namen des Moduls an, der entladen wird. Der Modul kann ein LLM oder ein OM sein. Für ein LLM muss der interne Name angegeben werden. name kann maximal
32 Zeichen lang sein.
MODULE@=
Angabe nur mit MF=M.
Gibt die Adresse eines Feldes an, das den Namen des Moduls enthält, das entladen wird.
adr
Adresse des Feldes, das den Namen enthält.
(r)
r = Register mit dem Adresswert adr.
UNLINK=
gibt an, ob in dem entladenen Objekt Programmabschnitte (CSECTs) und Einsprungstellen (ENTRYs) entbunden werden oder nicht. Externverweise von entbundenen Symbolen behandelt dann der DBL als nicht befriedigte Externverweise. Entbinden ist nur möglich, wenn zum Zeitpunkt des Ladens im Makroaufruf BIND der Operand LDINFO=REF angegeben wurde.
Symbole in einem Kontext, die sich auf einen anderen Kontext beziehen, können nicht entbunden werden. Entbinden ist nur im selben Kontext möglich.
NO
Symbole werden nicht entbunden.
YES
Symbole werden entbunden.
PGMVERS=
Gibt die Programmversion an, die zu entladen ist.
*STD
bedeutet, dass beim Entladen keine Version berücksichtigt wird.
version
Die Versionsangabe darf maximal 24 Zeichen lang sein.
Wenn der DBL diese Programmversion nicht findet, dann wird das angegebene Programm nicht entladen.
PGMVER@=
Angabe nur mit MF=M.
Gibt die Adresse eines Feldes an, das die Programmversion enthält.
adr
Adresse des Feldes, das den Namen enthält.
(r)
r = Register mit dem Adresswert adr.
MSG=
Legt die niedrigste Meldungsklasse fest, ab der Meldungen ausgegeben werden.
*DBLOPT
Der Parameterwert wird aus dem letzten Aufruf des Kommandos MODIFY-DBL-DEFAULTS übernommen. Falls für den betreffenden Parameter mit MODIFY-DBL-DEFAULTS noch kein Wert festgelegt wurde, gilt MSG=INFORMATION.
INFORMATION
Die Meldungen aller Meldungsklassen werden ausgegeben.
WARNING
Nur Meldungen der Meldungsklasse WARNING und ERROR werden ausgegeben. Nicht ausgegeben werden Meldungen der Meldungsklasse INFORMATION.
ERROR
Nur Meldungen der Meldungsklasse ERROR werden ausgegeben.
NONE
Keine Meldungen werden ausgegeben.
MF=
Zur allgemeinen Beschreibung des Operanden MF, der dazugehörenden Operandenwerte und der evtl. angegebenen Operanden PARAM und PREFIX 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 angegeben werden (siehe Abschnitt „S-Typ-Makroaufrufe“).
LABEL=name
Angabe nur mit MF=M
Name der Struktur, d.h. der DSECT, die den Datenbereich des UNBIND-Makros beschreibt. Der Operand muss angegeben werden, wenn keine gültige USING-Anweisung für die Definition des Basisadressregisters für die DSECT des Datenbereichs angegeben ist. Der Operand LABEL muss zusammen mit dem Operanden PARAM angegeben werden. Beide Operanden werden benutzt, um eine gültige USING-Anweisung zu gewinnen.
Als Name kann angegeben werden:
Der Name der im Namensfeld eines vorhergehenden Makroaufrufs
name UNBIND MF=D
angegeben wurde.Der Name „xPBUNDS“, wenn bisher noch kein Name name angegeben wurde. Dabei ist „x“ der Wert des Operanden PREFIX eines vorhergehenden Makroaufrufs
UNBIND MF=D,PREFIX=x
Der Standardwert von „x“ ist „P“.
Der Name der längeren DSECT, die den Datenbereich des UNBIND-Makros enthält, wenn zuvor der Makroaufruf
UNBIND MF=C
angegeben wurde.
Hinweise zum Makroaufruf
Die Operanden CONTEXT, UNIT und MODULE können zusammen angegeben werden, um den Suchvorgang des DBL zu beschleunigen oder um Namenskonflikte bei gleichen Namen von Ladeeinheiten oder gleichen Modulnamen zu beheben. Standardmäßig wählt der DBL immer den ersten Namen, den er findet.
Die verzögerte Befriedigung von Externverweisen (DELAY) und das Entbinden (UN-LINK) sind auf einen Kontext beschränkt. Referenzen, die von Symbolen in verschiedenen Kontexten befriedigt wurden, können nicht entbunden werden.
Mit UNBIND können nur Objekte entladen werden, die mit dem BIND-Makro oder mit den Kommandos LOAD- und START-EXECUTABLE-PROGRAM (bzw. LOAD- und START-PROGRAM) geladen wurden. Shared Code, der mit dem Makro ASHARE in einen Common Memory Pool geladen wurde, kann nicht mit UNBIND, sondern nur mit DSHARE entladen werden.
Ein Modul, das einer List-Name-Unit angehört, kann nicht unabhängig von der List-Name-Unit entladen werden.
Rückinformation und Fehleranzeigen
Standardheader:
+---------------+ | | | | | |c|c|b|b|a|a|a|a| +---------------+
Über die Ausführung des Makros UNBIND 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' | Der Makro wurde normal ausgeführt. |
X'0C' | X'01' | X'0018' | Ein reserviertes Feld des Datenbereichs ist nicht mit Nullen vorbelegt. |
X'0C' | X'01' | X'0100' | Unzulässige Kombination von Operanden im Datenbereich. Für die |
X'0C' | X'01' | X'015C' | Der angegebene Kontext ist nicht vorhanden. |
X'0C' | X'01' | X'0170' | Die angegebene Ladeeinheit ist nicht vorhanden. |
X'0C' | X'01' | X'0174' | Das angegebene Modul ist nicht vorhanden. |
X'0C' | X'01' | X'0178' | Ein Modul, das einer List-Name-Unit angehört, kann nicht unabhängig |
X'0C' | X'01' | X'0198' | Unzulässiger Kontextname. Das erste Zeichen ist kein Buchstabe. |
X'0C' | X'20' | X'0204' | Inkonsistenzen in den Memory Management Tabellen des DBL |
X'0C' | X'20' | X'0208' | Inkonsistenzen in den Tabellen des DBL (Systemfehler). |
X'0C' | X'20' | X'0300' | Fehler bei der Verarbeitung von RETMEM (Systemfehler). |
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.
Beispiel
Während des Programmlaufs von UNBIND1 wird mit Hilfe des Makros BIND ein zweiter Programmabschnitt BIND3 nachgeladen. BIND3 steht als Bindemodul in der Bibliothek MACEXMP.LIB. Beide Programmabschnitte sollen im 31-Bit-Adressierungsmodus ablaufen. UNBIND1 soll unterhalb und BIND3 oberhalb der 16MB-Grenze geladen werden. Nach Aufruf des Makros BIND soll zuerst BIND3 ablaufen. Nach dem Ablauf von BIND3 soll in UNBIND1 zurückverzweigt und das Modul BIND3 mit Hilfe des Makros UNBIND entladen werden.
UNBIND1 START UNBIND1 AMODE 31---------------------------------------------------------(1) UNBIND1 RMODE 24 BALR 3,0 USING *,3 USING BINDDS,6 --------------------------------------------------(2) USING UNBDS,7 ---------------------------------------------------(3) ST 3,AREA11 UNPK AREAH,AREA1 MVC AREAA(8),AREAH WROUT1 WROUT OUT,ERROR,PARMOD=31----------------------------------------(4) BACK LA 12,UNBIND BIND BIND MF=E,PARAM=BINDPAR ----------------------------------------(5) LA 6,BINDPAR CLC XBINRET,=X'00000000' --------------------------------------(6) BE UNBIND MVC OUT+5(28),='BIND ERROR! ' WROUT OUT,ERROR,PARMOD=31 ---------------------------------------(7) B ERROR UNBIND UNBIND MF=E,PARAM=UNBPAR ----------------------------------------(8) LA 7,UNBPAR CLC YUNBRET,=X'00000000' --------------------------------------(9) BE MVC MVC OUT+5(28),='UNBIND ERROR! ' WROUT OUT,ERROR,PARMOD=31 --------------------------------------(10) B ERROR MVC MVC OUT+5(28),='UNBIND PROCESSED ' WROUT OUT,ERROR,PARMOD=31 --------------------------------------(11) MVC OUT+5(28),='RETURN TO UNBIND1 ' WROUT OUT,ERROR,PARMOD=31 ERROR TERM ***************** OUT DC Y(OUTE-OUT) DS CL3 DC C'UNBIND1: BASE REG.= ' AREAA DS CL8 OUTE EQU * AREA DS 0F
AREA1 DS 0CL5 AREA11 DS CL4 AREA12 DC C'0' DS 0F AREAH DS CL9 BINDPAR BIND MF=L,SYMBOL=BIND3,SYMBLAD=BIND3@,BRANCH=YES,PROGMOD=ANY,* – -- (5) LIBLINK=PLAMLIB UNBPAR UNBIND MF=L,MODULE=BIND3 ----------------------------------------(8) BIND3@ DS A BINDDS BIND MF=D,PREFIX=X --------------------------------------------(12) UNBDS UNBIND MF=D,PREFIX=Y -------------------------------------------(13) END BIND3 CSECT ----------------------------------------------------------(14) PRINT NOGEN BIND3 AMODE ANY ------------------------------------------------------(15) BIND3 RMODE ANY BALR 4,0 USING *,4 ST 4,AREA11 UNPK AREAH,AREA1 MVC AREAA(8),AREAH WROUT OUT,ERROR,PARMOD=31 --------------------------------------(16) BR 12 ERROR TERM ***************** OUT DC Y(OUTE-OUT) DS CL3 DC C'BIND3: BASE REG.= ' AREAA DS CL8 OUTE EQU * AREA DS 0F AREA1 DS 0CL5 AREA11 DS CL4 AREA12 DC C'0' AREAH DS CL9 END
(1) | Für den Programmabschnitt UNBIND1 wird das Attribut AMODE=31 vereinbart. Mit RMODE=24 wird UNBIND1 immer unterhalb der 16MB-Grenze geladen. |
(2) | Register 6 wird dem Assembler als Basisadressregister zur Adressierung der DSECT für die Operandenliste des BIND-Makros zugewiesen, die an der symbolischen Adresse BINDDS durch einen BIND-Aufruf mit MF=D erzeugt wird. |
(3) | Register 7 wird dem Assembler als Basisadressregister zur Adressierung der DSECT für die Operandenliste des UNBIND-Makros zugewiesen, die an der symbolischen Adresse UNBDS durch einen UNBIND-Aufruf mit MF=D erzeugt wird. |
(4) | Der Inhalt des Basisregisters von UNBIND1 wird zur Darstellung des Adressierungsmodus und der Ladeadresse ausgegeben. |
(5) | An der symbolischen Adresse BIND wird der Makro BIND in seiner E-Form aufgerufen. An dieser Stelle im Programm wird daher nur der Befehlsteil erzeugt. Die zugehörige Operandenliste wird an der symbolischen Adresse BINDPAR durch einen BIND-Aufruf mit MF=L angelegt. Die dort angegebenen Operandenwerte veranlassen den BIND-Makro, bei der Programmausführung
|
(6) | Nach der Ausführung des BIND-Makros wird geprüft, ob das Feld XBINRET des Standardheaders den Returncode X’00000000’ enthält, der eine fehlerfreie Makroausführung anzeigt. Der Name XBINRET stammt aus der DSECT, die unter der symbolischen Adresse BINDDS durch einen BIND-Aufruf mit MF=D und PRE-FIX=X erzeugt wurde (siehe 12.). Diese DSECT beschreibt den Aufbau der Operandenliste des BIND-Makros. Die symbolischen Namen der DSECT können zur Adressierung innerhalb der Operandenliste verwendet werden, nachdem das zugeordnete Basisadressregister (hier Register 6) mit der Anfangsadresse der Operandenliste (hier BINDPAR) geladen worden ist. |
(7) | Wenn der BIND-Makro nicht fehlerfrei ausgeführt wurde, wird eine Fehlermeldung über SYSOUT ausgegeben und der Programmlauf von UNBIND1 wird beendet. |
(8) | An der symbolischen Adresse UNBIND wird der Makro UNBIND in seiner E-Form aufgerufen. An dieser Stelle im Programm wird daher nur der Befehlsteil erzeugt. Die zugehörige Operandenliste wird an der symbolischen Adresse UNBPAR durch einen UNBIND-Aufruf mit MF=L angelegt. Der dort angegebene Operand MODU-LE=BIND3 veranlasst den UNBIND-Makro, das Modul BIND3 zu entladen. |
(9) | Nach der Ausführung des UNBIND-Makros wird geprüft, ob das Feld YUNBRET des Standardheaders den Returncode X’00000000’ enthält, der eine fehlerfreie Makroausführung anzeigt. Der Name YUNBRET stammt aus der DSECT, die unter der symbolischen Adresse UNBDS durch einen UNBIND-Aufruf mit MF=D und PRE-FIX=Y erzeugt wurde (siehe (13)). Diese DSECT beschreibt den Aufbau der Operandenliste des UNBIND-Makros. Die symbolischen Namen der DSECT können zur Adressierung innerhalb der Operandenliste verwendet werden, nachdem das zugeordnete Basisadressregister (hier Register 7) mit der Anfangsadresse der Operandenliste (hier UNBPAR) geladen worden ist. |
(10) | Wenn der UNBIND-Makro nicht fehlerfrei ausgeführt wurde, wird eine Fehlermeldung über SYSOUT ausgegeben und der Programmlauf von UNBIND1 wird beendet. |
(11) | Meldungen nach SYSOUT informieren darüber, dass die Programmausführung in UNBIND1 fortgesetzt und das Modul BIND3 entladen wurde. |
(12) | Der Makroaufruf BIND mit MF=D erzeugt eine DSECT, die den Aufbau der Operandenliste des BIND-Makros beschreibt. Der Operand PREFIX=X bewirkt, dass alle symbolischen Namen in dieser DSECT (Feldnamen und Equates) mit dem Buchstaben X beginnen. |
(13) | Der Makroaufruf UNBIND mit MF=D erzeugt eine DSECT, die den Aufbau der Operandenliste des UNBIND-Makros beschreibt. Der Operand PREFIX=Y bewirkt, dass alle symbolischen Namen in dieser DSECT (Feldnamen und Equates) mit dem Buchstaben Y beginnen. |
(14) | Die CSECT-Anweisung definiert den Programmabschnitt BIND3. |
(15) | AMODE=ANY zeigt dem Betriebssystem an, dass BIND3 sowohl im 24- als auch im 31-Bit-Adressierungsmodus ablaufen kann. |
(16) | Der Inhalt des Basisregisters von BIND3 wird zur Darstellung des Adressierungsmodus und der Ladeadresse ausgegeben. |
Ablaufprotokoll
/start-assembh % BLS0500 PROGRAM 'ASSEMBH', VERSION '<ver>' OF '<date>' LOADED % ASS6010 <ver> OF BS2000 ASSEMBH READY //compile source=*library-element(macexmp.lib,unbind1), - // compiler-action=module-generation(module-format=llm), - // module-library=macexmp.lib, - // listing=parameters(output=*library-element(macexmp.lib,unbind1)) % ASS6011 ASSEMBLY TIME: 585 MSEC % ASS6018 0 FLAGS, 0 PRIVILEGED FLAGS, 0 MNOTES % ASS6019 HIGHEST ERROR-WEIGHT: NO ERRORS % ASS6006 LISTING GENERATOR TIME: 200 MSEC //compile source=*library-element(macexmp.lib,bind3), -
// compiler-action=module-generation(module-format=llm), - // module-library=macexmp.lib, - // listing=parameters(output=*library-element(macexmp.lib,bind3)) % ASS6011 ASSEMBLY TIME: 169 MSEC % ASS6018 0 FLAGS, 0 PRIVILEGED FLAGS, 0 MNOTES % ASS6019 HIGHEST ERROR-WEIGHT: NO ERRORS % ASS6006 LISTING GENERATOR TIME: 83 MSEC //end % ASS6012 END OF ASSEMBH /add-file-link link-name=plamlib,file-name=macexmp.lib ------------------(17) /start-executable-program library=macexmp.lib,element-or-symbol=unbind1 -(18) % BLS0523 ELEMENT 'UNBIND1', VERSION '@' FROM LIBRARY ':2OSG:$QM212.MACEXMP.LIB' IN PROCESS % BLS0524 LLM 'UNBIND1', VERSION ' ' OF '<date> <time>' LOADED UNBIND1: BASE REG.= 80000002 --------------------------------------------(19) BIND3 : BASE REG.= 81000002 --------------------------------------------(20) UNBIND PROCESSED RETURN TO UNBIND1 -------------------------------------------------------(21)
(17) | Der im BIND-Aufruf (05) verwendete Dateikettungsname wird zugewiesen. |
(18) | Der DBL wird aufgerufen, um das Programm zu binden, zu laden und zu starten. |
(19) | Der Inhalt des Basisregisters von UNBIND1 wird ausgegeben. 31-Bit-Adressierung ist eingestellt (Bit 231 = 1); die Ladeadresse liegt unterhalb der 16MB-Grenze. |
(20) | Der DBL hat die CSECT BIND3 nachgeladen. Der Inhalt des Basisregisters von BIND3 wird ausgegeben. 31-Bit-Adressierung ist eingestellt (Bit 231 = 1); die Ladeadresse liegt oberhalb der 16MB-Grenze. |
(21) | Nach der Rückkehr aus BIND3 wird der Programmlauf in UNBIND1 fortgesetzt und das Modul BIND3 entladen. |