When an LLM is generated by BINDER, the user can specify whether slices are to be formed on the basis of the attribute PUBLIC. If so, the LLM is split into two parts (slices), each of which has the form of a simple LLM. The slice containing the CSECTs with the attribute PUBLIC=YES can be loaded as shared code; the other slice, which contains all CSECTs with the attribute PUBLIC=NO, can be loaded only in the task-local user memory and forms the private part of the LLM.
DBL loads only the PUBLIC part of the LLM if the LLM is loaded with the DSSM as a nonprivileged subsystem or with the ASHARE macro.
If the LLM is loaded with the START/LOAD-EXECUTABLE-PROGRAM or START/LOAD-PROGRAM command or with the BIND macro, the private part of the LLM is loaded first. If this private part contains external references to the PUBLIC part, two possible situations exist:
The PUBLIC part of the LLM has already been loaded into the shared code memory. In this case, the external references in the private part are resolved by the shared code.
The PUBLIC part is not yet in the shared code memory. In this case, the PUBLIC part is loaded as private code into the task-local user memory. The same thing happens if the user specified SHARE[-SCOPE]=NONE in the load call because the PUBLIC part is not to be used as shared code.
When loading the private part of an LLM which contains external references to the PUBLIC part, DBL checks whether both parts actually belong to the same LLM. If this is not the case, the PUBLIC part of the LLM is loaded into the task-local user memory as private code.
If the PUBLIC part of the LLM is to be loaded via DSSM, the user must specify the list of SUBSYSTEM-ENTRIES which are to be visible outside the PUBLIC part of the LLM. This list must be specified in the statement START-LLM-CREATION or MODIFY-LLM-ATTRIBUTES during the BINDER run. This facility is available as of BINDER V1.1A.