Differences in assembler support

With Language Environment, assembler programs that call a PL/I routine must follow the calling conventions defined by Language Environment (for example, Register 13 pointing to a save area, save areas properly back-chained, and the first word of the save area being zero).

For detailed information, see the z/OS Language Environment Programming Guide.

If your OS PL/I main program is called by an assembler program and you want to convert your assembler program to use Language Environment-conforming assembler, you must either recompile your OS PL/I program without OPTIONS(MAIN), or ensure the entry point receiving control is the real entry point of the PL/I program. In either case, the called PL/I program is treated as a subroutine. Either of these programs run under the same Language Environment enclave, where the assembler program is the main program and the called PL/I program is a subroutine.

Your Language Environment-conforming assembler main program must explicitly include the Language Environment-PL/I for MVS & VM signature CSECT, CEESG010, when calling an OS PL/I subroutine to ensure the Language Environment-PL/I-specific runtime environment is initialized. There are three ways Language Environment-conforming assembler can pass control to an OS PL/I subroutine:

  1. Branch to a statically linked PL/I subroutine.
  2. Use the Language Environment macro CEELOAD and branch to a separately linked PL/I subroutine.
  3. Use assembler instructions such as LOAD and BALR to a separately linked PL/I subroutine.

The condition-handling behavior of the LINK from assembler is now clearly defined. For detailed information, see the z/OS Language Environment Programming Guide.

Assembler programs that find the main parameter list

Assembler programs called from PL/I that use the save area back chain to find the parameter list passed to the PL/I main program will no longer work when running on Language Environment. This is because the number of save areas between the assembler program and the save area of the program that invoked the PL/I main program has changed.

Assembler programs that need to find the parameter list passed to the PL/I main program can use the CEEEDB_R13_PARENT field in the Language Environment EDB to obtain the save area address of the program that invoked the PL/I main program.