Your Browser is not longer supported

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

{{viewport.spaceProperty.prod}}

ILEMGT - Verwaltung von Indirect Linkage Entries (ILEs)

&pagelevel(3)&pagelevel

Allgemeines

Anwendungsgebiet:

Binden und Laden; siehe "Binden und Laden"

Makrotyp:

S-Typ, MF-Format 2: Standardform/C-/D-/E-/L-/M-Form;

siehe "S-Typ-Makroaufrufe"


Zum dynamischen Bindelader DBL siehe auch Handbuch „BLSSERV“ [4].

Makrobeschreibung

Mit dem Makroaufruf ILEMGT kann der Benutzer eine Liste von ILEs (Indirect Linkage Entries) verwalten. Die ILEs in der Liste können erzeugt, geändert oder gelöscht werden.

Informationen über ILEs können mit dem Makroaufruf VSVI1 angefordert werden.

Makroaufrufformat und Operandenbeschreibung

ILEMGT

MF=S / D / C / E / L / M

,ACTION=*CREATE / *UPDATE / *DELETE

,CONTEXT_NAME=' ' / <c-string 1..32> / <var: char 1..32>

,CONTEXT_STATE=*DBL-OPTIONS / *ANY / *NEW / *OLD

,ILE_LIST_ADDR=NULL-1 / <var: pointer>

,ILE_LIST_LEN=0 / <integer 0..2147483647>

,MPID_ADDR=NULL-1 / <var: pointer>

,PARAM=<var: pointer> / (reg: pointer>)

,PREFIX=P / p

,MACID=ILE / macid

In der nachfolgenden Operandenbeschreibung sind die Operanden alphabetisch geordnet.

ACTION=
Aktion, die für die ILEs in der Liste ausgeführt werden soll.

*CREATE
Die ILEs sind zu erzeugen.

*UPDATE
Die ILEs sind zu ändern.

*DELETE
Die ILEs sind zu löschen.

CONTEXT_NAME=

' ' / <c-string 1..32> / <var: char 1..32>
Name des Kontextes, zu dem die ILEs gehören.

CONTEXT_STATE=
Status des bei CONTEXT_NAME angegebenen Kontextes

*DBL-OPTIONS
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 der Wert, der in der Makro-Syntaxbeschreibung auf *DBL-OPTIONS folgt.

*ANY
Wenn der Kontext bereits existiert, wird dieser verwendet; ansonsten wird ein neuer Kontext erzeugt.

*NEW
Der Kontext wird angelegt. Er darf noch nicht existieren.

*OLD
Der Kontext muss bereits existieren.

ILE_LIST_ADDR=NULL-1 / <var: pointer>
Adresse einer Liste von ILEs, die an DBL übergeben werden soll.

ILE_LIST_LEN=0 / <integer 0..2147483647>
Länge der ILE-Liste (in Byte)

MF=
Zur allgemeinen Beschreibung des Operanden MF, der dazugehörenden Operandenwerte und der evtl. angegebenen Operanden PARAM, PREFIX und MACID 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 und bei der C-Form oder M-Form zusätzlich eine Macid MACID angegeben werden (siehe Abschnitt „S-Typ-Makroaufrufe“).

MPID_ADDR=NULL-1 / <var: pointer>
Adresse eines Feldes mit der Kurzkennung des Memory Pools, das den angegebenen Kontext enthält. Diese Kurzkennung wird dem Benutzer durch den Makroaufruf ENAMP zur Verfügung gestellt.

Format der ILE-Liste

Die bei ILE_LIST_ADDR angegebene Adresse zeigt auf eine ILE-Liste, die mehrere Einträge haben kann. Ein einzelner ILE-Eintrag hat folgendes Format:

Byte

Länge

Feldname

Bedeutung und/oder Wert

0

8

HDR

Standardheader

8

1

STATE

ACTIVE (X'01') oder NOT_ACTIVE (X'02')

9

1

CONTROL

SYSTEM (X'01') oder USER (X'02')

10

1

HSI_CODE

390 (X'01') oder X86E (X'09')

11

1

RESERVED1

reserviert (muss mit X'00' belegt sein)

12

4

LOAD_ADDR

Adresse der IL-Routine

16

4

SERVER_ADDR

Adresse des ILE-Servers

20

2

REF_DISPL

Distanz des Externverweises auf den Server innerhalb
der IL-Routine

22

32

NAME

Name des ILE-Symbols

54

2

RESERVED2

reserviert (muss mit X'0000' belegt sein)

Die DSECT für einen solchen ILE-Listeneintrag wird mit ILEMIT MF=D erzeugt.

Hinweise zum Makroaufruf

  • Wenn bei MPID_ADDR eine Adresse angegeben wurde, entscheidet das erste Zeichen des Kontextnamens (Pflichtparameter) darüber, ob der Kontext gemeinsam benutzbar ist oder nicht.

    Beginnt der Kontextname mit „#“, so sucht DBL den Kontext in Common Memory Pools und erzeugt den Kontext gegebenenfalls (ASHARE-Makro). Die MPID muss in diesem Fall einen Memory Pool identifizieren, der entweder bereits beim ASHARE-Makro verwendet wird oder der leer ist (d.h. in dem noch kein Speicherplatz belegt wurde).

    Beginnt der Kontextname nicht mit „#“,dann sucht der DBL in den normalen Benutzerkontexten. Ein Kontext, dessen Name mit einem Buchstaben beginnt, darf nicht gemeinsam benutzbar sein. DBL erkennt dies als einen Konflikt zwischen der Nutzungsart des Memory Pools und der Namenskonvention und weist den Makroaufruf mit dem passenden Returncode ab.

  • Die Anzahl von Memory Pools, in denen der Benutzer Shared Code ablegen kann, ist für eine Benutzerkennung auf 16 pro Geltungsbereich begrenzt, siehe "ASHARE - Shared Code des Benutzers in Common Memory Pools laden".

  • Bei ACTION = *CREATE / *UPDATE ist das Feld STATE eines ILE-Eintrages mit AC-TIVE belegt und sowohl LOAD_ADDR als auch SERVER_ADDR müssen auf zugeteilte Speicherbereiche verweisen.

  • Ist das Feld CONTROL mit SYSTEM belegt, so führt DBL folgende Aktionen aus:

    1. Beim Laden des ILE-Servers
      wird das Feld STATE auf ACTIVE gesetzt und die Adresse des ILE-Servers wird in die IL-Routine eingetragen.

    2. Beim Entladen des ILE-Servers
      wird das Feld STATE auf NOT_ACTIVE gesetzt und als Adresse des ILE-Servers X'FFFFFFFF' in die IL-Routine eingetragen.

      Die Kombination der Feldbelegung CONTROL=SYSTEM mit dem Makroparameter ACTION=*UPDATE ist nicht erlaubt.

  • Bei ACTION=*CREATE muss das Feld LOAD_ADDR auf einen zugeteilten Speicherbereich verweisen, in dem die benutzerdefinierte (CONTROL=USER) IL-Routine steht. Wenn das nicht zutrifft (CONTROL=SYSTEM), dann erzeugt der DBL eine Standard-IL-Routine im Kontext. Die Standard-IL-Routine wird in den HSI-Code, der beim Makroaufruf ILEMIT angegeben wurde oder ansonsten im HSI-Code des Servers, auf dem das Programm abläuft.
    Falls eine benutzerdefinierte IL-Routine vorhanden ist, muss das Feld REF_DISPL die Distanz des Wortes in der IL-Routine enthalten, das auf den ILE-Server verweist. Dieses Wort muss schreibbar sein.
    Die Angabe des HSI-Codes ist für benutzerdefinierte IL-Routinen Pflicht.

  • Bei ACTION=*DELETE wird, sofern das zu löschende ILE mit CONTROL=*BY-SYSTEM erzeugt wurde, auch die IL-Routine aus dem Kontext gelöscht (vorausgesetzt, die IL-Routine wurde vom DBL erzeugt).

  • Alle nicht maskierten CSECTs und ENTRYs im Zielkontext können als ILE-Server verwendet werden - auch die, die mit dem Makroaufruf ETABLE eingeführt wurden. Um daraus resultierende Probleme bei der ILE-Verwaltung zu vermeiden, sollte ein Kontext für ILEs und deren Server und ein anderer Kontext für ETABLE-Symbole eingerichtet werden.

  • Wenn LLMs, die aus PUBLIC und PRIVATE Slices gebildet sind, für das indirekte Binden verwendet werden sollen, dann müssen diese LLMs im Format 1 vorliegen (siehe Benutzerhandbuch „BINDER“ [5]).

  • Die IL-Routine sollte die Attribute AMODE und RMODE=ANY haben und unterhalb 16 Mbyte geladen werden, damit sie von allen Programmen aus erreichbar ist.

  • Wenn ein ILE geändert wird, wird beim Laden seines Servers geprüft, ob HSI-Code und AMODE von ILE und Server übereinstimmen. Ist das nicht der Fall, so wird das Laden des Servers abgewiesen.

Rückinformation und Fehleranzeigen

Wenn bei der Verarbeitung der Listeneinträge ein Fehler auftritt, wird im HDR-Feld des fehlerhaften Listeneintrages ein entsprechender Returncode eingetragen. Im Standardheader der Parameterliste wird der Returncode FUNCTION_PARTIALLY_PROCESSED übergeben und die Verarbeitung der Listeneinträge wird fortgesetzt.

Das Feld PROCESSED_ITEMS der Parameterliste enthält die Anzahl korrekt bearbeiteter Einträge.

Standardheader:

+---------------+
|   |   |   |   |
|c|c|b|b|a|a|a|a|
+---------------+

Über die Ausführung des Makros ILEMGT 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'02'

X'00'

X'0001'

Die Funktion wurde teilweise ausgeführt.

X'61'

X'01'

X'0001'

Ungültiger Wert bei ILE_LIST_LEN.

X'61'

X'01'

X'0002'

Unzulässige Parameterkombination in der Parameterliste.

X'61'

X'01'

X'0003'

Der Parameter MESSAGE ist ungültig.

X'61'

X'01'

X'0004'

Der Kontextname ist ungültig.

X'61'

X'01'

X'0008'

Der Parameter ACTION ist ungültig.

X'61'

X'40'

X'0011'

Die Task ist nicht an den Memory Pool angeschlossen.

X'61'

X'01'

X'0014'

Der neue USER-Kontext existiert bereits in einem anderen Memory
Pool.

X'61'

X'40'

X'0015'

Maximale Anzahl von Kontexten im Memory Pool ist bereits erreicht.

X'61'

X'40'

X'0016'

Die maximal nutzbare Anzahl von Memory Pools mit diesem Geltungsbereich
ist für die Benutzerkennung erreicht. Die Nutzung weiterer
Memory Pools mit diesem Geltungsbereich ist nicht zulässig.

X'61'

X'40'

X'0017'

Der Systemspeicherbereich für Benutzerkontexte ist belegt.

X'61'

X'01'

X'0018'

Ein reserviertes Feld enthält keine binären Nullen.

X'61'

X'01'

X'0019'

Der aktuelle Memory Pool ist nicht gemeinsam benutzbar.

X'61'

X'20'

X'0100'

Systemfehler (z.B.: $REQM, $RELM, $CSTAT, RDTFT)

X'61'

X'20'

X'0101'

Interner DBL-Fehler.

X'61'

x'80'

X'0103'

Gemeinsam benutzbare Ressourcen sind nicht verfügbar.

X'61'

X'01'

X'0114'

CONTEXT_STATE=*OLD wurde gegeben und der angegebene Kontext
ist nicht vorhanden.

X'61'

X'01'

X'0118'

CONTEXT_STATE=*NEW wurde gegeben und der angegebene
Kontext ist bereits vorhanden.

X'61'

X'40'

X'0120'

MPID_ADDR ist nicht auf Wortgrenze ausgerichtet.

X'61'

X'01'

X'0134'

Der Parameter CONTEXT_STATE ist ungültig.

X'61'

X'40'

X'0148'

Es wurde versucht, einen Kontext zu benutzen, der durch einen
vorhergehenden Fehler verfälscht worden ist.

X'61'

X'40'

X'0158'

Maximale Anzahl von 16 Benutzerkontexten erreicht. Ein neuer Kontext
kann nicht mehr erzeugt werden.

X'61'

X'01'

X'0184'

Der angegebene Memory Pool ist ungültig.

X'61'

X'20'

X'0198'

Für die geforderte Aktion steht nicht genügend Speicherplatz zur Verfügung.

X'61'

X'20'

X'0204'

Inkonsistenzen in den Memory Management Tabellen des DBL
(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.