CMNSSIDN - LINK EDIT Control Preparation
Program CMNSSIDN prepares link edit control statements for the link edit step in stage, recompile, and relink.
If there are no link edit control statements for the object or load being processed, program CMNSSIDN fabricates the necessary statements and passes them to the subsequent link edit step. The fabricated link edit control statement are not kept after the link edit step.
If you provide link edit control statements in a package staging library or in a baseline member, CMNSSIDN processes those control statement, sometimes modifying them, and passes them to the subsequent link edit step. The control statements in the staging or baseline member are not changed.
Note
File tailoring for skeleton CMN$$LNK may add INCLUDE statements for CICS language interface modules to the link edit control passed from program CMNSSIDN and input the SYSLIN ddname for the linkage editor.
Whether CMNSSIDN modifies existing link edit control statements, or how it fabricates control statements from scratch, is determined by:
-
Object created by previous compile or recompile processing.
-
CMNSSIDN program execution parameters included in the JCL when skeleton CMNSSIDN is file tailored.
-
CMNSSIDN program SYSIN keyword options included in the JCL when skeleton CMNSSIDN is file tailored.
CMNSSIDN Input
-
Object code in a sequential file from a compile step.
-
Link edit control statements from a dynamically allocated staging or baseline library.
-
Optional program execution parameters.
-
Keyword options read through SYSIN.
Output
Link edit control statements ready for a link edit step.
Sample JCL
This is a sample job fragment that illustrates what a CMNSSIDN step can look like. This JCL was created from skeleton CMN$$SSI by ISPF file tailoring.
//SSIDN EXEC PGM=CMNSSIDN, *** PROCESS LINK-EDIT CONTROL CARDS
// COND=(4,LT)
//SYSPRINT DD DISP=(,PASS),DSN=&&LIST40S1,
// UNIT=SYSDA,SPACE=(CYL,(5,5),RLSE),
// DCB=(RECFM=FA,LRECL=133,BLKSIZE=0)
//SYSUDUMP DD SYSOUT=*
//ABNLIGNR DD DUMMY
//OBJ DD DUMMY
//LCT DD DISP=(,PASS),DSN=&&LCT,
// UNIT=SYSDA,SPACE=(TRK,(1,5)),
// DCB=(RECFM=F,LRECL=80,BLKSIZE=0)
//STG DD DISP=(,PASS),DSN=&&NULLLCT,
// UNIT=SYSDA,SPACE=(TRK,(1,1,1),RLSE),
// DCB=(DSORG=PO,RECFM=FB,LRECL=80,BLKSIZE=0)
//SYSIN DD *
BAS=CMNTP.S6.V810.BASE.ACTP.LCT
LCT=ACPSRS00
SSI=67BCF0C2
PKG=ACTP000038
RLK=Y
UIL=Y
OPT=CALL
...
DD Statements
This table describes DD statements for CMNSSIDN.
DDNAME | I/O | Purpose |
---|---|---|
OBJ | Input | Sequential file containing object code from a compile step. This DD statement is omitted for relink. |
LCT | Output | Sequential file containing control statements for a linkage edit or binder step. |
STG | Input | Staging library for link edit control members. |
SYSIN | Input | File containing 80-byte keyword option records. |
SYSPRINT | Output | File that displays information from the execution of CMNSSIDN: See Reporting. |
...
Program Execution Parameters
The PARM= statement is not required in CMNSSIDN execution JCL. Any parameter that can be input though the program PARM= statement can be input through a SYSIN control statement using the OPT= keyword. If a parameter is input through both the PARM= statement and an OPT= SYSIN control statement, the SYSIN control statement takes precedence.
This table describes program parameters for program CMNSSIDN.
Parameter | Use | Description |
---|---|---|
CALL | Optional | Pass INCLUDE statements found in staging or baseline link edit control member to the output file at ddname LCT. Default: Omitting this parameter and the NCAL parameter is the same as coding CALL. |
NCAL | Optional | Do not pass INCLUDE statements found in staging or baseline link edit control member to the output file at ddname LCT. Default: Omitting this parameter and the CALL parameter is the same as coding CALL. |
NAME | Optional | Pass NAME statements found in staging or baseline link edit control member to the output file at ddname LCT. If no NAME statement is found in a stored link edit control member, or if there is no stored member, fabricate a NAME statement and write to ddname LCT. Default: Omitting this parameter and the NONAME parameter is the same as coding NAME. |
NONAME | Optional | Do not pass NAME statements found in staging or baseline link edit control members to the output file at ddname LCT. Suppress fabrication of NAME statement if no NAME statement is found in a stored link edit control member, or if there is no stored member. Default: Omitting this parameter and the NAME parameter is the same as coding NAME. |
DLITASM | Optional | Generate these link edit control statements and write to the output LCT file. INCLUDE SYSLIB(DFSLI000) ENTRY DLITASM |
DLITCBL | Optional | Generate these link edit control statements and write to the output LCT file. INCLUDE SYSLIB(DFSLI000) ENTRY DLITCBL |
DLITPLI | Optional | Generate these link edit control statements and write to the output LCT file. INCLUDE SYSLIB(DFSLI000) ENTRY DLITPLI |
OBJECT | Optional | Change object processing as follows: - Copy object code from ddname OBJ to ddname LCT. - Fabricate SETSSI and IDENTIFY statements and write to ddname LCT. - Copy any non-object from ddname OBJ to ddname LCT. Non-object in an object deck is usually a NAME link edit control statement generated by the Easytrieve compiler or by the COBOL compiler when the NAME option is used. Use the OBJECT parameter when staging or recompiling Easytrieve source or COBOL source when the NAME option of the COBOL compiler is used. |
...
SYSIN Control Statements
CMNSSIDN keyword options are input to the program through the SYSIN ddname.
-
Keyword options must start in position 1.
-
A SYSIN record should contain only one keyword option.
-
Blank SYSIN records are not permitted.
-
Comment records are designated by * in position 1.
This table describes keyword options input to CMNSSIDN through the SYSIN ddname.
Option | Use | Description |
---|---|---|
* in Position 1 |
Optional | Denotes a comment |
BAS=library | Required | Specifies a baseline library for link edit control members. |
CST=Y | Optional | Forces CMNSSIDN use the first CSECT name in the object |
LCT=member | Required | Specifies a link edit control member to input to program CMNSSIDN. Default: If you omit this control statement, the output load module name will be set to TEMPNAME. |
NID=csect | Optional | Suppresses generation of an IDENTIFY statement for the specified CSECT. Up to 64 NID= control statements can be input to CMNSSIDN. |
OPT=parameter | Optional | Inputs program execution parameters through the SYSIN ddname. Program execution parameters are described in "Program Execution Parameters." Example: OPT=NCAL Note: Each OPT= keyword specifies only one CMNSSIDN execution parameter, but there can be multiple OPT= keyword option records input to SYSIN. The following are functionally equivalent: PARM='NAME,CALL,OBJECT' ...and... //SYSIN DD * OPT=NAME OPT=CALL OPT=OBJECT |
PKG=packageID | Required | Specifies the package ID of the component being processed. The package ID is part of the ChangeMan ZMF fingerprint that CMNSSIDN creates for the IDENTIFY statement that is fabricated and written to ddname LCT. Default: If you omit this control statement, the package ID in the fingerprint is set to 10 spaces. |
RLK=Y | Optional | Indicates that there is no object input to CMNSSIDN. Default: The default for this option is RLK=N. |
RMB=csect | Optional | Indicates that package audit auto resolve has found a CSECT that must be replaced in the composite load module named in LCT=member. If there is no link edit control for LCT=member, then CMNSSIDN fabricates a REPLACE statement for the specified CSECT and writes the statement to ddname LCT. See INCLIB and CMNSSIDN. |
SSI=hexvalue | Required | Specifies the hexadecimal value in the SETSSI statement written to ddname LCT. This number is also included in the ChangeMan ZMF fingerprint in the IDENTIFY statement fabricated by CMNSSIDN and written to ddname LCT. Default: If you omit this control statement, the SETSSI in the fingerprint is set to zeros. |
UIL=Y | Optional | Indicates when CMNSSIDN fabricates a REPLACE link edit control statement, it will fabricate an INCLUDE INCLIB(member) rather than INCLUDE SYSLIB(member) and write it to ddname LCT. See INCLIB and CMNSSIDN. Default: The default for this option is UIL=N. |
...
INCLIB and CMNSSIDN
Skeleton CMN$$ILL builds a library concatenation at ddname INCLIB for relink job JCL. INCLIB contains staging, promotion, and baseline libraries for the relink target load library type.
However, ddname INCLIB is not always referenced when a relink is executed. CMNSSIDN fabricates an INCLUDE INCLIB(member) statement when:
-
A relink job is initiated by package audit auto resolve to replace one or more statically linked subprograms in composite load module member.
-
There are no link edit control statements for member in baseline or staging libraries. (The composite load module member was created with the Automatic Call Library facility of the linkage editor when member source was staged or recompiled.)
Return Codes and Error Messages
This table describes user abend codes for program CMNSSIDN.
Code | Cause |
---|---|
S000 U0005 | Unable to open //SYSPRINT. |
S000 U0006 | Unable to open //SYSIN. |
S000 U0007 | Unable to open //OBJ when PARM=OBJECT or OPT=OBJECT in //SYSIN is specified. |
S000 U0008 | Unable to open //LCT. |
S000 U0009 | Read error on baseline or staging LCT member. |
...
Reporting
Program CMNSSIDN reports input keyword options, program execution parameters, what link control statement libraries it used, and the output link edit control statements it wrote to output ddname LCT. The report is written to the SYSPRINT ddname.
This is an example of the report.
********************************************************************************
* DDNAME: SSIDN.SYSPRINT *
********************************************************************************
ChangeMan(R) ZMF CMNSSIDN - 8.1.0 TUESDAY FEBRUARY 24, 2015 20:46:47
PARM=''
SYSIN: BAS=CMNTP.S6.V810.BASE.ACTP.LCT
SYSIN: LCT=ACPSRC1A
SYSIN: SSI=67BCDAA5
SYSIN: PKG=ACTP000038
SYSIN: RLK=
SYSIN: UIL=
SYSIN: OPT=CALL
Options compiled from PARM/SYSIN follow:
NAME - Allow "NAME" directive.
CALL - Allow "INCLUDE" directives.
END OF DATA ON "OBJ" DETECTED
STAGING "LCT" OPENED
STAGING "LCT" MEMBER NOT FOUND
ATTEMPTING TO ALLOCATE BASELINE "LCT"
BASELINE "LCT" ALLOCATED
BASELINE "LCT" OPENED
BASELINE "LCT" MEMBER NOT FOUND
FABRICATING LCT CARDS FROM SCRATCH
<...+....1....+....2....+....3....+....4....+....5....+....6....+....7.>.
LCT: SETSSI 67BCDAA5
LCT: IDENTIFY ACPSRC1A('ACPSRC1A/67BCDAA5/ACTP000038')
LCT: NAME ACPSRC1A(R)
...
CMNSSIDN Examples
- Stage simple program without link edit control member
Input LCT
None
Output LCT
FABRICATING LCT CARDS FROM SCRATCH
<...+....1....+....2....+....3....+....4....+....5....+
LCT: SETSSI 67BCDAA5
LCT: IDENTIFY ACPSRC1A('ACPSRC1A/67BCDAA5/ACTP000038')
LCT: NAME ACPSRC1A(R)
...
- Stage simple program with link edit control member
Input LCT
<...+....1....+....2....+....3....+....4....+....5....+
LCT: NAME ACPSRS5C(R)
...
Output LCT
PROCESSING MEMBER IN BASELINE "LCT"
<...+....1....+....2....+....3....+....4....+....5....+
LCT: SETSSI 53F61C58
LCT: IDENTIFY ACPSRS5C('ACPSRS5C/53F61C58/ACTP000082')
LCT: NAME ACPSRS5C(R)
...
- Relink composite load using link edit control member
Input LCT
<...+....1....+....2....+....3....+....4....+....5....+
LCT: INCLUDE SYSLIB(ACPSRS5A)
LCT: INCLUDE SYSLIB(ACPSRS5B)
LCT: INCLUDE SYSLIB(ACPSRS5C)
LCT: INCLUDE SYSLIB(ACPSRS00)
LCT: NAME ACPSRC50(R)
...
Output LCT
PROCESSING MEMBER IN BASELINE "LCT"
<...+....1....+....2....+....3....+....4....+....5....+
LCT: INCLUDE SYSLIB(ACPSRS5A)
LCT: INCLUDE SYSLIB(ACPSRS5B)
LCT: INCLUDE SYSLIB(ACPSRS5C)
LCT: INCLUDE SYSLIB(ACPSRS00)
LCT: SETSSI 53F7E98A
LCT: NAME ACPSRC50(R)
...
- Relink initiated by audit auto resolve for composite load without link edit control member (link edited with Automatic Call Library facility)
Input LCT
None
Output LCT
FABRICATING LCT CARDS FROM SCRATCH
<...+....1....+....2....+....3....+....4....+....5....+
LCT: REPLACE ACPSRS1B
LCT: INCLUDE INCLIB(ACPSRC1A)
LCT: SETSSI 53F7EADF
LCT: NAME ACPSRC1A(R)
...