When you migrate from earlier Language Environment releases to Language Environment for z/OS, you need to be aware of a change to the RMODE of the COBOL dynamic call routine IGZCFCC. The change to the RMODE for IGZCFCC might cause problems if a dynamically called assembler program returns in a different AMODE from the AMODE in which it was entered. IGZCFCC is used only by COBOL programs that were compiled with COBOL for MVS & VM, Release 2 or later. IGZCFCC is not used by programs that were compiled with the VS COBOL II or OS/VS COBOL compilers.
Beginning in z/OS Language Environment, Version 1 Release 2, IGZCFCC was changed from RMODE 24 to RMODE 31 and incorporated into the IGZCPAC load module, which resides above the line. When a dynamic call is made to an AMODE 31 program, the return address is to IGZCFCC.
In Language Environment releases prior to z/OS, Version 1 Release 2, an assembler program that was entered in AMODE 31 could change the AMODE to 24 and still return successfully to IGZCFCC because it was loaded below the line. With IGZCFCC residing above the line in Language Environment for z/OS, Version 1 Release 2 and later, this no longer works. If an assembler program is entered in AMODE 31, switches to AMODE 24 and then does a load and branch to return to its caller, the high-order byte of the 31-bit return address can be truncated, resulting in a bad branch, ABEND0C4, ABEND0C1, and so forth.