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 run-time environment is initialized. There are three ways Language Environment-conforming assembler can pass control to an OS PL/I subroutine:
The condition-handling behavior of the LINK from assembler is now clearly defined. For detailed information, see z/OS Language Environment Programming Guide.