Your Browser is not longer supported

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

{{viewport.spaceProperty.prod}}

VSVI1 - Binde- und Ladeinformation ausgeben

&pagelevel(3)&pagelevel

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:

  1. Der Name der im Namensfeld eines vorhergehenden Makroaufrufs name VSVI1 MF=D angegeben wurde.

  2. 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“.

  3. 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
ADDR

INNAME/
INSTRUCT

IN
CTX

OUT
ADDR

OUT
LEN

CTX
SEL

CTX
PRIV

SCOPE

SYM
TYP

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
Leerzeichen

Zeichenkonstante

8-11

4

Ladeadresse

-

Sedezimalkonstante

12-15

4

Länge

-

Sedezimalkonstante

16

1

Typ

-

X'F0' entspricht CSECT
X'F1' entspricht ENTRY
X'F3' entspricht COMMON

17

1

Attribute

pro Attribut 1 oder 2 Bit

27 entspricht INVISIBILITY
26 und 25 entspricht AMODE
00 entspricht AMODE=32
01 entspricht AMODE=31
10 entspricht AMODE=24
11 entspricht AMODE=ANY
24 entspricht RESIDENT
23 entspricht PAGE
22 entspricht READ-ONLY

18-19

2


X'0000'

Ausrichtung des folgenden Felds

20-35

16

Name des Kontextes

linksbündig mit nachfolgenden
Leerzeichen

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
X'F1' = ENTRY
X'F2' = COMMON

9

1

Attribute

pro Attribut 1
oder 2 Bit

27 entspricht INVISIBILITY
26 und 25 entspricht AMODE
00 entspricht AMODE=32
01 entspricht AMODE=31
10 entspricht AMODE=24
11 entspricht AMODE=ANY
24 entspricht RESIDENT
23 entspricht PAGE
22 entspricht READ-ONLY

10 - 11

2


X'0000'

Ausrichtung des folgenden Feldes

12

1

HSI-Code

X'01' = 7500 (/390)
X'09' = X86

13

1

HSI-Compiler-Information

abhängig vom Compiler;
BLS zeichnet diese Information nur
auf und gibt sie hier aus.

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,
zu dem das Symbol gehört

Zeichenkonstante

15+(n+1)
+m

1

Länge l des Kontextnamens

Sedezimalkonstante

15+(n+1)
+(m+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_ACTIVE

    1

    1

    CONTROL

    X'01' = SYSTEM
    X'02' = USER

    2

    1

    HSI_CODE

    X'01' = 390
    X'09' = X86

    3

    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-Routine

    14

    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
als die tatsächliche Länge des Feldes.

X'0C'

X'01'

X'0024'

Das Ausgabefeld (Operand OUTADDR) ist nicht auf Halbwortgrenze
ausgerichtet, nur lesbar oder nicht allokiert.

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:

  • HSI oder VERSION wurde zusammen mit RUNMOD=STD angegeben,

  • (syntaktisch) falscher Name bei INNAME, INSTRUCT oder INCTX
    angegeben,

  • privilegierter Kontext angegeben und der Benutzer ist nicht privilegiert,

  • ein nichtpriv. Benutzer hat im Betriebsmodus RUNMOD=STD einen
    unzulässigen Kontextnamen angegeben. Bei RUNMOD=STD dürfen
    von einem nichtpriv. Benutzer nur Informationen von Kontexten
    angefordert werden, deren Namen aus Leerzeichen (X'40' ) oder
    aus der Zeichenkette „LOCAL#DEFAULT“ besteht.

  • SELECT=BYADDR wurde ohne oder mit ungültiger INADDR
    angegeben (z.B. INADDR=X'FFFFFFFF' ),

  • ein nichtpriv. Benutzer hat SYMTYP mit einem Wert ungleich ANY
    und SELECT=BYNAME,CTXSEL=LOC,RUNMOD=ADV angegeben.

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,
LEN, TYPE, CONTEXT, VERSION, HSI) angegeben und SELECT ist
ungleich BY_NAME oder BY_ADDR.
Dieser Returncode wird auch übergeben, wenn:

  • die Operanden NAME, ADDRESS, LEN, TYPE, HSI, CONTEXT
    und VERSION alle mit NO belegt sind und SIZONLY=YES wurde
    angegeben.

  • die Operanden NAME, ADDRESS, LEN, TYPE, HSI, CONTEXT
    und VERSION alle mit NO belegt sind, SIZON-
    LY=NO,SELECT=MODLIST oder SELECT=ALLLIST wurden
    angegeben, und INCTX wurde nicht angegeben.

X'08'

X'40'

X'0034'

Die angegebene Länge des Ausgabebereichs im Operanden OUTLEN
ist kleiner als die Gesamtlänge der angeforderten Informationen. Ausgabe
unvollständig.

X'0C'

X'01'

X'0034'

Die angegebene Länge des Ausgabebereichs im Operanden OUTLEN
ist zu klein, um die angeforderte kleinste Teilinformation zu übertragen.
Keine Ausgabe.

X'04'

X'40'

X'0038'

Die im Operanden INADDR angegebene Adresse gehört zu keinem der
schon geladenen Module.

X'04'

X'40'

X'003C'

Der im Operanden INNAME oder INSTRUCT angegebene Name
bezeichnet keinen der schon geladenen Module.

X'04'

X'40'

X'0040'

Der im Operanden INCTX angegebene Name für einen Kontext kann
nicht gefunden werden oder die Task, aus der der VSVI1-Aufruf erfolgt,
ist nicht mit dem Subsystem mit dem angegebenen Kontextnamen
verbunden.

X'0C'

X'20'

X'0044'

Interner Fehler bei der Funktionsausführung.
Keine Ausgabe möglich.

X'08'

X'40'

X'0048'

Ein oder mehrere Kontexte mit globalem Geltungsbereich werden von
einer anderen Task benutzt.
Ausgabe unvollständig.

X'04'

X'40'

X'004C'

Der Name des Symbols ist größer als 8 Zeichen und RUNMOD=STD ist
angegeben. Der Name wurde auf 8 Zeichen gekürzt.

X'04'

X'40'

X'0050'

Der angegebene Kontext ist zwar vorhanden, aber leer, da alle Objekte
entladen wurden.

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

  • die CSECT PROGB (SYMBOL=PROGB) aus der mit dem Linknamen PLAM-LIB zugewiesenen Bibliothek (LIBLINK=PLAMLIB) nachzuladen,

  • die Startadresse von PROGB im Feld PROGB@ zu hinterlegen(SYMBLAD=PROGB@),

  • für PROGB den 31-Bit-Adressierungsmodus einzustellen (PROGMOD=ANY),

  • nach dem Laden von PROGB den Programmlauf in PROGB fortzusetzen (BRANCH=YES).

(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.