Changes in compiling with Enterprise COBOL 6

z/OS MEMLIMIT changes

In Enterprise COBOL V6, the compiler starts using storage beyond the 2 GB BAR to compile programs, even those that are not huge. This means that the z/OS® MEMLIMIT parameter would have to be set to a nonzero value. The z/OS default for MEMLIMIT is 2 GB, but if you compile a program and your z/OS setting for MEMLIMIT is not high enough, you could get this compiler message: IGYCB7145-U Insufficient memory in the compiler to continue compilation. If you encounter this error message, set REGION=0M and MEMLIMIT=3G on the job card and recompile your programs. If it is successful, consider changing the system MEMLIMIT default that was set in IEFUSI, SMFPRMxx, or SMFLIMxx to no less than 2 GB.
Note: The SMFLIMxx PARMLIB member is only available in z/OS V2.2 and later versions.

Listing changes

  • Starting in Enterprise COBOL V6.1, the build level information (of the form PYYMMDD) is always included in the header of the listing file, which assists with determining the maintenance level of the compiler. Here is an example of the listing header:
    PP 5655-EC6 IBM Enterprise COBOL for z/OS 6.4.0 PXXXXXX

    In Enterprise COBOL V5 and V6.1, the diagnostic messages are in the middle of the listing. In Enterprise COBOL V6.2 and later versions, the diagnostic messages are at the bottom of the listing as with Enterprise COBOL V4 and earlier compilers.

  • Starting in Enterprise COBOL 6.3, listing terminologies change as follows:
    • STATIC MAP in Enterprise COBOL 6.2 and earlier versions is changed to INITIAL HEAP STORAGE MAP.
    • Writeable static area (WSA) in Enterprise COBOL 6.2 and earlier versions is changed to storage.
    • WSA24 in Enterprise COBOL 6.2 and earlier versions is changed to BELOW THE LINE STORAGE.
    • AUTOMATIC MAP in Enterprise COBOL 6.2 and earlier versions is changed to STACK STORAGE MAP.

JCL changes

To change to uppercase English or Japanese compiler messages in COBOL 6, in addition to using the LANGUAGE compiler option, you must also set the Language Environment® runtime option NATLANG at compile time. We recommend using CEEOPTS DD in the compile JCL.

For example, to change messages to Japanese, use the LANGUAGE(JA) compiler option and also specify the NATLANG LE runtime option at compile time:
//CEEOPTS DD * 
          NATLANG(JPN)
/*

Starting in Enterprise COBOL 6.3, new cataloged procedures for doing compilation have been provided to help developing COBOL AMODE 64 (64-bit) programs. The AMODE 64 support is a new feature introduced to Enterprise COBOL 6.3. See Developing AMODE 64 programs (Enterprise COBOL for z/OS Programming Guide) for details about AMODE 64 support.

Compiler phases in shared storage changes

Starting in Enterprise COBOL 6.3, the installation customization for placing compiler phases into shared storage is removed, since in modern systems most users have lots of storage available, and do not need to conserve storage by placing compiler phases in shared storage. As a result of this change to the compiler, the language for placing compiler phases in shared storage is no longer supported, so if you have a saved copy of the IGYCDOPT customization that has a specification of compiler phases being IN or OUT of shared storage, that language must be removed before you can assemble IGYCDOPT. If you do not have any statements in IGYCDOPT that specify IN or OUT for compiler phases, then you will not be affected by this change.

Use of file-name in CALL ... USING statement

The use of passing a file-name to a subprogram with the USING phrase of the CALL statement was removed in Enterprise COBOL 6.3, but is restored in Enterprise COBOL 6.3 with PTF for APAR PH20724 installed.

SMARTBIN changes

Starting in Enterprise COBOL 6.4, the SMARTBIN option is on by default when LP(32) is in effect. SMARTBIN instructs the compiler to generate modules containing additional binary metadata that enables them to be optimized by IBM® Automatic Binary Optimizer (ABO) for z/OS (ABO) 2.2. When SMARTBIN is in effect, the additional binary metadata is placed in a NOLOAD segment of the module. To generate the SMARTBIN metadata, compile times may increase by up to 21% at OPT(0) and 2-3% at OPT(1) and OPT(2) on an IBM z15® (or later) machine with zEnterprise Data Compression (zEDC) enabled (hardware compression turned on). This is in comparison to an increase of up to 33% at OPT(0) and 10% at OPT(1) and OPT(2) on an IBM z15™ (or later) machine without zEDC enabled (hardware compression turned off). The additional metadata will also increase the size of the module on disk, requiring larger load libraries, but will not increase the size in memory when the program is running since it is not loaded. The size increase on disk will be approximately 2 times to 3 times the size of the original binary.

You can change the option to NOSMARTBIN, however, without the additional binary metadata, COBOL modules built with Enterprise COBOL 6.4 will be ineligible for ABO optimization and you would need to recompile and test your modules in the future to maximize benefit from IBM Z® hardware improvements. If you use ABO or plan to in the future, the SMARTBIN option is recommended.

Refer to the IBM Automatic Binary Optimizer for z/OS product page for additional information on ABO benefits.

Related references
SMARTBIN (Enterprise COBOL for z/OS Programming Guide)

Usability enhancement

Starting in Enterprise COBOL 6.4 with PTF for APAR PH56142 installed, when compiling under z/OS UNIX, you can use the cob2 -M option to generate a make dependency file, file.u. This file contains entries for each copybook file that resides in a z/OS UNIX file system and is referenced in your COBOL source file.

Related references
cob2 syntax and options (Enterprise COBOL for z/OS Programming Guide)
cob2 input and output files (Enterprise COBOL for z/OS Programming Guide)