Building load modules

SMP/E often needs to build load modules during APPLY, LINK LMODS, LINK MODULE, and RESTORE command processing. After determining which load modules must be built, SMP/E verifies that all the modules needed to build the load modules are available. If a module is not found, SMP/E checks whether the target zone contains a MOD entry for that module. If it finds one, it checks whether the entry points to an existing LMOD entry and looks for these situations:
  • If there is an LMOD entry and it contains a COPY indicator, SMP/E can include the module from the target library indicated in the LMOD entry.
  • If the LMOD entry does not contain a COPY indicator, SMP/E checks whether the load module is a single-CSECT load module. If so, SMP/E can include the load module from the target library indicated in the LMOD entry.
  • If the LMOD entry does not contain a COPY indicator and is not a single-CSECT load module, SMP/E assumes that the module has been assembled and looks for an ASSEM or SRC entry with the same name as the module. If SMP/E finds an ASSEM entry in the target zone, it assembles the entry and uses the output when it link-edits the load module. If SMP/E finds an SRC entry in the target zone, the SMPSTS data set, or the distribution library, it assembles the source and uses the output when it link-edits the load module.

If SMP/E could not find a usable copy of the module, SMP/E checks whether there is a DLIB entry corresponding to the distribution library for the module. If so, SMP/E checks whether the module is in the target library pointed to by the DLIB entry. If this is true, SMP/E uses that copy of the module when it link-edits the load module.

If a module is missing from the target zone or the target libraries and is not a new module, SMP/E checks for it in the distribution zone. If the FMID, RMID, and UMID in the distribution zone MOD entry match those in the target zone MOD entry, SMP/E uses the distribution library version of the module to build the load module.

If SMP/E does not find a required module by the previously described searches, it then tries to find a copy of the module within the SYSMOD that last replaced the module in the target system. If the target zone MOD entry for the module does not indicate that the module was assembled or updated since its last replacement (RMIDASM is not set and there are no UMIDs), SMP/E locates the SYSMOD identified by the RMID subentry in the SMPPTS data set. If the RMID SYSMOD is found in the SMPPTS data set, the ++MOD statement describing the required module is located within that SYSMOD. The ++MOD statement describes how the module is packaged and where the module is located:
  • If the module is found inline within the SYSMOD, SMP/E copies the object module from the SMPPTS data set to the SMPWRK3 data set. Later, during the link-edit operation, the module is included from the SMPWRK3 data set.
  • If the module is packaged in a RELFILE data set, SMP/E allocates the associated SMPTLIB data set that contains the module. Later, during the link-edit operation, the module is included from the SMPTLIB data set. If the SMPTLIB data set cannot be allocated, SMP/E issues messages to describe the allocation error and identify the modules that could not be found.
  • If the module is packaged in either an LKLIB or TXLIB data set, SMP/E allocates the specified data set that contains the module. Later, during the link-edit operation, the module is included from the LKLIB or TXLIB data set. If the specified data set could not be allocated, SMP/E issues error messages to describe the allocation error and identify the modules that could not be found.
If after this search, the module is still not found, SMP/E takes one of these actions:
  • If the module had been previously installed in the target system, but not in the distribution system, and no usable copy of the module could be found, then SMP/E issues error messages identifying each incomplete load module that was to include the identified module.
  • If the module had been previously installed in the target system and distribution system, but the service level of the module in the distribution system does not match the service level of the module in the target system, and no usable copy of the module could be found, then SMP/E issues error messages identifying each incomplete load module that was to include the identified module.
  • If the module has not been previously installed in the target system or distribution system, then SMP/E issues a warning message for each incomplete load module that was to include the identified module. Processing continues, but the module is not included in the load module during the link-edit operation. SMP/E does not fail processing in this case because you can correct the problem by installing the product that supplies the required module. Once the product that supplies the needed module is applied, the module can be included in the incomplete load module.