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 VSVI1 informiert den Benutzer über Einträge in den Tabellen des DBL. Der DBL greift dabei auf folgende Kontexte zu:
Benutzerkontexte und/oder Systemkontexte
Systemkontexte werden nur unter TSOS ausgegeben.Kontexte von Common Memory Pools zu, in denen Shared Code abgelegt ist und an die der Benutzer angeschlossen ist.
Folgende Informationen können abgefragt werden:
Eine Liste mit Namen der Kontexte (SELECT=CTXLIST)
Der Umfang des in einem Kontext geladenen Codes und der Umfang der dazugehörigen Binde- und Ladeinformationen (SELECT=CTXSIZE)
Eine Liste mit Namen, Ladeadressen, Längen, Typen, Attributen und Kontexten von CSECTs, ENTRYs und COMMON-Bereichen (SELECT=ALLLIST)
Eine Liste mit Namen, Ladeadressen, Längen, Typen, Attributen und Kontexten aller CSECTs und COMMON-Bereiche (SELECT=MODLIST)
Ein Satz mit Name, Ladeadresse, Länge, Typ, Attribut, Kontext, Version und HSI-Code eines einzelnen Programmabschnitts (CSECT), ENTRYs oder COMMON-Bereichs (SELECT=BYNAME)
Ein Satz mit Name, Ladeadresse, Länge, Typ, Attributen und Kontext eines durch eine Adresse angegebenen Programmabschnitts (CSECT) oder COMMON-Bereichs (SELECT=BYADDR)
Eine Liste der ILEs, die zu einem oder mehreren Kontexten gehören
Die Einzelinformationen (Name, Ladeadresse, Länge, Attribut, Typ, Kontext und HSI-Code) können unabhängig voneinander ausgewählt werden. Es ist auch möglich, nur die Länge der gewünschten Ausgabeinformation anzufordern.
Die Beschreibung der Ausgabeinformation erfolgt im Anschluss an die Operandenbeschreibung (siehe "VSVI1 - Binde- und Ladeinformation ausgeben").
Makroaufrufformat und Operandenbeschreibung
VSVI1 |
SELECT=CTXLIST / CTXSIZE / ALLLIST / MODLIST / BYNAME / BYADDR / ILELIST ,OUTADDR=adr / (r) / label ,OUTLEN=integer ,ADDRESS=YES / NO ,CONTEXT=YES / NO ,CTXPRIV=ANY / YES / NO ,CTXSEL=ALL / LOCAL / GLOBAL / POOL ,HSI=NO / YES [,{INNAME=name / INNAME@={adr / (r)} / INADDR={adr / (r) / label}}] [,{INCTX=name / INCTX@={adr / (r)}}] ,INSTRUCT=adr ,INTVERS=BLSP2 / SRV001 / SRV002 / SRV003 ,LEN=YES / NO ,NAME=YES / NO ,RUNMOD=STD / ADV ,SCOPE=ALL / USER_GROUP / GLOBAL / GROUP ,SIZONLY=NO / YES ,SYMTYP = ANY / CSECT / ISL / NOTISL ,TYPE=YES / NO ,VERSION=NO / YES ,MF=S / C / D / E / L / M [,PARAM=adr / (r)] ,PREFIX=P / p [,LABEL=name] |
In der nachfolgenden Operandenbeschreibung sind die Operanden alphabetisch geordnet.
ADDRESS=
legt fest, ob in den ausgegebenen Informationen die Ladeadressen enthalten sind.
YES
Die Ladeadressen werden ausgegeben.
NO
Die Ladeadressen werden nicht ausgegeben.
CONTEXT=
legt fest, ob in den ausgegebenen Informationen die Namen der Kontexte enthalten sind.
YES
Die Namen werden ausgegeben.
NO
Die Namen werden nicht ausgegeben.
CTXPRIV=
legt fest, für welche Zugriffsberechtigung Kontexte durchsucht werden (nur zusammen mit RUNMOD=ADV).
Für nichtprivilegierte Benutzer (nicht TSOS) wird die Angabe ignoriert und intern auf CTXPRIV=NO gesetzt.
Für privilegierte Benutzer (TSOS) gilt:
Falls RUNMODE=ADV ist und der Parameter CTXPRIV nicht angegeben wurde, setzt der DBL CTXPRIV=ANY. Bei RUNMODE=STD ignoriert DBL den Eingabewert für CTXPRIV und setzt CTX-PRIV=YES.ANY
Sowohl privilegierte wie nichtprivilegierte Kontexte werden durchsucht. Für nichtprivilegierte Benutzer werden nur nichtprivilegierte Kontexte durchsucht.YES
Nur privilegierte Kontexte werden durchsucht. Diese Angabe ist nur für privilegierte Benutzer erlaubt.NO
Nur nicht privilegierte Kontexte werden durchsucht.
CTXSEL=
legt fest, für welchen Geltungsbereich Kontexte durchsucht werden (nur zusammen mit RUNMOD=ADV).
Für nichtprivilegierte Benutzer (nicht TSOS) ist nur die Angabe CTXSEL=LOCAL oder CTXSEL=POOL erlaubt. Alle anderen Angaben werden wie CTXSEL=LOCAL behandelt.
Für privilegierte Benutzer (TSOS) gilt:F
alls RUNMODE=ADV ist und der Parameter CTXSEL nicht angegeben wurde, setzt der DBL CTXSEL=ALL.
Bei RUNMODE=STD ignoriert DBL den Eingabewert für CTXSEL und setzt CTXSEL=GLOBAL.ALL
Kontexte mit dem Geltungsbereich SYSTEM und USER werden durchsucht. Kontexte mit dem Geltungsbereich POOL werden nicht berücksichtigt.GLOBAL
Nur Kontexte mit dem Geltungsbereich SYSTEM werden durchsucht.LOCAL
Kontexte mit dem Geltungsbereich USER werden durchsucht. Außerdem wird bei RUNMODE=ADV der vorgeladene Teil des Kontextes von Subsystemen durchsucht, falls folgende Bedingungen zutreffen:Die Task, in der der Makro VSVI1 aufgerufen wird, ist mit dem Subsystem verbunden
Das Subsystem besitzt das Attribut MEMORY-CLASS=*BY-SLICE
POOL
Kontexte von Memory Pools, in die mit dem Makro ASHARE Shared Code geladen wurde, werden durchsucht. Die Menge der Memory-Pool-Kontexte kann durch Angabe des Geltungsbereiches der Memory Pools eingeschränkt werden (Operand SCOPE).
HSI=
legt fest, ob in der Ausgabe die Informationen über die Hardware-Software-Schnittstelle enthalten sind (nur zusammen mit RUNMOD=ADV).
NO
Der HSI-Code wird nicht ausgegeben.
YES
Der HSI-Code und die HSI-Compiler-Information werden ausgegeben. Der Operandenwert ist nur für die Ausgabe von Symbolinformationen relevant und er darf nur zusammen mit RUNMOD=ADV angegeben werden.
INNAME=name
gibt den Namen eines Programmabschnitts (CSECT), ENTRY oder COMMON-Bereichs an, dessen Name, Ladeadresse, Länge und Attribute ausgegeben werden.
name darf maximal 32 Zeichen lang sein.
Der Operand INNAME muss zusammen mit dem Operanden SELECT=BYNAME angegeben werden.
INNAME@=
Angabe nur mit MF=M.
Gibt die Adresse eines Feldes an, das den Namen eines Programmabschnitts (CSECT), ENTRY oder COMMON-Bereichs enthält.
adr
Adresse eines Hilfsfeldes, das die gesuchte Feldadresse enthält.
(r)
r = Register mit der gesuchten Feldadresse.
INADDR=
gibt eine Adresse an, für die die entsprechenden Informationen (Name, Ladeadresse, Länge und Attribute) ausgegeben werden.
Der Operand INADDR muss zusammen mit dem Operanden SELECT=BYADDR angegeben werden.
adr
Adresse eines Feldes, das die gesuchte Programmadresse enthält. Angabe nur mit MF=M.
(r)
r = Register mit der gesuchten Programmadresse. Angabe nur mit MF=M.
label
Programmadresse. Sie kann als symbolische Adresse oder als Konstante (X'...') angegeben werden. Angabe nur mit MF=S oder MF=L.
INCTX=name
legt einen Kontext fest, der durchsucht wird. name darf maximal 32 Zeichen lang sein. Fehlt der Operand, werden die Kontexte entsprechend den Angaben der Operanden CTXSEL und CTXPRIV durchsucht, bei Angabe von CTXSEL=POOL in Abhängigkeit vom Operanden SCOPE. Der Operand INCTX wird ignoriert, wenn gleichzeitig SELECT=CTXLIST angegeben wurde.
INCTX@=
Angabe nur mit MF=M.
Gibt die Adresse eines Feldes an, das den Namen des Kontextes enthält, der durchsucht wird.
adr
Adresse eines Hilfsfeldes, das die gesuchte Feldadresse enthält.
(r)
r = Register mit der gesuchten Feldadresse.
INSTRUCT=adr
Dieser Operand ist bei Angabe von INTVERS=SRVxxx und xxx >= 001 verfügbar. Er muss zusammen mit dem Operanden SELECT=BYNAME angegeben werden.
Symbolische Adresse eines Bereichs, der einen EEN-Namen (Extended External Name) enthält. Der Bereich besteht aus zwei 4 Byte langen Feldern. Das erste dieser Felder enthält die Länge des EEN-Namens, und das zweite enthält dessen Adresse.
INTVERS=
Der Operand legt die Version der Makro-Schnittstelle VSVI1 fest.
BLSP2
Voreinstellung. Entspricht der Makro-Version 3.
SRV001
Entspricht der Makro-Version 4. Diese Version wird ab BLSSERV V2.0 unterstützt.
SRV002
Entspricht der Makro-Version 5. Diese Version wird ab BLSSERV V2.3B unterstützt.
SRV003
Entspricht der Makro-Version 6. Diese Version wird ab BLSSERV V2.5A unterstützt.
MF=
Zur allgemeinen Beschreibung des Operanden MF, der dazugehörenden Operandenwerte und der evtl. angegebenen Operanden PREFIX 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 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 VSVI1-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 VSVI1 MF=D
angegeben wurde.Der Name „xVSVIDS“, wenn bisher noch kein Name name angegeben wurde. Dabei ist „x“ der Wert des Operanden PREFIX eines vorhergehenden Makroaufrufs
VSVI1 MF=D, PREFIX=x
Der Standardwert von „x“ ist „P“.
Der Name der längeren DSECT, die den Datenbereich des VSVI1-Makros enthält, wenn zuvor der Makroaufruf
VSVI1 MF=C
angegeben wurde.
LEN=
legt fest, ob in den ausgegebenen Informationen die Längen enthalten sind.
YES
Die Längen werden ausgegeben.
NO
Die Längen werden nicht ausgegeben.
NAME=
legt fest, ob in den ausgegebenen Informationen die Namen von CSECTs, ENTRYs und COMMON-Bereichen enthalten sind.
YES
Die Namen werden ausgegeben.
NO
Die Namen werden nicht ausgegeben.
OUTADDR=
gibt die Adresse eines Feldes an, in das der DBL die Informationen übertragen soll.
adr
Adresse eines Hilfsfeldes, das die gesuchte Feldadresse enthält. Angabe nur mit MF=M.
(r)
r = Register mit der gesuchten Feldadresse. Angabe nur mit MF=M.
label
Symbolische Adresse des Feldes. Angabe nur mit MF=S oder MF=L.
OUTLEN=integer
gibt die Länge des Ausgabefeldes (in Byte) an. Die Mindestlänge ist 4 Byte.
RUNMOD=
legt den Betriebsmodus fest, in dem der VSVI1-Makro abgearbeitet wird.
STD
Der Makro wird in der Standardform abgearbeitet. Die ausgegebene Information ist dabei voll kompatibel zu der Information, die vom alten Makro VSVI der BS2000-Version 9.5 ausgegeben wurde.
In der Standardform verarbeitet der Makro VSVI1 bei CSECTs, ENTRYs und COM-MON-Bereichen nur 8 Zeichen lange Namen und bei Kontexten nur maximal 16 Zeichen lange Namen. Dies kann zu Konflikten führen, wenn z. B. Informationen über ein geladenes LLM ausgegeben werden sollen, da längere Namen gekürzt werden.
ADV
Der Makro wird in der erweiterten Form abgearbeitet. In der erweiterten Form verarbeitet der Makro VSVI1 maximal 32 Zeichen lange Namen.
Folgende Operanden sind nur zusammen mit RUNMOD=ADV erlaubt:
SELECT=ILELIST, CTXSEL, SCOPE, CTXPRIV, HSI, VERSION.
SCOPE=
gibt an, welche Memory-Pool-Kontexte berücksichtigt werden, wenn CTXSEL=POOL angegeben wurde (nur zusammen mit RUNMOD=ADV).
ALL
Alle Kontexte von Memory Pools werden berücksichtigt.
GROUP
Nur Kontexte von Common Memory Pools mit dem Geltungsbereich GROUP werden berücksichtigt.
USER_GROUP
Nur Kontexte von Common Memory Pools mit dem Geltungsbereich USER_GROUP werden berücksichtigt.
GLOBAL
Nur Kontexte von Common Memory Pools mit dem Geltungsbereich GLOBAL werden berücksichtigt.
SELECT=
legt die Art der Information fest, die ausgegeben wird.
CTXLIST
Eine Liste mit Namen der Kontexte wird ausgegeben (Benutzerkontexte der Task und/oder Systemkontexte und/oder Memory-Pool-Kontexte und/oder lokale Subsystemkontexte).
CTXSIZE
Diese Angabe ist nur bei RUNMOD=ADV erlaubt.
Der Umfang des einem Kontext geladenen Codes und der Umfang der dazugehörigen Binde- und Ladeinformationen wird ausgegeben. Die Angabe erfolgt in Byte und wird auf ein Vielfaches von 4 KByte aufgerundet. Der Name des Kontexts muss mit INCTX oder INCTX@ festgelegt werden.
ALLLIST
Eine Liste mit Namen, Ladeadressen, Längen und Attributen aller CSECTs, ENTRYs und COMMON-Bereiche wird ausgegeben.
MODLIST
Eine Liste mit Namen, Ladeadressen, Längen und Attributen aller CSECTs und COMMON-Bereiche wird ausgegeben.
BYNAME
Ein Satz mit Name, Ladeadresse, Länge und Attributen eines einzelnen Programmabschnitts (CSECT), ENTRY oder COMMON-Bereichs wird ausgegeben. Der Name des Symbols muss mit dem Operanden INNAME oder INSTRUCT (und INTVERS=SRVxxx mit xxx >= 001) festgelegt werden.
BYADDR
Ein Satz mit Name, Ladeadresse, Länge und Attributen eines einzelnen Programmabschnitts (CSECT) oder COMMON-Bereichs wird ausgegeben. Die Adresse des Symbols muss mit dem Operanden INADDR festgelegt werden.
ILELIST
Eine Liste mit Informationen über ILEs im angegebenen Kontext wird ausgegeben. SELECT=ILELIST darf nur zusammen mit RUNMOD=ADV angegeben werden.
SIZONLY=
legt fest, ob die gewünschte Information oder nur die Länge der gewünschten Information ausgegeben wird.
NO
Die Information wird in das Ausgabefeld übertragen.
YES
Nur die Länge der Information wird in das Ausgabefeld übertragen.
SYMTYP=
Dieser Operand ist bei Angabe von INTVERS=SRVxxx und xxx >= 003 verfügbar. Er ist nur zusammen mit dem Operanden SELECT=BYNAME sinnvoll und wird andernfalls ignoriert. Er gibt den Typ des mit INNAME, INNAME@ oder INSTRUCT definierten Symbols an, für das Information angefordert wird.
ANY
Der Typ des gesuchten Symbols ist irrelevant.
CSECT
Es wird nur nach CSECTs mit dem angegebenen Namen gesucht.
ISL
Diese Angabe ist nur für privilegierte Benutzer relevant. Außerdem ist sie nur sinnvoll, wenn der CP-Kontext (siehe INCTX/INCTX@) oder privilegierte Kontexte (CTXSEL=ALL/GLOBAL und CTXPRIV=ANY/ALL) durchsucht werden.
Es wird nur nach ISL ENTRYs mit dem angegebenen Namen gesucht.
NOTISL
Es wird nur nach Symbolen mit dem angegebenen Namen gesucht, die CSECTs oder ENTRYs, jedoch nicht ISL sind.
TYPE=
legt fest, ob in den ausgegebenen Informationen die Typen (CSECT/ENTRY/COMMON) enthalten sind.
YES
Die Typen werden ausgegeben.
NO
Die Typen werden nicht ausgegeben.
VERSION=
legt fest, ob die Ausgabe Informationen über die Programmversion enthält (nur zusammen mit RUNMOD=ADV).
NO
Die Programmversion wird nicht ausgegeben.
YES
Die Programmversion wird ausgegeben. Der Operandenwert ist nur für die Ausgabe von Symbolinformationen relevant und er darf nur zusammen mit RUNMOD=ADV angegeben werden.
Hinweise zum Makroaufruf
Für die Ausgabe von Informationen muss mindestens einer der Operanden NAME, ADDRESS, LEN, TYPE, CONTEXT, VERSION oder HSI angegeben werden.
Keiner der Operanden NAME, ADDRESS, LEN, TYPE, CONTEXT, VERSION oder HSI muss angegeben werden, wenn der Benutzer nur prüfen will, ob
ein angegebener Name (Operand INNAME/INSTRUCT) der Name eines Symbols ist (Operand SELECT=BYNAME),
eine angegebene Adresse (Operand INADDR) verfügbar ist (Operand SELECT=BYADDR),
ein angegebener Kontext (Operand INCTX) verfügbar ist (Operand SELECT=ALLLIST oder SELECT=MODLIST).
In diesen Fällen ist nur der Returncode von Bedeutung. Kann der Name, die Adresse oder der Kontext nicht gefunden werden, wird folgender Returncode übergeben:
X'0440003C' Name des Symbols nicht gefunden, X'04400038' Adresse nicht gefunden, X'04400040' Kontext nicht gefunden. Wird der Name, die Adresse oder der Kontext gefunden, übergibt der DBL den Returncode X'00000000'.
Die Länge des Ausgabebereichs, in den der DBL die Information übertragen soll, muss mit dem Operanden OUTLEN festgelegt werden. Bei zu kleiner Längenangabe wird die Information abgeschnitten auf die Länge, die im Operanden OUTLEN angegeben wurde. Ist die angegebene Länge kleiner als die Länge der kleinsten Teilinformation, wird keine Information ausgegeben. In beiden Fällen übergibt der DBL einen Returncode.
Enthält ein Modul mehrere CSECTs, wählt der DBL die Information in Abhängigkeit vom Operanden SELECT wie folgt aus:
bei SELECT=BYADDR bezieht sich die Information auf die CSECT, die die mit INADDR angegebene Adresse enthält.
bei SELECT=BYNAME und wenn INNAME einen CSECT-Namen bezeichnet, bezieht sich die Information auf diese CSECT.
bei SELECT=ALLLIST wird für jede CSECT ihre eigene Information ausgegeben.
Grundsätzlich führt der VSVI1-Makro im Fehlerfall die Verarbeitung so weit wie möglich durch. Wenn z.B. die Operanden festlegen, dass mehr als ein Kontext durchsucht werden muss, und ein Fehler während des Durchsuchens eines Kontextes auftritt, setzt der Makro VSVI1 mit dem Durchsuchen des nächsten Kontextes fort. Die Fehlerursache wird vom DBL in einem Returncode übergeben. Dieser Returncode bezieht sich immer auf den zuletzt aufgetretenen Fehler.
Wenn SELECT=BYNAME angegeben ist, muss einer der beiden Operanden INNAME oder INSTRUCT angegeben werden. Sie dürfen jedoch nicht gemeinsam angegeben werden.
Bei SELECT=BYNAME durchsucht der DBL den Kontext nur solange, bis das erste Symbol des angegebenen Namens (Operand INNAME oder INSTRUCT) gefunden wird. Sind mehrere Symbole mit gleichen Namen vorhanden, wird nur die Information über das erste gefundene Symbol ausgegeben.
Wird nur die Länge der Information gewünscht (Operand SIZONLY=YES), nimmt der DBL als Länge die Länge der Information bis zum Leereintrag.
Wenn der bei OUTADDR angegebene Speicherbereich nur lesbar ist oder wenn bei OUTLEN Null angegeben wurde, wird die Verarbeitung mit einem USER-DUMP abgebrochen.
Wird eine Kontextliste angefordert (SELECT=CTXLIST), so können die Operanden NAME, ADDRESS, LEN, TYPE, CONTEXT, VERSION, HSI und SIZONLY mit NO belegt werden.
Bei der Abfrage von Informationen über Kontexte von Common Memory Pools (CTX-SEL=POOL) ist es möglich, dass der Returncode X'08400048' wegen konkurrierender Zugriffe auf einen Common Memory Pool zurückgegeben wird.
Für nichtprivilegierte Benutzer (nicht $TSOS) gilt:
Die benutzerspezifischen Werte für die Operanden werden ignoriert und vom DBL intern mit CTXPRIV=NO belegt.
Für den Operanden CTXSEL werden andere Werte als POOL ignoriert und vom DBL intern mit CTXSEL=LOCAL belegt.
Wird VSVI1 mit SELECT=BYNAME, aber ohne INCTX aufgerufen, sucht der DBL zuerst im privaten Klasse-6-Speicher und in Common Memory Pools. Findet der DBL das angegebene Symbol darin nicht, so versucht er, eine Verbindung zu nichtprivilegierten Subsystemen herzustellen.
Mögliche Operandenkombinationen
Die folgende Tabelle zeigt, welche Operanden in Abhängigkeit vom Operanden SELECT Pflicht oder erlaubt sind:
SELECT= | IN | INNAME/ | IN | OUT | OUT | CTX | CTX | SCOPE | SYM |
CTXLIST | - | - | - | P | P | E | E | E | I |
CTXSIZE | - | - | P | P | P | - | - | - | I |
ALLLIST | - | - | E | P | P | E | E | E | I |
MODLIST | - | - | E | P | P | E | E | E | I |
ILELIST | - | - | E | P | P | E | E | E | I |
BYADDR | P | - | E | P | P | E | E | E | I |
BYNAME | - | P | E | P | P | E | E | E | E |
P: Pflichtparameter
E: Erlaubter Operand
I: Ignorierter Operand
-: Der Operand ist für diese SELECT-Angabe nicht sinnvoll.
Ausgabeinformation bei RUNMOD=STD
Im Betriebsmodus RUNMOD=STD wird der Makro in der Standardform abgearbeitet. Die Ausgabeinformation ist dabei voll kompatibel zu der Information, die vom alten Makro VSVI der BS2000-Version 9.5 ausgegeben wurde.
In der Standardform verarbeitet der Makro bei CSECTs, ENTRYs und COMMON-Bereichen nur maximal 8 Zeichen lange Namen bzw. bei Kontexten nur maximal 16 Zeichen lange Namen. Längere Namen von CSECTs, ENTRYs und COMMON-Bereichen werden auf 8 Zeichen, längere Namen von Kontexten auf 16 Zeichen gekürzt.
Die Bezugsgröße für eine ausgegebene Information ist ein Eintrag in den DBL-Tabellen. Der Eintrag hat eine feste Länge von 36 Byte.
Aufbau der Einträge
Byte | Länge | Feld | Feldeintrag | Codierung/Bemerkung |
0- 7 | 8 | Name des Symbols | linksbündig mit nachfolgenden | Zeichenkonstante |
8-11 | 4 | Ladeadresse | - | Sedezimalkonstante |
12-15 | 4 | Länge | - | Sedezimalkonstante |
16 | 1 | Typ | - | X'F0' entspricht CSECT |
17 | 1 | Attribute | pro Attribut 1 oder 2 Bit | 27 entspricht INVISIBILITY |
18-19 | 2 | X'0000' | Ausrichtung des folgenden Felds | |
20-35 | 16 | Name des Kontextes | linksbündig mit nachfolgenden | Zeichenkonstante |
Wenn nur die Länge der Information gewünscht wird (Operand SIZONLY=YES) belegt diese die ersten 4 Byte des Ausgabefeldes.
Mehrere Einträge werden in der gleichen Reihenfolge hintereinander ausgegeben. Dem letzten Eintrag folgt ein Leereintrag. Ein Pseudoeintrag wird ausgegeben, wenn die angegebene Programmadresse nicht aufgefunden wird (Operand SELECT=BYADDR).
Feld | Leereintrag | Pseudoeintrag | |
Länge | Feldeintrag | ||
Name der CSECT/COMMON/ENTRY | 8 | X'40.......40' | C'ABSOLUTE' |
Ladeadresse | 4 | X'0.....0' | X'0.....0' |
Länge | 4 | X'F.....F' | X'0.....0' |
Typ | 1 | X'C5' | X'00' |
Attribut | 1 | X'00' | X'00' |
Name des Kontexts | 16 | X'40.......40' | X'40..........40' |
Hinweise
Die Länge des Ausgabefeldes ergibt sich aus der Addition der einzelnen Einträge. Bei zu kleiner Längenangabe wird die Information abgeschnitten. Die Information wird nicht übertragen, wenn die Mindestlänge für einen geforderterten Eintrag unterschritten wird. Mindestlänge = Länge eines Eintrags abzüglich der Länge nicht auszugebender Teile (z.B. NAME=NO).
Für einen ENTRY sind nur die Attribute INVISIBILITY und AMODE relevant; für einen COMMON-Bereich nur PAGE und AMODE.
Ein Programmabschnitt oder ENTRY hat das Attribut INVISIBILITY, wenn er beim Binden oder späteren Laden maskiert wurde.
Bei Angabe von SELECT=CTXLIST wird eine Liste von 16 Byte langen Kontextnamen ausgegeben, gefolgt von 16 Leerzeichen (X'40') als Endekennzeichen.
Format:
CTX1' '
CTX2' '
' '
Bei Angabe von SELECT=CTXSIZE besteht die Ausgabeinformation aus zwei Worten. Das erste Wort enthält den Umfang des Codes im Kontext, das zweite Wort enthält den Umfang der Binde- und Ladeinformationen zu diesem Kontext. Die Angabe erfolgt in Byte und wird auf ein Vielfaches von 4 KB aufgerundet.
Ausgabeinformation bei RUNMOD=ADV
Im Betriebsmodus RUNMOD=ADV wird der Makro in der erweiterten Form abgearbeitet. In der erweiterten Form verarbeitet der Makro maximal 32 Zeichen lange Namen und es können zusätzlich ILE-Informationen, HSI-Code und HSI-Compiler-Informationen angefordert werden. Die Bezugsgröße für eine angegebene Information ist ein Eintrag in den DBL-Tabellen. Der Eintrag hat eine variable Länge, die abhängig ist von der Länge der Namen und der Art der gewünschten Information.
Aufbau der Einträge
Byte | Länge | Feld | Feldeintrag | Codierung / Bemerkung |
0 - 3 | 4 | Ladeadresse | — | Sedezimalkonstante |
4 - 7 | 4 | Länge | — | Sedezimalkonstante |
8 | 1 | Typ | — | X'F0' = CSECT |
9 | 1 | Attribute | pro Attribut 1 | 27 entspricht INVISIBILITY |
10 - 11 | 2 | X'0000' | Ausrichtung des folgenden Feldes | |
12 | 1 | HSI-Code | — | X'01' = 7500 (/390) |
13 | 1 | HSI-Compiler-Information | — | abhängig vom Compiler; |
14 | 1 | Länge n des Symbolnamens | — | Sedezimalkonstante |
15 | n | Name des Symbols | — | Zeichenkonstante |
15+n | 1 | Länge m der Version | — | Sedezimalkonstante |
15+(n+1) | m | Version des Programmes, | — | Zeichenkonstante |
15+(n+1) | 1 | Länge l des Kontextnamens | — | Sedezimalkonstante |
15+(n+1) | l | Name des Kontextes | — | Zeichenkonstante |
Die Gesamtlänge eines Eintrages kann wie folgt berechnet werden:
Eintragslänge = 17 + n + m + l
Wenn nur die Länge der Information gewünscht wird (Operand SIZONLY=YES) belegt diese die ersten 4 Byte des Ausgabefeldes.
Leereinträge und Pseudoeinträge
Mehrere Einträge werden in der gleichen Reihenfolge hintereinander ausgegeben. Dem letzten Eintrag folgt ein Leereintrag. Ein Pseudoeintrag wird ausgegeben, wenn die angegebene Programmadresse nicht aufgefunden wird (Operand SELECT=BYADDR).
Feld | Leereintrag | Pseudoeintrag | |
Länge | Feldeintrag | ||
Ladeadresse | 4 | X'0.....0' | X'0.....0' |
Länge | 4 | X'F.....F' | X'0.....0' |
Typ | 1 | X'C5' | X'00' |
Attribut | 1 | X'00' | X'00' |
Länge n des Symbolnamens | 1 | X'08' | X'08' |
Name des Symbols | 8 | X'40......40' | C'ABSOLUTE' |
Länge m des Kontextnamens | 1 | X'00' | X'00' |
Hinweise
Bei Angabe von SELECT=CTXLIST wird eine Liste von Kontextnamen variabler Länge ausgegeben. Die Listenelemente enthalten im ersten Byte die Länge des Kontextnamens und in den folgenden Bytes den Kontextnamen. Die Liste wird mit einem Listenelement abgeschlossen, das 32 Leerzeichen (X'40') enthält.
Format:
0D
LOCAL#DEFAULT
04
CTX1
04
CTX2
20
' '
Bei Angabe von SELECT=CTXSIZE besteht die Ausgabeinformation aus zwei Worten. Das erste Wort enthält den Umfang des Codes im Kontext, das zweite Wort enthält den Umfang der Binde- und Ladeinformationen zu diesem Kontext. Die Angabe erfolgt in Byte und wird auf ein Vielfaches von 4 KByte aufgerundet.
Ruft ein Benutzer (ungleich $TSOS) den Makro VSVI1 mit SELECT=BYNAME, aber ohne Angabe von INCTX auf und findet der DBL dieses Symbol dann weder im Klasse-6-Speicher dieses Benutzers noch Shared Code in Memory Pools, so versucht der DBL, eine Verbindung zu den nichtprivilegierten Subsystemen des DSSM aufzubauen.
Bei Angabe von SELECT=ILELIST wird für jedes ILE ein formatierter Listeneintrag ausgegeben, in dem auf Anforderung auch der Kontextname enthalten sein kann. Bei Angabe von CONTEXT=NO wird der Kontextname nicht ausgegeben. Ein Eintrag für ein ILE-Symbol hat folgendes Format:
Byte
Länge
Feldname
Bedeutung und/oder Werte
0
1
STATE
X'01' = ACTIVE
X'02' = NOT_ACTIVE1
1
CONTROL
X'01' = SYSTEM
X'02' = USER2
1
HSI_CODE
X'01' = 390
X'09' = X863
1
RESERVED1
reserviert (muss mit X'00' belegt sein)
4
4
LOAD_ADDR
Adresse der IL-Routine
8
4
SERVER_ADDR
Adresse des ILE-Servers
12
2
REF_DISPL
Distanz des Externverweises auf den Server innerhalb
der IL-Routine14
32
NAME
Name des ILE-Symbols
46
2
RESERVED2
reserviert (muss mit X'0000' belegt sein)
48
32
CONTEXT
Name des Kontextes, zu dem der ILE gehört
Das Format des Eintrages entspricht ungefähr dem Format, das auch beim Makroaufruf ILEMIT erzeugt wird.
Dem letzten ILE-Eintrag folgt ein Leereintrag, in dem alle Felder mit Ausnahme des NAME-Feldes mit binären Nullen belegt sind. Das NAME-Feld enthält Leerzeichen. Ein Leereintrag enthält kein CONTEXT-Feld.
Rückinformation und Fehleranzeigen
Standardheader:
+---------------+ | | | | | |c|c|b|b|a|a|a|a| +---------------+
Über die Ausführung des Makros VSVI1 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'0020' | Die angegebene Länge des Ausgabefeldes (Operand OUTLEN) ist kleiner |
X'0C' | X'01' | X'0024' | Das Ausgabefeld (Operand OUTADDR) ist nicht auf Halbwortgrenze |
X'0C' | X'01' | X'0028' | Unzulässige Angabe für den Operanden SELECT. |
X'0C' | X'01' | X'002C' | Unzulässige Angabe für einen Operanden. Dies kann sein:
|
X'0C' | X'01' | X'002D' | Unzulässige Angabe für den Operanden SYMTYP. |
X'0C' | X'01' | X'0030' | Der Aufrufer hat keinen der Informationsoperanden (NAME, ADDRESS,
|
X'08' | X'40' | X'0034' | Die angegebene Länge des Ausgabebereichs im Operanden OUTLEN |
X'0C' | X'01' | X'0034' | Die angegebene Länge des Ausgabebereichs im Operanden OUTLEN |
X'04' | X'40' | X'0038' | Die im Operanden INADDR angegebene Adresse gehört zu keinem der |
X'04' | X'40' | X'003C' | Der im Operanden INNAME oder INSTRUCT angegebene Name |
X'04' | X'40' | X'0040' | Der im Operanden INCTX angegebene Name für einen Kontext kann |
X'0C' | X'20' | X'0044' | Interner Fehler bei der Funktionsausführung. |
X'08' | X'40' | X'0048' | Ein oder mehrere Kontexte mit globalem Geltungsbereich werden von |
X'04' | X'40' | X'004C' | Der Name des Symbols ist größer als 8 Zeichen und RUNMOD=STD ist |
X'04' | X'40' | X'0050' | Der angegebene Kontext ist zwar vorhanden, aber leer, da alle Objekte |
X'04' | X'40' | X'0070' | Die Task ist nicht an den Memory Pool angeschlossen. |
X'0C' | X'20' | X'0198' | Fehler bei Speicheranforderung (kein Speicher mehr verfügbar). |
X'0C' | X'40' | X'0204' | Interner Fehler im Memory Management. |
X'0C' | X'40' | X'0208' | Interner Fehler im Data Manager. |
X'0C' | X'40' | X'020C' | Interner Fehler in der symbolischen Informationstabellen. |
X'0C' | X'20' | X'0300' | Fehler bei $REQM, $RELM (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 PROGA wird mit Hilfe des Makros BIND ein zweiter Programmabschnitt PROGB nachgeladen. PROGB steht als Bindemodul in der Bibliothek MA-CEXMP.LIB. Vor und nach dem Nachladen von PROGB wird der Makro VSVI1 aufgerufen, um Binde- und Ladeinformation aus den DBL-Tabellen in einen Ausgabebereich zu übergeben. Beide Programmabschnitte sollen im 31-Bit-Adressierungsmodus ablaufen. PRO-GA soll unterhalb und PROGB oberhalb der 16MB-Grenze geladen werden. In PROGB ist ein ENTRY vereinbart. Nach Aufruf des Makros BIND soll zuerst PROGB ablaufen. Nach dem Ablauf von PROGB soll in PROGA zurückverzweigt werden.
Ausdruck des Quellprogramms
PROGA START PROGA AMODE 31 -------------------------------------------------------(1) PROGA RMODE 24 BALR 3,0 USING *,3 USING BINDDS,6 -------------------------------------------------(2) USING VSVI1DS,7 ------------------------------------------------(3) ST 3,AREA11 UNPK AREAH,AREA1 MVC AREAA(8),AREAH WROUT1 WROUT OUT,ERROR,PARMOD=31 --------------------------------------(4) MVI ADR1,X'D1' -----------------------------------------------(5) MVC ADR1+1(L'ADR1-1),ADR1 VSVI1 MF=E,PARAM=VSVI1PAR --------------------------------------(6) LA 7,VSVI1PAR CLC YVSVRET,=X'00000000' -------------------------------------(7) BNE VSVIERR --------------------------------------------------(8) BACK LA 12,VSVI BIND BIND MF=E,PARAM=BINDPAR ---------------------------------------(9) LA 6,BINDPAR CLC XBINRET,=X'00000000' ------------------------------------(10) BE VSVI MVC OUT+5(28),='BIND ERROR! ' WROUT OUT,ERROR,PARMOD=31 -------------------------------------(11) B ERROR VSVI VSVI1 MF=E,PARAM=VSVI1PAR -------------------------------------(12) CLC YVSVRET,=X'00000000'-------------------------------------(13) BE MVC VSVIERR MVC OUT+5(28),='VSVI1 ERROR! ' WROUT OUT,ERROR,PARMOD=31 -------------------------------------(14) B ERROR MVC MVC OUT+5(28),='VSVI1 PROCESSED ' WROUT OUT,ERROR,PARMOD=31 -------------------------------------(15)
MVC OUT+5(28),='RETURN TO PROGA ' WROUT OUT,ERROR,PARMOD=31 ERROR TERM ***************** DS 0F ADR1 DS CL180 ---------------------------------------------------(16) OUT DC Y(OUTE-OUT) DS CL3 DC C'PROGA: 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=PROGB,SYMBLAD=PROGB@,BRANCH=YES,PROGMOD=ANY,* LIBLINK=PLAMLIB ------------------------------------------(9) VSVI1PAR VSVI1 MF=L,SELECT=ALLLIST,CTXSEL=ALL,OUTADDR=ADR1,OUTLEN=180 ---(6) PROGB@ DS A BINDDS BIND MF=D,PREFIX=X -------------------------------------------(17) VSVI1DS VSVI1 MF=D,PREFIX=Y -------------------------------------------(18) END PROGB CSECT PAGE ----------------------------------------------------(19) PROGB AMODE ANY PROGB RMODE ANY ENTRY ENTR ----------------------------------------------------(20) ENTR BALR 4,0 USING *,4 ST 4,AREA11 UNPK AREAH,AREA1 MVC AREAA(8),AREAH WROUT OUT,ERROR,PARMOD=31 -------------------------------------(21) BR 12 ERROR TERM ***************** OUT DC Y(OUTE-OUT) DS CL3 DC C'PROGB: 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 PROGA wird das Attribut AMODE=31 vereinbart. Mit RMODE=24 wird PROGA 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 VSVI1-Makros zugewiesen, die an der symbolischen Adresse VSVI1DS durch einen VSVI1-Aufruf mit MF=D erzeugt wird. |
(4) | Der Inhalt des Basisregisters von PROGA wird zur Darstellung des Adressierungsmodus und der Ladeadresse ausgegeben. |
(5) | Das Ausgabefeld für den VSVI1-Makro wird mit C'J' vorbesetzt. |
(6) | Der Makro VSVI1 wird 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 VSVI1PAR durch einen VSVI1-Aufruf mit MF=L angelegt. Die dort angegebenen Operandenwerte veranlassen den VSVI1-Makro eine Liste mit Namen, Ladeadressen, Längen und Attributen aller CSECTs, ENTRYs und COMMON-Bereichen vor dem Nachladen von PROGB auszugeben. |
(7) | Nach der Ausführung des VSVI1-Makros wird geprüft, ob das Feld YVSVRET des Standardheaders den Returncode X'00000000' enthält, der eine fehlerfreie Makroausführung anzeigt. Der Name YVSVRET stammt aus der DSECT, die unter der symbolischen Adresse VSVI1DS durch einen VSVI1-Aufruf mit MF=D und PRE-FIX=Y erzeugt wurde (siehe 18). Diese DSECT beschreibt den Aufbau der Operandenliste des VSVI1-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 VSVI1PAR) geladen worden ist. |
(8) | Wenn der VSVI1-Makro nicht fehlerfrei ausgeführt wurde, wird zum Fehlerausgang VSVIERR verzweigt, eine Fehlermeldung über SYSOUT ausgegeben und der Programmlauf von PROGA beendet. |
(9) | 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
|
(10) | 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 (17)). 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. |
(11) | Wenn der BIND-Makro nicht fehlerfrei ausgeführt wurde, wird eine Fehlermeldung über SYSOUT ausgegeben und der Programmlauf von PROGA beendet. |
(12) | Wie (6), aber nach dem Nachladen von PROGB. |
(13) | Wie (7), aber nach dem Nachladen von PROGB. |
(14) | Wenn der VSVI1-Makro nicht fehlerfrei ausgeführt wurde, wird eine Fehlermeldung über SYSOUT ausgegeben und der Programmlauf von PROGA beendet. |
(15) | Meldungen nach SYSOUT informieren darüber, dass die Programmausführung in PROGA fortgesetzt und anschließend Binde- und Ladeinformation mit dem Makro VSVI1 ausgegeben wurde. |
(16) | Ausgabefeld für den VSVI1-Makro |
(17) | 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. |
(18) | Der Makroaufruf VSVI1 mit MF=D erzeugt eine DSECT, die den Aufbau der Operandenliste des VSVI1-Makros beschreibt. Der Operand PREFIX=Y bewirkt, dass alle symbolischen Namen in dieser DSECT (Feldnamen und Equates) mit dem Buchstaben Y beginnen. |
(19) | Die CSECT-Anweisung definiert den Programmabschnitt PROGB mit den Attributen AMODE=ANY und PAGE. |
(20) | ENTRY-Anweisung für die symbolische Adresse ENTR. |
(21) | Der Inhalt des Basisregisters von PROGB 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,proga), - // compiler-action=module-generation(module-format=llm), - // module-library=macexmp.lib, - // listing=parameters(output=*library-element(macexmp.lib,proga)), - // test-support=*aid % ASS6011 ASSEMBLY TIME: 786 MSEC % ASS6018 0 FLAGS, 0 PRIVILEGED FLAGS, 0 MNOTES % ASS6019 HIGHEST ERROR-WEIGHT: NO ERRORS % ASS6006 LISTING GENERATOR TIME: 232 MSEC //compile source=*library-element(macexmp.lib,progb), - // compiler-action=module-generation(module-format=llm), - // module-library=macexmp.lib, - // listing=parameters(output=*library-element(macexmp.lib,progb)), - // test-support=*aid % ASS6011 ASSEMBLY TIME: 191 MSEC % ASS6018 0 FLAGS, 0 PRIVILEGED FLAGS, 0 MNOTES % ASS6019 HIGHEST ERROR-WEIGHT: NO ERRORS % ASS6006 LISTING GENERATOR TIME: 93 MSEC //end % ASS6012 END OF ASSEMBH /add-file-link link-name=plamlib,file-name=macexmp.lib ------------------(1) /load-executable-program library=macexmp.lib,element-or-symbol=proga ----(2) // program-mode=*any,test-options=*aid % BLS0523 ELEMENT 'PROGA', VERSION '@' FROM LIBRARY ':2OSG:$QM212.MACEXMP.LIB' IN PROCESS % BLS0524 LLM 'PROGA', VERSION ' ' OF '<date> <time>' LOADED /%in back;%in error;%r -------------------------------------------------(3) PROGA: BASE REG.= 80000002 ----------------------------------------------(4) STOPPED AT LABEL: BACK , SRC_REF: 53, SOURCE: PROGA , PROC: PROGA /%d adr1 %x -------------------------------------------------------------(5)
*** TID: 00100136 *** TSN: 1E17 ********************************************* CURRENT PC: 00000054 CSECT: PROGA *************************************** V'00000144' = ADR1 + #'00000000' 00000144 (00000000) D7D9D6C7 C1404040 00000000 00000384 PROGA .......d 00000154 (00000010) F0200000 D3D6C3C1 D37BC4C5 C6C1E4D3 0...LOCAL#DEFAUL 00000164 (00000020) E3404040 40404040 40404040 00000000 T .... 00000174 (00000030) FFFFFFFF C5000000 40404040 40404040 ~~~~E... 00000184 (00000040) 40404040 40404040 D1D1D1D1 D1D1D1D1 JJJJJJJJ 00000194 (00000050) D1D1D1D1 D1D1D1D1 D1D1D1D1 D1D1D1D1 JJJJJJJJJJJJJJJJ REPEATED LINES: 4 000001E4 (000000A0) D1D1D1D1 D1D1D1D1 D1D1D1D1 D1D1D1D1 JJJJJJJJJJJJJJJJ 000001F4 (000000B0) D1D1D1D1 JJJJ /%r PROGB: BASE REG.= 81000002 ----------------------------------------------(6) VSVI1 PROCESSED RETURN TO PROGA STOPPED AT LABEL: ERROR , SRC_REF: 208, SOURCE: PROGA , PROC: PROGA /%d adr1 %x -------------------------------------------------------------(7) CURRENT PC: 00000126 CSECT: PROGA *************************************** V'00000144' = ADR1 + #'00000000' 00000144 (00000000) D7D9D6C7 C2404040 01000000 0000008A PROGB ........ 00000154 (00000010) F0680000 D3D6C3C1 D37BC4C5 C6C1E4D3 0...LOCAL#DEFAUL 00000164 (00000020) E3404040 C5D5E3D9 40404040 01000000 T ENTR .... 00000174 (00000030) 00000000 F1600000 D3D6C3C1 D37BC4C5 ....1-..LOCAL#DE 00000184 (00000040) C6C1E4D3 E3404040 D7D9D6C7 C1404040 FAULT PROGA 00000194 (00000050) 00000000 00000384 F0200000 D3D6C3C1 .......d0...LOCA 000001A4 (00000060) D37BC4C5 C6C1E4D3 E3404040 40404040 L#DEFAULT 000001B4 (00000070) 40404040 00000000 FFFFFFFF C5000000 ....~~~~E... 000001C4 (00000080) 40404040 40404040 40404040 40404040 000001D4 (00000090) D1D1D1D1 D1D1D1D1 D1D1D1D1 D1D1D1D1 JJJJJJJJJJJJJJJJ 000001E4 (000000A0) D1D1D1D1 D1D1D1D1 D1D1D1D1 D1D1D1D1 JJJJJJJJJJJJJJJJ 000001F4 (000000B0) D1D1D1D1 JJJJ
(1) | Der im BIND-Aufruf des Programmes PROGA verwendete Dateikettungsname wird zugewiesen. |
(2) | Der DBL wird aufgerufen, um das Programm zu binden und zu laden. |
(3) | Mit dem AID-Kommando %INSERT werden die Testpunkte BACK und ERROR festgelegt. Das %RESUME-Kommando übergibt die Steuerung an das aufgerufene Programm. |
(4) | Der Inhalt des Basisregisters von PROGA wird ausgegeben. 31-Bit-Adressierung ist eingestellt (Bit 231 = 1); die Ladeadresse liegt unterhalb der 16MB-Grenze. |
(5) | In das Feld ADR1 wurde die Binde- und Ladeinformation übertragen. ADR1 wurde mit X'D1' vorbesetzt. Der Aufruf des Makros VSVI1 erfolgte vor dem Nachladen von PROGB. Die ersten 8 Byte zeigen den Namen PROGA des ersten Programmabschnitts. Es folgt die Ladeadresse X'00000000' und die Länge X'0000037C' (892 Byte). Die nächsten beiden Byte zeigen Typ und Attribut des Programmabschnitts. Typ X'F0' (CSECT) und Attribut X'20' (AMODE=31). Die nachfolgenden Werte X'0000' dienen der Ausrichtung. Anschließend folgt der 16 Byte lange Kontextname (LOCAL#DEFAULT). Die folgenden Felder enthalten den „Leereintrag“ für Name (X'40....40'), Ladeadresse (X'00000000'), Länge (X'FFFFFFFF'), Attribut (X'C5') und Kontextnamen (X'40....40'). |
(6) | Nach dem Laden von PROGB wird der Programmlauf in PROGB fortgesetzt. Der Inhalt des Basisregisters wird ausgegeben. 31-Bit-Adressierungsmodus ist eingestellt. Die Ladeadresse liegt oberhalb 16MB. Nach PROGB wird PROGA fortgesetzt. |
(7) | Nach dem Nachladen von PROGB stehen jetzt in ADR1 mehrere DBL-Einträge. Zuerst erfolgte der Eintrag für PROGB und den ENTRY in PROGB, anschließend der Eintrag für PROGA. Die Ladeadresse von PROGB ist X'01000000', die Länge X'00000082' (130 Byte). Der Typ ist X'F0' (CSECT) und die Attribute sind X'68' (AMODE=ANY und PAGE). Der ENTRY-Name ist C'ENTR', Typ X'F1' (ENTRY), Attribut X'60' (AMODE=ANY). Danach folgt der 16 Byte lange Kontextname (LOCAL#DEFAULT). Anschließend folgt der Eintrag für PROGA und abschließend der Leereintrag. |