View previous topic :: View next topic
Author
Message
satish.ms10 Active User Joined: 10 Aug 2009Posts: 184 Location: India
Hi All,
I am getting S0C7 ABEND when I am running my PL/I program. Let me explain the scenario with the below example.
I have 3 batch PL/I programs say A, B and C.
A is a main program and no calls to any sub-program.
B is also a main program and it calls sub-program C.
I compiled above program using the following compile and link-edit options respectively.
Code:
PLIPARM=('LIST,SOURCE,OPTIONS')
LNKPARM='LIST,XREF,RENT,MAP,COMPAT=PM3'
When I run program A, the job is ending with MAXCC=0 and got the proper output.
But, when I run program B, the job is ending with S0C7 ABEND code.
B is executing till the CALL statement to C sub-program and the print/display statement just before the call is printing to SYSPRINT.
Not sure where I am going mistake in compilation.
Could anyone help me in this regard.
Let me know if you need additional information, if any.
Thanks in advance.
Back to top
Nic Clouston Global Moderator Joined: 10 May 2007Posts: 2455 Location: Hampshire, UK
As program A is working ok why mention it at all?
So program B gets a S0C7 somewhere before it calls C. Or is it the call to C that is failing? What diagnostics do you have? Have you inserted PUT SKIPS at key points? Remember to duplicate them as a single one will not get printed in the even of a failure. Rmove the duplicate when you have successfully past that point. You eed to PUT SKIP all the data used in the failing statement. IF it is the call that is failing check the parameters are passed correctly and that C is declared correctly.
Back to top
satish.ms10 Active User Joined: 10 Aug 2009Posts: 184 Location: India
Hi Nic,
Have you placed PUT SKIP statements in my program. All the PUT statements, till the CALL C statement, are getting executed and the messages are printing in SYSPRINT. PUT statements after the CALL statement were not executed. I also noticed, no PUT statement in C sub-program.
I am not passing any arguments to C program. Here is the compile procedure that I am using:
Code:
//PL1CMP PROC STRG=300,
// INDEX='CICSTS42.CICS', CICS LIBRARIES QUALIFIER
// DSCTLIB='CICSTS42.CICS.SDFHPL1', PRIVATE MACRO/DSECT
// LNKPARM='LIST,XREF,RENT,MAP,COMPAT=PM3,CALL', BIND OPTS
// PLIPARM=('LIST,SOURCE,OPTIONS'), OPTIONS
// MEMBER= YOUR SOURCE MEMBER NAME,
// SRCE= YOUR SOURCE PDS,
// LOADLIB= LOADLIB PDS
//*
//*-----------------------------------------------------------------*
//* COMPILE STEP *
//*-----------------------------------------------------------------*
//PLIO EXEC PGM=IBMZPLI,REGION=1024K,
// PARM=&PLIPARM
//STEPLIB DD DSN=IGY.SIGYCOMP,DISP=SHR
//SYSIN DD DSN=&SRCE(&MEMBER),DISP=SHR
//SYSLIB DD DSN=&DSCTLIB,DISP=SHR
// DD DSN=&INDEX..SDFHPL1,DISP=SHR
// DD DSN=&INDEX..SDFHMAC,DISP=SHR
// DD DSN=&INDEX..SDFHSAMP,DISP=SHR
//SYSLIN DD DSN=&&BATCHLD,DISP=(NEW,PASS),UNIT=3390,
// SPACE=(TRK,(10,2)),
// DCB=(RECFM=FB,LRECL=80,BLKSIZE=2960,BUFNO=10)
//SYSPRINT DD SYSOUT=*
//SYSTERM DD SYSOUT=*
//SYSUDUMP DD SYSOUT=*
//SYSUT1 DD SPACE=(100,(&STRG,&STRG),,,ROUND),UNIT=3390
//SYSUT2 DD SPACE=(100,(&STRG,&STRG),,,ROUND),UNIT=3390
//SYSUT3 DD SPACE=(100,(&STRG,&STRG),,,ROUND),UNIT=3390
//SYSUT4 DD SPACE=(100,(&STRG,&STRG),,,ROUND),UNIT=3390
//SYSUT5 DD SPACE=(100,(&STRG,&STRG),,,ROUND),UNIT=3390
//*-----------------------------------------------------------------*
//* LINK STEP *
//*-----------------------------------------------------------------*
//LKED EXEC PGM=IEWL,PARM='&LNKPARM',
// COND=(4,LT,PLIO)
//SYSLIB DD DSN=CEE.SCEELKED,DISP=SHR
// DD DSN=&LOADLIB,DISP=SHR
//SYSLIN DD DSN=&&BATCHLD,DISP=(OLD,DELETE),UNIT=3390,
// SPACE=(TRK,(10,2))
// DD DDNAME=SYSIN
//SYSLMOD DD DSN=&LOADLIB(&MEMBER),DISP=SHR
//SYSPRINT DD SYSOUT=*
//SYSUDUMP DD DUMMY
//SYSIN DD DUMMY
//SYSUT1 DD SPACE=(TRK,(5,2)),UNIT=3390
//SYSUT2 DD SPACE=(TRK,(5,2)),UNIT=3390
//SYSUT3 DD SPACE=(TRK,(5,2)),UNIT=3390
//SYSUT4 DD SPACE=(TRK,(5,2)),UNIT=3390
// PEND
Main Program:
Code:
TSTPL01: PROCEDURE OPTIONS(MAIN);
DCL SUBPL01 EXTERNAL ENTRY;
DCL ADDR BUILTIN;
DCL 1 STRUCT1,
2 PGMNAME CHAR(20),
2 CHRVAL CHAR(20);
PUT SKIP LIST('MAIN PROGRAM STARTED...' );
PGMNAME = 'TSTPL01';
CHRVAL = 'INPUT DATA';
PUT SKIP LIST('FETCHING...............' );
FETCH SUBPL01;
PUT SKIP LIST('CALLING................' );
PUT SKIP LIST('CALLING................' );
CALL SUBPL01;
PUT SKIP LIST('RETURNED...............' );
PUT SKIP LIST('RETURNED...............' );
RELEASE SUBPL01;
PUT SKIP LIST('... EXITING MAIN PROGRAM' );
END TSTPL01;
Sub-program:
Code:
SUBPL01: PROC;
PUT SKIP LIST('SUB-PROGRAM STARTED...' );
PUT SKIP LIST('... EXITING SUB-PROGRAM' );
END SUBPL01;
Kindly help. I am not sure where I am doing mistake.
Thank you very much for your kind help.
Back to top
Bill Woodger Moderator Emeritus Joined: 09 Mar 2011Posts: 7309 Location: Inside the Matrix
Are you saying that gets you a S0C7?
Back to top
satish.ms10 Active User Joined: 10 Aug 2009Posts: 184 Location: India
Hi Bill,
Yes, I am getting S0C7 at the CALL statement.
PUT statements executed till the CALL statement.
Thank you.
Back to top
prino Senior Member Joined: 07 Feb 2009Posts: 1306 Location: Vilnius, Lithuania
One: there is no numerical data in your program, so getting a S0C7 seems rather unlikely, or more to the point, it's utterly impossible!
Two:
Code:
//*-----------------------------------------------------------------*
//* COMPILE STEP *
//*-----------------------------------------------------------------*
//PLIO EXEC PGM=IBMZPLI,REGION=1024K,
// PARM=&PLIPARM
//STEPLIB DD DSN=IGY.SIGYCOMP,DISP=SHR
What the fluck is 'IGY.SIGYCOMP' (the loadlib for the COBOL compiler) doing in PL/I compile JCL?????
Back to top
Please enable JavaScript!