Specifying where the module is to be loaded (LOAD macro)

When a program in supervisor state uses the LOAD macro to bring a copy of the load module into virtual storage, it can use one of three parameters to specify where the control program is to load the module:
  • Use the ADDR parameter to load a module in an APF-authorized library at a specified address. You must first allocate storage for the module in your key.
  • Use the ADRNAPF parameter to load a module in an unauthorized library at a specified address. You must first allocate storage for the module in your key.
  • Use the GLOBAL parameter on LOAD to load the module into either fixed or pageable CSA.
    • GLOBAL=(YES,P) or GLOBAL=YES requests storage in the pageable CSA.
    • GLOBAL=(YES,F) requests storage in fixed CSA.

    When you use GLOBAL=YES, you can use the EOM parameter to specify when the control program is to delete the module. EOM=NO (the default) requests deletion at task termination. EOM=YES requests deletion at address space termination.

The GLOBAL=YES and GLOBAL=(YES,F) parameters should be used only by programs running in address spaces that never terminate or to load non-executable load modules. A module is loaded into global storage so it can be shared among tasks in different address spaces. If the address space containing the program that loaded the module terminates, the loaded module is deleted and other users of this module could attempt to run a program that is no longer in storage.
Note: If you determine the amount of storage required to hold a loaded module using the module length returned from the BLDL macro in the PDS2 data area field PDS2STOR, this will no longer work for program objects exceeding 16 megabytes. The PDS2STOR field is only 3 bytes in length, and it cannot denote any program length greater than 16 megabytes. You can determine if a program object exceeds 16 megabytes by inspecting the PDS2BIG bit of the PDS2 data area. If the PDS2BIG bit is set on, the program object is greater than 16 megabytes, and the 4-byte PDS2VTSR field contains the amount of storage required to hold a loaded program object greater than 16 megabytes. If the PDS2BIG bit is set off, use the PDS2STOR field to determine the size of storage required.
If you do not use ADDR, ADRNAPF, or GLOBAL=YES (that is, you use GLOBAL=NO or take the default), the control program loads the module in subpool 244 or subpool 251, unless the following three conditions are true:
  • The module is reentrant
  • The library is authorized
  • You are not running under TSO/E test
In this case, the control program places the module in subpool 252. When choosing between subpools 244 and 251. the control program uses:
  • Subpool 244 only when within a task that was created by ATTACHX with the KEY=NINE parameter
  • Subpool 251in all other cases

Subpool 244 is not fetch protected and has a storage key equal to your PSW key. Subpool 251 is fetch protected and has a storage key equal to your PSW key. Subpool 252 is not fetch protected and has storage key 0.

When a program is in problem state, the control program brings the copy of the load module in subpool 251, with one exception. If the module is reentrant, the library is authorized, and you are not running under TSO TEST, the control program places the module in subpool 252.