Aliases: | SET-BIND-PROPERTIES |
This statement specifies the input sources and other conditions for the prelinker and linkage run that is started thereafter with a BIND statement.
MODIFY-BIND-PROPERTIES | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
START-LLM-CREATION = *YES / *NO
The option START-LLM-CREATION=*YES is analogous to the BINDER statement START-LLM-CREATION, which begins a new link process and creates a new LLM in the work area. This option resets a few lists built by previous statements //MODIFY-BIND-PROPERTIES. In detail:
- The list of INCLUDE will be set to *NONE.
- The list of RESOLVE will be set to *NONE.
- The list of ADD-PRELINK-FILES will be set to *NONE.
- The list of ADD-STATEMENT will be set to *NONE.
- The LISTING will be set to *NONE.
The reset will be done before other parameters of the statement are analysed. As an example the statements
//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)
will result in INCLUDE being *LIB-ELEM(inc2,mod2) and RESOLVE being *NONE.
With LLM_CREATION=*NO this reset will not be done. The parameters of INCLUDE, RESOLVE, ADD-PRELINK-FILES and ADD-STATEMENT will be added to the existing lists.
For more information on the interaction between the MODIFY-BIND-PROPERTIES and BIND statements, see also section “Interaction between the MODIFY-BIND-PROPERTIES and BIND statements”.
INCLUDE =
This option, which is analogous to the MODULE-CONTAINER operand of the BINDER statement INCLUDE-MODULES, specifies the modules to be linked.
Automatic template instantiation
The modules specified with the INCLUDE option are always instantiated by the prelinker. In cases where the same library is also specified in the RESOLVE option, it is important to ensure that the template instantiation is not disabled there (see RESOLVE option, INSTANTIATE = *NO / *IGNORE, "MODIFY-BIND-PROPERTIES").
INCLUDE = *UNCHANGED
The values specified in the MODIFY-BIND-PROPERTIES statements since the last START-LLM-CREATION=*YES apply.
INCLUDE = *NONE
The operand *NONE deletes the INCLUDE chain. NONE is the default value of the compiler, i.e. the value after starting the compiler of after a RESET-TO-DEFAULT.
INCLUDE = list-poss: *LIBRARY-ELEMENT(...)
This option specifies the PLAM library (LIBRARY=) and the element name (ELEMENT=) under which the module to be linked is stored.
Multiple *LIBRARY-ELEMENT entries may be specified here in a list. These entries areconverted internally into multiple INCLUDE-MODULES statements of the BINDER in the same order as the *LIBRARY-ELEMENT entries in the list.
LIBRARY = <filename 1..54>
<filename> assigns the name of a PLAM library.
LIBRARY = *LINK(...)
LINK-NAME = <filename 1..8>
<filename> is used to specify a link name for a PLAM library. The link name must already have been assigned to the library name with the ADD-FILE-LINK command before the compiler is called.
ELEMENT = *ALL(...)
All modules from the PLAM library specified with LIBRARY= are linked.
VERSION = *HIGHEST-EXISTING
If the element specification contains no version ID, the compiler uses the element with the highest existing version.
VERSION = <composed-name 1..24 with-under>
The compiler uses the element with the specified version.
ELEMENT = <composed-name 1..64 with-under>(...)
<composed-name> identifies the fully-qualified name of a module from the PLAM library specified with LIBRARY=.
VERSION = *HIGHEST-EXISTING
If the element specification contains no version ID, the compiler uses the element with the highest existing version.
VERSION = <composed-name 1..24 with-under>
The compiler uses the element with the specified version.
ADD-OPTION = *UNCHANGED / *NONE / <c-string 1..1800 with-low>
<c-string> can be used to specify further operands of the BINDER statement INCLUDE-MODULES in addition to the MODULE-CONTAINER operand. If more than one operand is specified, they must be separated by commas as follows:’
operand1 ,
operand2 ,
...’
The operands are directly passed through to BINDER without SDF analysis. See the BIND statement for an input example ("BIND (C/C++-Compiler, #36)").
Automatic template instantiation
The operands specified with ADD-OPTION are currently not considered during the automatic template instantiation by the prelinker, but only during subsequent linkage with BINDER. The operands should not affect the type, number or order of the modules to be linked, since different preconditions during the prelinker and linkage runs could result in duplicates or unresolved external references.
RESOLVE =
This option, which is analogous to the BINDER statement RESOLVE-BY-AUTOLINK, specifies the libraries from which unresolved external references are to be satisfied by BINDER (when using the autolink mechanism).
The C/C++ runtime libraries of the CRTE must not be specified with the RESOLVE option. These libraries are implicitly linked in the correct order and with the correct versions in accordance with the entries in the RUNTIME-LANGUAGE-MODE, STDLIB, TOOLSLIB and RUNTIME-ENVIRONMENT options.
Automatic template instantiation
In contrast to the INCLUDE option, the template instantiation can be controlled with the RESOLVE option. By default, modules within RESOLVE libraries are not instantiated by the prelinker. See also the INSTANTIATE specification.
RESOLVE = *UNCHANGED
The values specified in the MODIFY-BIND-PROPERTIES statements since the last START-LLM-CREATION=*YES apply.
RESOLVE = [*AUTOLINK](...)
LIBRARY = list-poss(40): <filename 1..54> / *LINK(LINK-NAME = <filename 1..8>)
This option can be used to specify the cataloged file name or link name of a PLAM library to be searched when using the autolink mechanism. If multiple libraries are specified in a list, this is equivalent to a RESOLVE-BY-AUTOLINK statement with a list of RESOLVE libraries. The list may contain a maximum of 40 libraries (binder restriction).
INSTANTIATE = *NO / *YES / *IGNORE
This option is only relevant for automatic template instantiation by the prelinker. It controls whether the libraries specified with the RESOLVE option are to be instantiated (*YES), not instantiated (*NO by default), or completely ignored (*IGNORE) by the prelinker. Whereas libraries for which *NO or *YES is specified are taken into account at instantiation, i.e., are searched for existing definitions, libraries for which *IGNORE is set are not even looked at by the prelinker and are only taken into account in the subsequent linkage process.
ADD-OPTION = *UNCHANGED / *NONE / <c-string 1..1800 with-low>
<c-string> can be used to specify further operands of the BINDER statement RESOLVE-BY-AUTOLINK in addition to the LIBRARY operand. If more than one operand is specified, they must be separated by commas as follows:’
operand1 ,
operand2 ,
...’
The operands are directly passed through to BINDER without SDF analysis. See the BIND statement for an input example ("BIND").
Automatic template instantiation
The operands specified with ADD-OPTION are currently not considered during the automatic template instantiation by the prelinker, but only during subsequent linkage with BINDER. The operands should not affect the type, number or order of the modules to be linked, since different preconditions during the prelinker and linkage runs could result in duplicates or unresolved external references.
RESOLVE = *NONE
The operand *NONE deletes the RESOLVE chain. NONE is the default value of the compiler, i.e. the value after starting the compiler of after a RESET-TO-DEFAULT.
ADD-PRELINK-FILES =
This option is only relevant for automatic template instantiation by the prelinker. This option can be used to specify entire PLAM libraries or individual library modules, which are taken into account by the prelinker when determining the instances to be generated as follows:
If the specified library contains the definition of a template entity (function or static data element), no instance that is a duplicate of that entity is generated.
No instantiations are performed in the specified library itself. In other words, if the library requires instances for template entities (external references), these are not generated.
If the BIND statement is used to start both a prelinker and a linkage run, the libraries or modules specified with ADD-PRELINK-FILES are not considered for linkage.
Problem
The modules in the libraries PLAM.X
and PLAM.Y
contain references to the same template instances. If the modules of these two libraries are both preinstantiated in the BIND statement with the ACTION=*PRELINK option, this will result in duplicates.
In such cases, the prelinker must be given a hint that symbols are defined elsewhere and that no instances should hence be generated. This can be done by using the ADD-PRELINK-FILES option.
Solution
To begin with, the modules of the library PLAM.X
are preinstantiated:
//MODIFY-BIND-PROPERTIES INCLUDE=*LIB-ELEM(LIB=PLAM.X,ELEM=*ALL)
//BIND ACTION=*PRELINK
This is followed by the preinstantiation of the modules in the library PLAM.Y
, but the option ADD-PRELINK-FILES is used here to inform the prelinker that the library PLAM.X
needs to be considered and that no duplicates for PLAM.X
should be generated.
//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
The values specified in the MODIFY-BIND-PROPERTIES statements since the last START-LLM-CREATION=*YES apply.
ADD-PRELINK-FILES = *NONE
The operand *NONE deletes the ADD-PRELINK-FILES chain. NONE is the default value of the compiler, i.e. the value after starting the compiler of after a RESET-TO-DEFAULT.
ADD-PRELINK-FILES = list-poss: *LIBRARY-ELEMENT(...)
Like the INCLUDE option (or the INCLUDE-MODULES statement of BINDER), this option specifies library elements to be considered by the prelinker at preinstantiation.
LIBRARY = <filename 1..54>
<filename> assigns the name of a PLAM library.
LIBRARY = *LINK(...)
LINK-NAME = <filename 1..8>
<filename> is used to specify a link name for a PLAM library. The link name must already have been assigned to the library name with the ADD-FILE-LINK command before the compiler is called.
ELEMENT = *ALL(...)
All modules from the PLAM library specified with LIBRARY= are considered at preinstantiation.
VERSION = *HIGHEST-EXISTING
If the element entry does not contain a version ID, the highest possible version is used by the compiler.
VERSION = <composed-name 1..24 with-under>
The compiler uses the element with the specified version.
ELEMENT = <composed-name 1..64 with-under>(...)
<composed-name> identifies the fully-qualified name of a module from the PLAM library specified with LIBRARY=.
VERSION = *HIGHEST-EXISTING
If the element specification contains no version ID, the compiler uses the element with the highest existing version.
VERSION = <composed-name 1..24 with-under>
The compiler uses the element with the specified version.
ADD-PRELINK-FILES = list-poss: *LIBRARY(...)
The specified libraries are treated by the prelinker in the same way as RESOLVE libraries, i.e. only those library modules which could potentially be used to satisfy unresolved external references when actually linking the program are considered at preinstantiation.
LIBRARY-NAME = <filename 1..54>
<filename> assigns the name of a PLAM library.
LIBRARY = *LINK(...)
LINK-NAME = <filename 1..8>
<filename> is used to specify a link name for a PLAM library. The link name must already have been assigned to the library name with the ADD-FILE-LINK command before the compiler is called.
MAX-INSTANTIATE-ITER = 30 / *UNCHANGED / <integer 0..100>
This option is only relevant for automatic template instantiation by the prelinker. It defines the maximum number or prelinker iterations. The default value is 30. If a value of 0 isspecified for <integer>, the number of prelinker iterations is unlimited.
TEMPLATE-DEF-LIST = *UNCHANGED / *YES / *NO
This option is used to switch a communication technology on and off between the front end and prelinker during the internal post-compilation phase via a definition list (see also "Automatic instantiation").
ADD-STATEMENT = *UNCHANGED / *NONE / list-poss: <c-string 1..1800 with-low><c-string> can be used to specified an additional BINDER statement. Multiple BINDER statements can be specified as a list of c-strings as follows:(’
statement1 ’,’
statement2 ’
,’
...’)
.
The operands are directly passed through to BINDER without SDF analysis.
Automatic template instantiation
The BINDER statements specified with ADD-STATEMENT are currently not considered during the automatic template instantiation by the prelinker, but only during subsequent linkage with BINDER. The operands should not affect the type, number or order of the modules to be linked, since different preconditions during the prelinker and linkage runs could result in duplicates or unresolved external references.
RUNTIME-LANGUAGE =
This option causes the appropriate C/C++ runtime system of the CRTE to be automatically linked in accordance with the defined C or C++ language mode.
RUNTIME-LANGUAGE = *UNCHANGED
The value specified in the last MODIFY-BIND-PROPERTIES statement applies.
RUNTIME-LANGUAGE = *C
The C runtime system is linked.
The STDLIB option defines the method by which the C runtime system is linked. The RUNTIME-ENVIRONMENT option determines whether the RISC version (“SRULNK”) of the C runtime system is to be used instead of the /390 version (“SYSLNK”).
RUNTIME-LANGUAGE = *CPLUSPLUS(...)
Apart from the C runtime system, which is always required, additional C++ libraries and runtime systems of the CRTE are linked.
The STDLIB option specifies the mode in which these CRTE libraries are linked.
MODE = *UNCHANGED / *LATEST / *2017 / *2020 / *V2-COMPATIBLE / *V3-COMPATIBLE
Depending on the language modes the compiler used to create the user modules, the appropriate CRTE libraries will be required when linking.
*UNCHANGED:
The value specified in the last MODIFY-BIND-PROPERTIES statement applies.
*LATEST:
This is a short cut the latest supported standard and may change in future compiler versions. In this version of the compiler, the specification is the same as *2020.
*2017 / *2020:
Needs a modern C++ runtime system and library. With library version 1 it is SYSLNK.CRTE.CXX01, with library version 2 it is SYSLNK.CRTE.CXX02.
*V2-COMPATIBLE:
Needs the Cfront C++ runtime system (SYSLNK.CRTE.CFCPP) and Cfront C++ library for complex math and stream-oriented I/O (SYSLNK.CRTE.CPP).
This specification corresponds to the specification *CPP of the C/C++ V3 compiler.
*V3-COMPATIBLE:
Needs the C++ V3 runtime system (SYSLNK.CRTE.RTSCPP) and library (SYSLNK.CRTE.STDCPP). The linkage of the Tools.h++ library, which can be used in the C++ V3 mode, is controlled by means of a separate TOOLSLIB option.
This specification corresponds to the specification *ANSI resp. *STRICT-ANSI of the C/C++ V3 compiler.
STDLIB = *UNCHANGED / *DYNAMIC / *DYNAMIC-COMPLETE / *STATIC / *NONE
This option defines how external references to the C/C++ libraries of the CRTE corresponding to the RUNTIME-LANGUAGE options are resolved.
The *DYNAMIC and *STATIC entries currently have a different effect only when linking the C runtime system.
The C++ libraries are treated identically for both the *DYNAMIC and *STATIC specifications, i.e. are always linked fully (and “statically”).
*UNCHANGED:
The value specified in the last MODIFY-BIND-PROPERTIES statement applies.
*DYNAMIC:
All external references to the CRTE libraries are resolved. In the case of the C runtime system only an adapter module from the SYSLNK.CRTE.PARTIAL-BIND library is linked in permanently. The preloaded C runtime system is connected to the program only at runtime.
*DYNAMIC-COMPLETE:
This option represents a variant of dynamic linkage that uses the complete partial bind libraries of CRTE.
This specification is not allowed in C++ 2017 or C++ 2020 mode.
The external references are resolved at runtime from the SYSLNK.CRTE.COMPL library. In the C++ V3 mode, i.e. when RUNTIME-LANGUAGE=*CPLUSPLUS(MODE=*V3-COMPATIBLEI) is specified, the SYSLNK.CRTE.CPP-COMPL library is used instead of the SYSLNK.CRTE.RTSCPP and SYSLNK.CRTE.STDCPP libraries.
*STATIC:
All external references to the CRTE libraries are resolved. In the case of the C runtime system, all individual modules from the SYSLNK.CRTE library are linked in permanently.
*NONE:
The external references to the CRTE libraries remain open and are subsequently resolved either in a later linkage run (i.e. permanently with BINDER or the BIND statement) or directly at runtime via dynamic linkage with DBL.
TOOLSLIB = *UNCHANGED / *YES / *NO
If *YES is specified, the library Tools.h++ (SYSLNK.CRTE.TOOLS), which can only be used in C++ V3, is included. When the STDLIB=DYNAMIC-COMPLETE option is specified, the SYSLNK.CRTE.CPP-COMPL library is used instead of the SYSLNK.CRTE.TOOLS library.
If *NO is specified, the external references to the Tools.h++ library remain unresolved.
TEST-SUPPORT = *UNCHANGED / *YES / *NO
This option controls whether the LSD information generated at compilation is to be saved in the linked module for subsequent use with the Advanced Interactive Debugger AID. The value is passed as the TEST-SUPPORT operand of the BINDER statement SAVE-LLM.
LISTING = *UNCHANGED / *NONE / *SYSLST / <filename 1..54>
This option, which is analogous to the MAP operand of the BINDER statement SAVE-LLM, can be used to request the standard listings of BINDER. These listings are output to the system file SYSLST or to a cataloged file specified with <filename>.
When START-LLM-CREATION=*YES is specified, the listing is reset to *NONE.