Skip to content

CMNBAT90 - Register Build Output Modules

CMNBAT90 creates transactions for CMNBATCH with information about build output PDS components. CMNBATCH processes these transactions to register the generated components in the package master. CMNBAT90 is included in build procedures for stage, recompile, and relink.

Note

CMNBAT90 is not used in build procedures for components stored in zFS directories.

If a build output PDS component is a true load module created by the binder (link edit), CMNBAT90 collects additional information for CMNBATCH transactions:

  • Subprogram-to-load relationships imbedded in statically linked composite load modules

  • Information about statically linked subprograms that were not created in this build process

CMNBAT90 has two methods for analyzing the structure of a composite load module:

  • Scan the SYSPRINT listing from the binder - This is the default method and the most accurate. The binder must be executed with the MAP and LIST options to generate binder listing information that is required for CMNBAT90.

  • Scan the members in the load library output from the binder. - This is a legacy method, which works well in many cases. However, the binder listing scan method was added because of exceptions discussed in CMNBAT90 Notes.

Unless otherwise indicated by the BINDLIST= execution parameter, CMNBAT90 attempts to use the binder listing scan to analyze the structure of load modules. If this method is not successful, CMNBAT90 automatically changes to the load library scan. Either method can be forced with the BINDLIST= execution parameter.

CMNBAT90 Input

  • Program execution parameters

  • Keyword SYSIN statements

  • Binder listing

  • Load library concatenation matching the SYSLIB concatenation in the binder step

  • Library containing build output components

Output

  • Transactions for program CMNBATCH

  • List of the input keyword statements

  • Program messages

...

Sample JCL

This build job JCL fragment, which was file tailored from skeleton CMN$$PDB, shows a CMNBAT90 step that creates CMNBATCH transactions to register a DBRM in the package master.

//BT90DBR   EXEC    PGM=CMNBAT90, *** RECORD DBR NAMES
//                  COND=(4,LT),
//                  PARM='BINDLIST=XLMOD'
//SYSPRINT  DD  DISP=(,PASS),DSN=&&LIST21D1,
//              UNIT=SYSDA,SPACE=(CYL,(5,5),RLSE),
//              DCB=(RECFM=FBM,LRECL=133,BLKSIZE=0)
//BAT90IN   DD  DISP=(OLD,PASS),DSN=&&DBRMLIB
//BAT90OUT  DD  DISP=(MOD,PASS),DSN=&&BAT90CTL,
//              UNIT=SYSDA,SPACE=(CYL,(2,1)),
//              DCB=(RECFM=FB,LRECL=80,BLKSIZE=0)
//SYSIN DD *
PKG=ACTP000041
SLT=SRC
SNM=ACPSRCD1
SID=USER015
SSI=67B2BC9B
LNG=COBOL2
PRC=CMNCOB2
LLT=DBR
SUP=YES
//SYSUDUMP  DD  SYSOUT=*
//ABNLIGNR  DD  DUMMY

...

This build job JCL fragment, which was file tailored from skeleton CMN$$LNK, shows a CMNBAT90 step that creates CMNBATCH transactions to register a composite load module in the package master.

//BT90LOD   EXEC    PGM=CMNBAT90, *** RECORD LOD NAMES
//                  COND=(4,LT)
//SYSPRINT  DD  DISP=(,PASS),DSN=&&LIST51L1,
//              UNIT=SYSDA,SPACE=(CYL,(5,5),RLSE),
//              DCB=(RECFM=FBM,LRECL=133,BLKSIZE=0)
//BAT90IN   DD  DISP=(OLD,PASS),DSN=&&LOAD
//BAT90OUT  DD  DISP=(MOD,PASS),DSN=&&BAT90CTL,
//              UNIT=SYSDA,SPACE=(CYL,(2,1)),
//              DCB=(RECFM=FB,LRECL=80,BLKSIZE=0)
//BAT90LST  DD  DISP=(OLD,PASS),DSN=&&LIST50L1
//BAT90WRK  DD  DISP=(,DELETE),DSN=&&BAT90WRK,
//              UNIT=SYSDA,SPACE=(CYL,(5,5),RLSE),
//              DCB=(RECFM=FBA,LRECL=121,BLKSIZE=0)
//*)IM CMN$$SYL
//BAT90LIB  DD  DISP=SHR,DSN=CMNTP.S6.ACTP.STG6.#000038.LOD
//          DD  DISP=SHR,DSN=CMNTP.S6.V810.PROM.S6P1IT.LOD
//          DD  DISP=SHR,DSN=CMNTP.S6.V810.BASE.ACTP.OBJ
//          DD  DISP=SHR,DSN=CMNTP.S6.V810.BASE.ACTP.LOS
//          DD  DISP=SHR,DSN=CMNTP.S6.V810.BASE.ACTP.LOD
//          DD  DISP=SHR,DSN=CEE.SCEELKED
//*)IM CMN$$SYL END
//* ADDITIONAL SYSIN CONTROL CARDS BELOW COME FROM IMBED OF CMN$$ILC
//SYSIN     DD  *
PKG=ACTP000038
SLT=LOS
SNM=ACPSRS00
SID=USER015
SSI=67BCF0C2
LNG=COBOL2
PRC=CMNCOB2
RLK=YES
SUP=NO
LLT=LODSLB=ACTPLODCMNTP.S6.ACTP.STG6.#000038.LOD
SLB=ACTPLODCMNTP.S6.V810.PROM.S6P1IT.LOD
SLB=ACTPOBJCMNTP.S6.V810.BASE.ACTP.OBJ
SLB=ACTPLOSCMNTP.S6.V810.BASE.ACTP.LOS
SLB=ACTPLODCMNTP.S6.V810.BASE.ACTP.LOD
ILB=ACTPLOSCMNTP.S6.V810.BASE.ACTP.LOS
//SYSUDUMP  DD  SYSOUT=*
//ABNLIGNR  DD  DUMMY

...

DD Statements

This table describes DD statements for CMNBAT90.

DDNAME I/O Purpose
SYSIN Input 80-byte keyword statements with information for the CMNBATCH transactions
BAT90IN Input Library containing the build output components to be registered in the package master.
BAT90WRK I/O Temporary CMNBAT90 work data set
BAT90LST Input SYSPRINT list from the binder step
Note: BAT90LST is only required for the binder listing scan method of analyzing load modules.
BAT90LIB Input Load library concatenation that matches the SYSLIB concatenation in the binder step
Note: BAT90LIB is only required for the load module scan method of analyzing load modules. CMNBAT90 searches this library concatenation to determine the library where each statically linked subprogram originated.
BAT90OUT Output Transaction records for input to CMNBATCH
SYSPRINT Output List of SYSIN keyword statements, program messages

...

Program Execution Parameters

The PARM= statement is not required for program CMNBAT90. The following execution parameters may be used with program CMNBAT90.

Parameter: BINDLIST=

Use: Optional

Description

Force the behavior of CMNBAT90 for analyzing build output for statically linked subprograms.

Valid values:

XLMOD: Suppress load module analysis. Use this option when the build output members at DDname BAT90IN are either non-load modules, or load modules that cannot contain statically linked subprograms, like BMS MAP load or IMS MFS load. Abbreviation: X

YES: Scan the binder listing at the BAT90LST DD statement for statically linked subprograms.

NO: Scan every load module in the library at the BAT90IN DD statement for statically linked subprograms.

If the BINDLIST execution parameter is omitted, then CMNBAT90:

  1. Assumes that the library at DDname BAT90IN contains load modules that may contain statically linked subprograms.

  2. Opens DDname BAT90LST to scan the binder listing for statically linked subprograms. If that fails, CMNBAT90, Scans load modules in the library at DDname BAT90IN for statically linked subprograms.

SYSIN Keyword Statements

CMNBAT90 keyword statements are input to the program through the SYSIN ddname. Format rules include:

  • Keyword options must start in position 1

  • Comment records are designated by * in position 1

  • Blank SYSIN records are permitted

This table describes the keyword statements for CMNBAT90.

Option Use Description
* in position 1 Optional Comment.
PKG= Required Package name (10 characters)
SLT= Required Input library type (like-source library type for stage and recompile, like-NCAL library type for relink)
SNM= Required Input member name (like-source member name for stage and recompile, link edit control member name for relink)
SID= Required Stage user’s userid
SSI= Required SETSSI for the new load module
LNG= Required Language name
PRC= Required Compile procedure
RLK= Optional RLK=YES indicates that the build is a recompile or relink. Omitting this keyword indicates that the build is a stage job.
SUP= Optional YES Suppress the component activation messages issued by a stage job.
NO Issue a component activation messages from a stage job. Value is always NO for recompile or relink.
LLT= Required Target load library type
SLB= Required Binder SYSLIB library data set information. The data for this keyword is a string of made up of the following:
Char  Data
4  Application
3  Library type
44  Data set name
8  ERO origin of this library - Values:
 Staging: Package staging library
 Baseline: Application baseline library
 Current: ERO current release
 Prior ERO prior release
8  ERO Release
8  ERO release area
Note: SLB keyword statements are created by skeleton CMN$$ILC using the same ISPF tables and selection logic as CMN$$SYL uses to create the SYSLIB library concatenation for the binder and for CMNBAT90. If you customize CMN$$SYL, then you must customize skeleton CMN$$ILC in a parallel manner.
ILB= Required Binder INCLIB library data set information. The data for this keyword is a string of made up of the following:
Char  Data
4  Application
3  Library type
44  Data set name
8  ERO origin of this library - Values:
 Staging: Package staging library
 Baseline: Application baseline library
 Current: ERO current release
 Prior ERO prior release
8  ERO Release
8  ERO release area
Note: ILB keyword statements are created by skeleton CMN$$ILC using the same ISPF tables and selection logic as CMN$$ILL uses to create the INCLIB library concatenation for the binder. If you customize CMN$$ILL, then you must customize CMN$$ILC in a parallel manner.

...

Return Codes and Error Messages

This table describes program return codes for CMNBAT90.

Return Code Description
0 Successful execution
4 CMNBAT90 finished, but the scan method was changed or the relationship analysis was incomplete; see messages at the SYSPRINT DD statement.
8 CMNBAT90 failed; see messages at the SYSPRINT DD statement.
12 System error; see messages

...

Note

CMNBAT90 always sets RC=4 for build output components that were not created by the binder. For these components, execution parameter BINDLIST=NO suppresses message CMN4574A but not message CMN4575A.

Program messages are documented in the ChangeMan ZMF Messages manual.

Reporting

Program CMNBAT90 lists input keyword statements in a report at the SYSPRINT DD statement. This is an example of the report.

ChangeMan(R) ZMF CMNBATCH - 8.1.0 2015/02/24 22:21:07
Attempting to initiate dialog with ChangeMan ZMF subtask
Session established with ChangeMan ZMF subtask
SYSIN: ACTP000038 90 RTP=ILOD
SYSIN: ACTP000038 90 SLT=LOS
SYSIN: ACTP000038 90 SNM=ACPSRS00
SYSIN: ACTP000038 90 SID=USER015
SYSIN: ACTP000038 90 SSI=67BCF0C2
SYSIN: ACTP000038 90 LNG=COBOL2
SYSIN: ACTP000038 90 PRC=CMNCOB2
SYSIN: ACTP000038 90 RLK=Y
SYSIN: ACTP000038 90 LLT=LST
SYSIN: ACTP000038 90 LNM=ACPSRS00
Component ACPSRS00 is in ACTIVE status and the package master
LOAD record has been updated accordingly.                   ACTP000038
LOAD COMPONENT ACTIVATED.                                   ACTP000038
LOAD COMPONENT ACTIVATION LOGGED.                           ACTP000038
HISTORY RECORD has been updated accordingly.                ACTP000038
SYSIN: ACTP000038 90 CID=
END OF DATA ON SYSIN - TERMINATING
Session terminated with ChangeMan ZMF started task

...

CMNBAT90 Notes

  1. Best results are obtained when CMNBAT90 can scan the binder listing to obtain the name of the library that provided each statically linked subprogram. This is the default behavior of CMNBAT90.

  2. The binder must be run with options LIST and MAP for the binder listing to display the information needed by CMNBAT90. If binder options LIST and MAP, are not used, CMNBAT90 displays message CMN4581A in SYSPRINT, the step return code is set to RC=4, and the load module scan is performed instead of the binder listing scan.

  3. When CMNBAT90 must analyze a load module to obtain information about statically linked subprograms, that information will be incomplete if any of the following are true:

    • The library concatenation at the BAT90LIB DD statement does not exactly match the concatenation at the SYSLIB DD statement in the binder step.

    • INCLUDE link edit control statements are used to statically link application object modules or load modules from libraries that are not in the concatenation at the BAT90LIB DD statement. Example:

      INCLUDE INCLIB(subpgm1)

      INCLUDE PRODLIB(subpgm2)

    • The contents of multiple load libraries are combined using a skeleton like CMN$$XPL to get around the limit of 128 extents in the binder SYSLIB DD statement.

  4. There must be an SLB= or ILB= SYSIN keyword statement for each ZMF managed library in the link edit SYSLIB and INCLIB concatenations. If you use INCLUDE link edit control statements that reference a different DDname, you must add an ILB= keyword statement for each ZMF managed library in the concatenation under that DDname. See SLB and ILB Keyword Statements below.

  5. Statically linked PL/I subprograms are discovered more accurately using BINDLIST=YES. Specifically, PL/I subprograms that have not been cycled through ZMF and do not have ChangeMan ZMF format IDR data will be recognized successfully only if you use BINDLIST=YES.

  6. CMNBAT90 is not used to create CMNBATCH transactions for compressed listings created in build jobs. CMNBATCH transactions for LST components are generated in file tailoring for skeleton CMN$$PCP.

SLB and ILB Keyword Statements

To correctly build CMNBATCH transactions for package master relationship records, CMNBAT90 must find the application and library type for each statically linked subprogram that the binder (linkage editor) obtains from a ZMF managed library.

CMNBAT90 uses the following process to get the application and library type for statically linked subprograms.

  1. Skeleton CMN$$ILC constructs SLB= and ILB= keyword statements for input to CMNBAT90. These records contain a library name and the corresponding application and library type. See "SLB=" and "ILB=" in the SYSIN Keyword Statements table for the record formats.

    • For every ZMF managed library in the link edit SYSLIB concatenation, CMN$$ILC constructs an SLB= statement. The CMN$$ILC logic that builds SLB= statements is the same as the logic in CMN$$SYC that builds the SYSLIB concatenation.

    • For every ZMF managed library in the link edit INCLIB concatenation for relink, CMN$$ILC constructs an ILB= statement. See INCLIB and CMNSSIDN for information about INCLIB. The CMN$$ILC logic that builds ILB= statements is the same as the logic in CMN$$ILL that builds the INCLIB concatenation.

  2. CMNBAT90 finds the name of the library that provided each statically linked subprogram to the linkage editor by either:

    • Analyzing the binder listing (preferred), or by...

    • Searching the library concatenation at the BAT90LIB DD statement, which is built by skeleton CMN$$SYL and should mirror the SYSLIB concatenation in the link edit step.

  3. CMNBAT90 uses the name of the library where a statically linked subprogram originated to get the application and library type for the subprogram from SLB= and ILB= information.

Important

  • If you customize the concatenation of ZMF managed libraries in the SYSLIB DD statement, either by customizing skeleton CMN$$SYL logic or by hard coding ZMF libraries, you must customize CMN$$ILC in the same manner.

  • If you customize the concatenation of ZMF managed libraries in the INCLIB DD statement for relink, either by customizing skeleton CMN$$ILL logic or by hard coding ZMF libraries, you must customize CMN$$ILC in the same manner.

  • If your link edit control statements refer to other DD names, you must manually code an ILB= statement for each library concatenated at that DD statement. Example:
    INCLUDE ACTRLIB(ACRSCN00)
    //ACTRLIB DD DISP=SHR,DSN=CMNTP.S4.V711.BASE.ACTR.LCN
    ILB=ACTRLCNCMNTP.S4.V711.BASE.ACTR.LCN

CMNBAT90 Example - Composite Load Module

The example in this section shows input and output for CMNBAT90 from a relink job for composite load module ACPSRC50 that contains statically linked subprograms ACPSRS5A, ACPSRS5B, ACPSRS5C, and ACPSRS00.

Binder and CMNBAT90 JCL

This JCL fragment shows job steps for the binder and for CMNBAT90 that were file tailored from ISPF skeleton CMN$$LNK. Notice the temporary files for the binder listing and the library containing the link edited load module that are passed from the binder to CMNBAT90. This JCL fragment also shows matching libraries in:

  • Load library concatenation at the SYSLIB DD statement for the binder at the LINK step

  • Load library concatenation at the BAT90LIB DD statement for CMNBAT90

  • SLB= keyword statements in the SYSIN DD statement for CMNBAT90 In the same way, INCLIB concatenations match ILB keyword statements.

//LNK   EXEC    PGM=IEWL, *** LINK-EDIT COMPONENT ACPSRS00
//              COND=(4,LT),
//              PARM=('LIST,XREF,MAP,RENT',
//              'COMPRESS=NO',
//              '')
//SYSPRINT  DD  DISP=(,PASS),DSN=&&LIST50L1,
//              UNIT=SYSDA,SPACE=(CYL,(5,5),RLSE),
//              DCB=(RECFM=FBA,LRECL=121,BLKSIZE=0)
//SYSUT1    DD  UNIT=SYSDA,SPACE=(CYL,(5,5))
//*)IM CMN$$OBL
//*)IM CMN$$SYL
//SYSLIB    DD  DISP=SHR,DSN=CMNTP.S6.ACTP.STG6.#000038.LOD
//          DD  DISP=SHR,DSN=CMNTP.S6.V810.PROM.S6P1IT.LOD
//          DD  DISP=SHR,DSN=CMNTP.S6.V810.BASE.ACTP.OBJ
//          DD  DISP=SHR,DSN=CMNTP.S6.V810.BASE.ACTP.LOS
//          DD  DISP=SHR,DSN=CMNTP.S6.V810.BASE.ACTP.LOD
//          DD  DISP=SHR,DSN=CEE.SCEELKED
//*)IM CMN$$SYL END
//*)IM CMN$$ILL
//INCLIB    DD  DISP=SHR,DSN=CMNTP.S6.V810.BASE.ACTP.LOS
//SYSLMOD   DD  DISP=(OLD,PASS),DSN=&&LOAD
//SYSLIN    DD  DISP=(OLD,DELETE),DSN=&&NULLIN
//          DD  DISP=(OLD,PASS),DSN=&&LCT
//*)IM CMN$$CND
//*
//BT90LOD  EXEC PGM=CMNBAT90, *** RECORD LOD NAMES
//              COND=(4,LT)

...

//SYSPRINT  DD  DISP=(,PASS),DSN=&&LIST51L1,
// UNIT=SYSDA,SPACE=(CYL,(5,5),RLSE),
// DCB=(RECFM=FBM,LRECL=133,BLKSIZE=0)
//BAT90IN   DD  DISP=(OLD,PASS),DSN=&&LOAD
//BAT90OUT  DD  DISP=(MOD,PASS),DSN=&&BAT90CTL,
//              UNIT=SYSDA,SPACE=(CYL,(2,1)),
//              DCB=(RECFM=FB,LRECL=80,BLKSIZE=0)
//BAT90LST  DD  DISP=(OLD,PASS),DSN=&&LIST50L1
//BAT90WRK  DD  DISP=(,DELETE),DSN=&&BAT90WRK,
//              UNIT=SYSDA,SPACE=(CYL,(5,5),RLSE),
//              DCB=(RECFM=FBA,LRECL=121,BLKSIZE=0)
//*)IM CMN$$SYL
//BAT90LIB  DD  DISP=SHR,DSN=CMNTP.S6.ACTP.STG6.#000038.LOD
//          DD  DISP=SHR,DSN=CMNTP.S6.V810.PROM.S6P1IT.LOD
//          DD  DISP=SHR,DSN=CMNTP.S6.V810.BASE.ACTP.OBJ
//          DD  DISP=SHR,DSN=CMNTP.S6.V810.BASE.ACTP.LOS
//          DD  DISP=SHR,DSN=CMNTP.S6.V810.BASE.ACTP.LOD
//          DD  DISP=SHR,DSN=CEE.SCEELKED
//*)IM CMN$$SYL END
//* ADDITIONAL SYSIN CONTROL CARDS BELOW COME FROM IMBED OF CMN$$ILC
//SYSIN     DD  *
PKG=ACTP000038
SLT=LOS
SNM=ACPSRS00
SID=USER015
SSI=67BCF0C2
LNG=COBOL2
PRC=CMNCOB2
RLK=YES
SUP=NO
LLT=LOD
SLB=ACTPLODCMNTP.S6.ACTP.STG6.#000038.LOD
SLB=ACTPLODCMNTP.S6.V810.PROM.S6P1IT.LOD
SLB=ACTPOBJCMNTP.S6.V810.BASE.ACTP.OBJ
SLB=ACTPLOSCMNTP.S6.V810.BASE.ACTP.LOS
SLB=ACTPLODCMNTP.S6.V810.BASE.ACTP.LOD
ILB=ACTPLOSCMNTP.S6.V810.BASE.ACTP.LOS
//SYSUDUMP  DD  SYSOUT=*
//ABNLIGNR  DD  DUMMY
//*)IM CMN$$CND
//*)IM CMN$$PAS
//CPYLOD   EXEC PGM=SERCOPY, *** COPY TO LOD STAGING LIB
//              REGION=3M,
//              COND=(4,LT),
//              PARM=('RETRY,REALLOC',
//              'OUTDSN(CMNTP.S6.ACTP.STG6.#000038.LOD)')
//SYSPRINT  DD  DISP=(,PASS),DSN=&&LIST1001,
//              UNIT=SYSDA,SPACE=(CYL,(5,5),RLSE),
//              DCB=(RECFM=FBM,LRECL=121,BLKSIZE=0)
//SYSUT1    DD  DISP=(OLD,DELETE),DSN=&&LOAD
//SYSUDUMP  DD  SYSOUT=*
//ABNLIGNR  DD  DUMMY

...

SYSPRINT Report of Keyword Input

This is an extract from the compressed listing for the relink job showing the SYSPRINT report of CMNBAT90 keyword input.

********************************************************************************
* DDNAME: BT90LOD.SYSPRINT *
********************************************************************************
ChangeMan(R) ZMF CMNBAT90 - 8.1.0 TUESDAY FEBRUARY 24, 2015 22:21:02
SYSIN: PKG=ACTP000038
SYSIN: SLT=LOS
SYSIN: SNM=ACPSRS00
SYSIN: SID=USER015
SYSIN: SSI=67BCF0C2
SYSIN: LNG=COBOL2
SYSIN: PRC=CMNCOB2
SYSIN: RLK=YES
SYSIN: SUP=NO
SYSIN: LLT=LOD
SYSIN: SLB=ACTPLODCMNTP.S6.ACTP.STG6.#000038.LOD
SYSIN: SLB=ACTPLODCMNTP.S6.V810.PROM.S6P1IT.LOD
SYSIN: SLB=ACTPOBJCMNTP.S6.V810.BASE.ACTP.OBJ
SYSIN: SLB=ACTPLOSCMNTP.S6.V810.BASE.ACTP.LOS
SYSIN: SLB=ACTPLODCMNTP.S6.V810.BASE.ACTP.LOD
SYSIN: ILB=ACTPLOSCMNTP.S6.V810.BASE.ACTP.LOS
CMN5400I - Time of day at end of job: 22:21:03 - Condition Code on exit: 00

...

IEBGENER of Transactions for CMNBATCH

This is a listing of the component registration transactions created by CMNBAT90 for processing by CMNBATCH. Hex values display as blanks here, but notice the CID= transactions that provide information about subprogram load modules that were not created in this relink job. This information is recorded in subprogram-to-load relationship records in the package master.

ACTP ! RTP=ILOD
ACTP ! SLT=LOS
ACTP ! SNM=ACPSRC50
ACTP ! SID=USER239
ACTP ! SSI=5F4E19A9
ACTP ! PRC=CMNCOB2
ACTP ! RLK=YES
ACTP ! LLT=LOD
ACTP ! SUP=NO
ACTP ! LNM=ACPSRC50
ACTP ! CID=ACPSRS5A 5F0EF2BC ACTP000034 ACTP LOS I
ACTP ! CID=ACPSRS5B 5F0EEC33 ACTP000031 ACTP LOS I
ACTP ! CID=ACPSRS5C 5F0EEC32 ACTP000031 ACTP LOS I
ACTP ! CID=ACPSRS00 5F0EEC28 ACTP000031 ACTP LOS I
ACTP ! CID=

...