Alias-Name: | SET-BIND-PROPERTIES |
Diese Anweisung legt die Eingabequellen und andere Bedingungen für den Prälinker- und Bindelauf fest, der mit einer anschließenden BIND-Anweisung gestartet wird.
MODIFY-BIND-PROPERTIES | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
START-LLM-CREATION = *YES / *NO
Die Angabe START-LLM-CREATION=*YES ist analog zur BINDER-Anweisung START-LLM-CREATION, mit der ein neuer Bindeprozess gestartet und ein neues LLM im Arbeitsbereich erzeugt wird. Bei dieser Angabe werden einige Daten gelöscht, die frühere //MODIFY-BIND-PROPERTIES-Anweisungen gesetzt haben. Im Detail sind dies:
- Die Liste der INCLUDE wird auf *NONE gesetzt.
- Die Liste der RESOLVE wird auf *NONE gesetzt.
- Die Liste der ADD-PRELINK-FILES wird auf *NONE gesetzt.
- Die Liste der ADD-STATEMENT wird auf *NONE gesetzt.
- Das LISTING wird auf *NONE gesetzt.
Dies passiert, bevor die Werte der aktuellen Anweisung ausgewertet werden. z.B. ist nach
//MOD-BIND-PROPERTIES LLM_CREATION=*NO, INCLUDE=*LIB-ELEM(inc,mod), RESOLVE=*LIBRARY(res)
//MOD-BIND-PROPERTIES LLM_CREATION=*YES, INCLUDE=*LIB-ELEM(inc2,mod2)
die Liste der Includes *LIB-ELEM(inc2,mod2) und die der Resolves *NONE.
Dies wird bei LLM_CREATION=*NO nicht gemacht. Hier werden die Angaben bei INCLUDE, RESOLVE, ADD-PRELINK-FILES und ADD-STATEMENT den vorhandenen Listen hinzugefügt.
Zum Zusammenspiel der Anweisungen MODIFY-BIND-PROPERTIES und BIND siehe auch Abschnitt „Zusammenspiel der Anweisungen MODIFY-BIND-PROPERTIES und BIND“.
INCLUDE =
Mit dieser Option werden analog zum MODULE-CONTAINER-Operanden der BINDER-Anweisung INCLUDE-MODULES Module angegeben, die eingebunden werden sollen.
Automatische Template-Instanziierung
Die mit der INCLUDE-Option angegebenen Module werden vom Prälinker immer instanziiert. Für den Fall, dass dieselbe Bibliothek auch in der RESOLVE-Option angegeben wird, ist jedoch darauf zu achten, dass die Template-Instanziierung dort nicht ausgeschaltet ist (siehe RESOLVE-Option, INSTANTIATE = *NO / *IGNORE, "MODIFY-BIND-PROPERTIES").
INCLUDE = *UNCHANGED
Es gelten die Angaben der MODIFY-BIND-PROPERTIES-Anweisungen seit dem letzten START-LLM-CREATION=*YES.
INCLUDE = *NONE
Der Optionswert *NONE löscht die INCLUDE-Kette. NONE ist der Compiler-Default, d.h. ein Wert nach dem Start des Compilers oder nach dem RESET-TO-DEFAULT.
INCLUDE = list-poss: *LIBRARY-ELEMENT(...)
Es wird angegeben, in welcher PLAM-Bibliothek (LIBRARY=) und unter welchem Elementnamen (ELEMENT=) das einzubindende Modul abgelegt ist.
Mehrere *LIBRARY-ELEMENT-Angaben in einer Liste werden intern in mehrere INCLUDE-MODULES-Anweisungen des BINDER umgesetzt, und zwar in der Reihenfolge, in der die *LIBRARY-ELEMENT-Angaben in der Liste stehen.
LIBRARY = <filename 1..54>
<filename> ist der Name einer PLAM-Bibliothek.
LIBRARY = *LINK(...)
LINK-NAME = <filename 1..8>
<filename> ist der Linkname einer PLAM-Bibliothek. Der Linkname muss vor Aufruf des Compilers mit dem ADD-FILE-LINK-Kommando dem Bibliotheksnamen zugeordnet worden sein.
ELEMENT = *ALL(...)
Es werden alle Module aus der mit LIBRARY= angegebenen PLAM-Bibliothek eingebunden.
VERSION = *HIGHEST-EXISTING
Enthält die Elementangabe keine Versionsbezeichnung, nimmt der Compiler die Elemente mit den jeweils höchsten Versionen.
VERSION = <composed-name 1..24 with-under>
Der Compiler nimmt die Elemente mit der angegebenen Version.
ELEMENT = <composed-name 1..64 with-under>(...)
<composed-name> bezeichnet den vollqualifizierten Namen eines Moduls aus der mit LIBRARY= angegebenen PLAM-Bibliothek.
VERSION = *HIGHEST-EXISTING
Enthält die Elementangabe keine Versionsbezeichnung, nimmt der Compiler das Element mit der höchsten Version.
VERSION = <composed-name 1..24 with-under>
Der Compiler nimmt das Element mit der angegebenen Version.
ADD-OPTION = *UNCHANGED / *NONE / <c-string 1..1800 with-low>
Mit <c-string> können zusätzlich zum MODULE-CONTAINER-Operanden weitere Operanden der BINDER-Anweisung INCLUDE-MODULES angegeben werden. Mehrere Operanden müssen durch Kommas getrennt werden:’
operand1 ,
operand2 ,
...’
Die Operanden werden ohne SDF-Analyse direkt an den BINDER durchgereicht. Eingabebeispiel siehe BIND-Anweisung ("BIND").
Automatische Template-Instanziierung
Die mit ADD-OPTION angegebenen Operanden werden derzeit nicht bei der automatischen Template-Instanziierung durch den Prälinker, sondern nur beim nachfolgenden Binden durch den BINDER berücksichtigt. Die Operanden sollten nicht die Art, Anzahl oder Reihenfolge der einzubindenden Module beeinflussen, da unterschiedliche Voraussetzungen beim Prälinker- und Bindelauf ggf. zu Duplikaten oder unbefriedigten Externverweisen führen können.
RESOLVE =
Mit dieser Option werden analog zur BINDER-Anweisung RESOLVE-BY-AUTOLINK Bibliotheken angegeben, aus denen der BINDER unbefriedigte Externverweise befriedigen soll (Autolink-Verfahren).
Die C-/C++-Laufzeitbibliotheken des CRTE werden nicht mit der RESOLVE-Option angegeben. Diese werden implizit auf Grund der Angaben in den Optionen RUNTIME-LANGUAGE, STDLIB, TOOLSLIB und RUNTIME-ENVIRONMENT in der richtigen Reihenfolge und Ausprägung eingebunden.
Automatische Template-Instanziierung
Im Gegensatz zur INCLUDE-Option kann mit der RESOLVE-Option die Template-Instanziierung gesteuert werden. Standardmäßig werden Module innerhalb von RESOLVE-Bibliotheken vom Prälinker nicht instanziiert. Siehe die Angabe INSTANTIATE.
RESOLVE = *UNCHANGED
Es gelten die Angaben der MODIFY-BIND-PROPERTIES-Anweisungen seit dem letzten START-LLM-CREATION=*YES.
RESOLVE = [*AUTOLINK](...)
LIBRARY = list-poss(40): <filename 1..54> / *LINK(LINK-NAME = <filename 1..8>)
Es wird der katalogisierte Dateiname oder der Linkname einer PLAM-Bibliothek angegeben, die per Autolink-Verfahren durchsucht werden soll. Werden mehrere Bibliotheken in einer Liste angegeben, so entspricht dies einer RESOLVE-BY-AUTOLINK-Anweisung mit einer Liste von RESOLVE-Bibliotheken. Die Liste darf maximal 40 Bibliotheken enthalten (Binder-Einschränkung).
INSTANTIATE = *NO / *YES / *IGNORE
Diese Option ist nur bei automatischer Template-Instanziierung durch den Prälinker relevant und steuert, ob die mit der RESOLVE-Option angegebenen Bibliotheken nicht instanziiert (Voreinstellung *NO), instanziiert (*YES) oder vom Prälinker überhaupt nicht berücksichtigt (*IGNORE) werden sollen. Während eine Bibliothek bei den Angaben *NO und *YES beim Instanziieren berücksichtigt, d.h. nach bereits vorhandenen Definitionen durchsucht wird, wird sie bei Angabe von *IGNORE vom Prälinker inhaltlich nicht betrachtet und lediglich im späteren Bindeprozess berücksichtigt.
ADD-OPTION = *UNCHANGED / *NONE / <c-string 1..1800 with-low>
Mit <c-string> können zusätzlich zum LIBRARY-Operanden weitere Operanden der BINDER-Anweisung RESOLVE-BY-AUTOLINK angegeben werden. Mehrere Operanden müssen durch Kommas getrennt werden:
’
operand1 ,
operand2 ,
...’
Die Operanden werden ohne SDF-Analyse direkt an den BINDER durchgereicht. Eingabebeispiel siehe BIND-Anweisung ("BIND").
Automatische Template-Instanziierung
Die mit ADD-OPTION angegebenen Operanden werden derzeit nicht bei der automatischen Template-Instanziierung durch den Prälinker, sondern nur beim nachfolgenden Binden durch den BINDER berücksichtigt. Die Operanden sollten nicht die Art, Anzahl oder Reihenfolge der einzubindenden Module beeinflussen, da unterschiedliche Voraussetzungen beim Prälinker- und Bindelauf ggf. zu Duplikaten oder unbefriedigten Externverweisen führen können.
RESOLVE = *NONE
Der Optionswert *NONE löscht die RESOLVE-Kette. NONE ist der Compiler-Default, d.h. ein Wert nach dem Start des Compilers oder nach dem RESET-TO-DEFAULT.
ADD-PRELINK-FILES =
Diese Option ist nur bei automatischer Template-Instanziierung durch den Prälinker relevant.
Mithilfe dieser Option können PLAM-Bibliotheken insgesamt bzw. einzelne Module daraus angegeben werden, die bei der Bestimmung der zu generierenden Instanzen vom Prälinker in folgender Weise berücksichtigt werden:
Wenn die angegebene Bibliothek die Definition einer Template-Einheit (Funktion oder statisches Datenelement) enthält, wird keine Instanz generiert, die hierzu ein Duplikat ist.
In der angegebenen Bibliothek selbst werden keine Instanziierungen durchgeführt. Das heißt, wenn die Bibliothek Instanzen für Template-Einheiten benötigt (externe Referenzen), werden diese nicht generiert.
Wenn mit der BIND-Anweisung sowohl ein Prälinker- als auch ein Bindelauf gestartet wird, werden die mit ADD-PRELINK-FILES angegebenen Bibliotheken bzw. Module beim Binden nicht berücksichtigt.
Problemstellung
Die Module in den Bibliotheken PLAM.X
und PLAM.Y
enthalten Definitionen derselben Template-Instanzen. Wenn die Module der beiden Bibliotheken jeweils mit der Option ACTION=*PRELINK in der BIND-Anweisung vorinstanziiert werden, entstehen Duplikate.
Dem Prälinker muss in solchen Fällen ein Hinweis gegeben werden, dass Symbole anderswo definiert sind und er deshalb keine Instanz generieren soll. Hierzu steht die Option ADD-PRELINK-FILES zur Verfügung.
Lösung
Zunächst werden die Module der Bibliothek PLAM.X
vorinstanziiert:
//MODIFY-BIND-PROPERTIES INCLUDE=*LIB-ELEM(LIB=PLAM.X,ELEM=*ALL) //BIND ACTION=*PRELINK
Anschließend werden die Module der Bibliothek PLAM.Y
vorinstanziiert. Dabei wird mit der Option ADD-PRELINK-FILES bekanntgegeben, dass der Prälinker die Bibliothek PLAM.X
berücksichtigen muss und keine Duplikate zu PLAM.X
generiert.
//MODIFY-BIND-PROPERTIES INCLUDE=*LIB-ELEM(LIB=PLAM.Y,ELEM=*ALL),- //ADD-PRELINK-FILES=*LIBRARY(LIB=PLAM.X) //BIND ACTION=*PRELINK
ADD-PRELINK-FILES = *UNCHANGED
Es gelten die Angaben der MODIFY-BIND-PROPERTIES-Anweisungen seit dem letzten START-LLM-CREATION=*YES.
ADD-PRELINK-FILES = *NONE
Der Optionswert *NONE löscht die ADD-PRELINK-FILES-Kette. NONE ist der Compiler-Default, d.h. ein Wert nach dem Start des Compilers oder nach dem RESET-TO-DEFAULT.
ADD-PRELINK-FILES = list-poss: *LIBRARY-ELEMENT(...)
Es werden analog zur INCLUDE-Option (bzw. zur INCLUDE-MODULES-Anweisung des BINDER) Bibliothekselemente angegeben, die vom Prälinker beim Vorinstanziieren berücksichtigt werden sollen.
LIBRARY = <filename 1..54>
<filename> ist der Name einer PLAM-Bibliothek.
LIBRARY = *LINK(...)
LINK-NAME = <filename 1..8>
<filename> ist der Linkname einer PLAM-Bibliothek. Der Linkname muss vor Aufruf des Compilers mit dem ADD-FILE-LINK-Kommando dem Bibliotheksnamen zugeordnet worden sein.
ELEMENT = *ALL(...)
Es werden alle Module aus der mit LIBRARY= angegebenen PLAM-Bibliothek beim Vorinstanziieren berücksichtigt.
VERSION = *HIGHEST-EXISTING
Enthält die Elementangabe keine Versionsbezeichnung, nimmt der Compiler die Elemente mit den jeweils höchsten Versionen.
VERSION = <composed-name 1..24 with-under>
Der Compiler nimmt das Element mit der angegebenen Version.
ELEMENT = <composed-name 1..64 with-under>(...)
<composed-name> bezeichnet den vollqualifizierten Namen eines Moduls aus der mit LIBRARY= angegebenen PLAM-Bibliothek.
VERSION = *HIGHEST-EXISTING
Enthält die Elementangabe keine Versionsbezeichnung, nimmt der Compiler das Element mit der höchsten Version.
VERSION = <composed-name 1..24 with-under>
Der Compiler nimmt das Element mit der angegebenen Version.
ADD-PRELINK-FILES = list-poss: *LIBRARY(...)
Die angegebenen Bibliotheken werden vom Prälinker wie RESOLVE-Bibliotheken behandelt, d.h. es werden nur diejenigen Module aus den angegebenen PLAM-Bibliotheken beim Vorinstanziieren berücksichtigt, aus denen beim eigentlichen Binden unbefriedigte Externverweise befriedigt werden könnten.
LIBRARY-NAME = <filename 1..54>
<filename> ist der Name einer PLAM-Bibliothek.
LIBRARY = *LINK(...)
LINK-NAME = <filename 1..8>
<filename> ist der Linkname einer PLAM-Bibliothek. Der Linkname muss vor Aufruf des Compilers mit dem ADD-FILE-LINK-Kommando dem Bibliotheksnamen zugeordnet worden sein.
MAX-INSTANTIATE-ITER = 30 / *UNCHANGED / <integer 0..100>
Diese Option ist nur bei automatischer Template-Instanziierung durch den Prälinker relevant und legt die maximale Anzahl der Prälinker-Durchläufe fest. Voreingestellt ist 30. Wenn für <integer> der Wert 0 angegeben wird, ist die Anzahl der Prälinker-Durchläufe nicht limitiert.
TEMPLATE-DEF-LIST = *UNCHANGED / *YES / *NO
Diese Option für die automatische Template-Instanziierung schaltet während der internen Nachübersetzungsphase eine Kommunikationstechnik zwischen Frontend und Prälinker über eine Definitionsliste ein bzw. aus (siehe dazu auch "Automatische Instanziierung").
ADD-STATEMENT = *UNCHANGED / *NONE / list-poss: <c-string 1..1800 with-low>
Mit <c-string> kann eine zusätzliche BINDER-Anweisung angegeben werden. Mehrere BINDER-Anweisungen werden als eine Liste von c-strings angegeben:(’
anweisung1 ’,’
anweisung2 ’
,’
...’)
.
Die Anweisungen werden ohne SDF-Analyse direkt an den BINDER durchgereicht.
Automatische Template-Instanziierung
Die mit ADD-STATEMENT angegebenen BINDER-Anweisungen werden derzeit nicht bei der automatischen Template-Instanziierung durch den Prälinker, sondern nur beim nachfolgenden Binden durch den BINDER berücksichtigt. Die Anweisungen sollten nicht die Art, Anzahl oder Reihenfolge der einzubindenden Module beeinflussen, da unterschiedliche Voraussetzungen beim Prälinker- und Bindelauf ggf. zu Duplikaten oder unbefriedigten Externverweisen führen können.
RUNTIME-LANGUAGE =
Auf Grund dieser Option werden die richtigen, den C- bzw. C++-Sprachmodi entsprechenden C-/C++-Laufzeitsysteme des CRTE automatisch eingebunden.
RUNTIME-LANGUAGE = *UNCHANGED
Es gilt die Angabe der letzten MODIFY-BIND-PROPERTIES-Anweisung.
RUNTIME-LANGUAGE = *C
Es wird das C-Laufzeitsystem eingebunden.
Mit der Option STDLIB wird die Art festgelegt, in der das C-Laufzeitsystem eingebunden wird.
RUNTIME-LANGUAGE = *CPLUSPLUS(...)
Neben dem C-Laufzeitsystem, das immer benötigt wird, werden zusätzlich C++-Bibliotheken und -Laufzeitsysteme des CRTE eingebunden. Mit der Option STDLIB wird die Art festgelegt, in der diese CRTE-Bibliotheken eingebunden werden.
MODE = *UNCHANGED / *LATEST / *2017 / *2020 / *V2-COMPATIBLE / *V3-COMPATIBLE
Abhängig davon, in welchem Modus des Compilers die Benutzermodule erzeugt wurden, werden entsprechende CRTE-Bibliotheken beim Binden benötigt.
*UNCHANGED:
Es gilt die Angabe der letzten MODIFY-BIND-PROPERTIES-Anweisung.
*LATEST:
Diese Angabe entspricht der Angabe des letzten unterstützten Standards und kann sich in zukünftigen Compiler-Versionen ändern. In dieser Version des Compilers ist die Angabe identisch zu *2020.
*2017 / *2020:
Benötigt wird eine moderne C++-Bibliothek. Bei Bibliotheks-Version 1 wird SYSLNK.CRTE.CXX01 benutzt, bei Bibliotheks-Version 2 ist es SYSLNK.CRTE.CXX02.
*V2-COMPATIBLE:
Benötigt werden das Cfront-C++-Laufzeitsystem (SYSLNK.CRTE.CFCPP) und und die Cfront-C++-Bibliothek für komplexe Mathematik und stromorientierte Ein-/Ausgabe (SYSLNK.CRTE.CPP).
Diese Angabe entspricht der Angabe *CPP des C/C++ V3-Compilers.
*V3-COMPATIBLE:
Benötigt werden das C++ V3-Laufzeitsystem (SYSLNK.CRTE.RTSCPP) und die C++ V3-Bibliothek (SYSLNK.CRTE.STDCPP). Das Binden der im C++ V3-Modus nutzbaren Bibliothek Tools.h++ wird mit einer eigenen Option TOOLSLIB gesteuert.
Diese Angabe entspricht der Angabe *ANSI bzw. *STRICT-ANSI des C/C++ V3-Compilers.
STDLIB = *UNCHANGED / *DYNAMIC / *DYNAMIC-COMPLETE / *STATIC / *NONE
Mit dieser Option wird festgelegt, auf welche Art die Externverweise auf die den Optionen RUNTIME-LANGUAGE entsprechenden C/C++-Bibliotheken des CRTE aufgelöst werden. Die Angaben *DYNAMIC UND *STATIC haben derzeit nur eine unterschiedliche Auswirkung auf das Einbinden des C-Laufzeitssystems.
Die C++-Bibliotheken werden bei den Angaben *DYNAMIC und *STATIC identisch behandelt, nämlich immer komplett („statisch“) eingebunden.
*UNCHANGED:
Es gilt die Angabe der letzten MODIFY-BIND-PROPERTIES-Anweisung.
*DYNAMIC:
Es werden alle Externverweise auf die CRTE-Bibliotheken befriedigt. Im Falle des C-Laufzeitsystems wird nur ein Adaptermodul aus der Bibliothek SYSLNK.CRTE.PARTIAL-BIND fest eingebunden und erst zum Ablaufzeitpunkt das vorgeladene C-Laufzeitsystem zum Programm konnektiert.
*DYNAMIC-COMPLETE:
Diese Option stellt eine Variante des dynamischen Bindens dar, die die Complete-Partial-Bind-Bibliotheken von CRTE verwendet.
Im C++ 2017-Modus oder C++ 2020-Modus ist diese Angabe nicht erlaubt.
Die externen Verweise werden aus der Bibliothek SYSLNK.CRTE.COMPL befriedigt. Im C++ V3-Modus, d.h. bei Angabe von RUNTIME-LANGUAGE=*CPLUSPLUS(MODE=*V3-COMPATIBLE), wird statt der Bibliotheken SYSLNK.CRTE.RTSCPP und SYSLNK.CRTE.STDCPP die Bibliothek SYSLNK.CRTE.CPP-COMPL verwendet.
*STATIC:
Es werden alle Externverweise auf die CRTE-Bibliotheken befriedigt.
Im Falle des C-Laufzeitsystems werden alle Einzelmodule aus der Bibliothek SYSLNK.CRTE fest eingebunden.
*NONE:
Die Externverweise auf die CRTE-Bibliotheken bleiben offen und werden entweder in einem weiteren Bindelauf durch festes Einbinden (BINDER bzw. BIND-Anweisung) befriedigt oder erst zum Ablaufzeitpunkt durch dynamisches Binden mit dem DBL.
TOOLSLIB = *UNCHANGED / *YES / *NO
Bei Angabe von *YES wird die nur in C++ V3 nutzbare Bibliothek Tools.h++ eingebunden (SYSLNK.CRTE.TOOLS). Bei Angabe der Option STDLIB=DYNAMIC-COMPLETE wird statt SYSLNK.CRTE.TOOLS die Bibliothek SYSLNK.CRTE.CPP-COMPL verwendet. Bei Angabe von *NO bleiben die Externverweise auf die Bibliothek Tools.h++ offen.
TEST-SUPPORT = *UNCHANGED / *YES / *NO
Mit dieser Option wird gesteuert, ob die bei der Übersetzung erzeugten LSD-Informationen für die Dialogtesthilfe AID im gebundenen Modul abgespeichert werden sollen. Die Angabe wird als TEST-SUPPORT-Operand der BINDER-Anweisung SAVE-LLM abgesetzt.
LISTING = *UNCHANGED / *NONE / *SYSLST / <filename 1..54>
Mit dieser Option können analog zum MAP-Operanden der BINDER-Anweisung SAVE-LLM Standardlisten des BINDER angefordert werden. Die Binderlisten werden über die Systemdatei SYSLST ausgegeben oder in die mit <filename> angegebene katalogisierte Datei.
Bei START-LLM-CREATION=*YES wird das Listing auf *NONE zurückgesetzt.