Application Delivery Foundation for z/OS
You can use Application Delivery Foundation for z/OS® (ADFz) on ABO generated modules.
Find out more about Application Delivery Foundation for z/OS at https://www.ibm.com//products/app-delivery-foundation-for-zos.
The following Application Delivery Foundation for z/OS family of problem determination tools can be used on ABO generated COBOL modules:- Developer for z/OS Enterprise Edition, which includes IBM® Debug for z/OS
- Fault Analyzer for z/OS (FA)
- Application Performance Analyzer for z/OS (APA)
Creating a LANGX side file
For ABO optimized programs originally compiled with COBOL 4 and earlier releases, you need to produce a LANGX side file for each optimized program to use with the ADFz tools. IBM Debug for z/OS, FA, and APA use the LANGX side file to provide a better experience for users. For example, source-level debugging is provided with Debug for z/OS when a LANGX side file is provided. Without this LANGX side file, source-level debugging is not possible.
IPVLANGO is a tool provided with IBM Problem Determination Tools Common Component for z/OS V1.7, which is shared by the Application Delivery Foundation for z/OS tools. IPVLANGO combines the SYSDEBUG data set or compiler listing or the LANGX side file of the original compiled program along with the ABO listing transform to produce a new LANGX side file appropriate for the ABO generated module. Use the new LANGX file when you use DT, FA, or APA on the ABO generated module.Producing DWARF diagnostic information
For modules compiled with COBOL 5 and later releases, the LANGX side file is not necessary. Instead, for modules that were compiled with TEST or with NOTEST(DWARF), ABO will itself produce the updated DWARF diagnostic information for the optimized module either within the module itself (NOSEPARATE) or within a separate side file (SEPARATE).
For TEST(NOSEPARATE), no further configuration of ABO is required. When ABO optimizes the module, it will also update the DWARF information within the optimized module to be applicable to that module.
For TEST(SEPARATE), the OPTDEBUG DD is specified to determine where the updated DWARF side files will be written.
//OPT EXEC PGM=BOZOPT,REGION=0M
...
//OPTDEBUG DD DSN=updated-dwarf-library,DISP=SHR
//OPT EXEC PGM=BOZOPT,REGION=0M
...
//OPTDEBUG DD DSN=updated-dwarf-library,DISP=SHR
//SYSDEBUG DD DSN=original-dwarf-library,DISP=SHR
Under the above options, the optimized module will appear to have been compiled with the TEST options of the original module. However, if for any reason ABO determines that it cannot generate valid DWARF the optimized module will still be generated, but it will appear to have been compiled with NOTEST(NODWARF). In this case one or more warning (return code 4) messages will issued and the updated DWARF information will not be generated. Note that under TEST(NOSEPARATE) the original DWARF will remain in the optimized module but will not be used by the ADFz tools.
Under TEST(SEPARATE) it is possible if required to bypass the generation of updated DWARF; if the OPTDEBUG DD is not specified, then ABO will behave as though it cannot generate valid DWARF, but in this case, no warning messages are shown, and normal optimization will proceed at return code 0.
Input DWARF Type |
Output DWARF (OPTDEBUG DD)
|
Output DWARF Type (OPTDEBUG DD)
|
Sequential Dataset | DD:OPTDEBUG(csect1). | PDS or PDSE directory |
PDS or PDSE member | DD:OPTDEBUG(member) where member is the member of the input DWARF. | |
HFS file | DD:OPTDEBUG(csect1). |
Input DWARF Type of
SYSDEBUG DD |
Valid or not
|
Input DWARF
(SYSDEBUG DD) |
Output DWARF
(OPTDEBUG DD) |
Output DWARF Type
(OPTDEBUG DD) |
Sequential Dataset
|
Not valid
|
N/A
|
N/A
|
N/A
|
PDS or PDSE directory
|
Valid
|
DD:SYSDEBUG(name3)
|
DD:OPTDEBUG(name3)
|
PDS or PDSE directory
|
HFS
|
Not valid
|
N/A
|
N/A
|
N/A
|
- csect is the csect name. When csect is used as the member of a PDS or PDSE directory, then it is upper cased and truncated to 8 characters, as per the SYSPRINT DD or LIST options.
- This emulates behaviour under the sample user exit IGZIUXB/IGZIUXC.
- name is:
- csect if debugFileName is empty;
- the member name of debugFileName if debugFileName is a PDS or PDSE member;
- invalid otherwise
where debugFileName is empty under NODSNAME or it is the the dataset name that was stored into original module under DSNAME.
For logical record length and block size of datasets in OPTDEBUG and SYSDEBUG other than HFS files, see Logical record length and block size in the Enterprise COBOL for z/OS Programming Guide.