ZOS ABEND S0C7 Data exception error in file record
CONTENTS
1. ABEND S0C7 message explication
2. Dump analysis for Cobol source program compiled and executed
2.1. Provoke program dump of PGM=LOANSNEW execution (D0595_LAKMSTR – MAY 1995, for Account=0000000000000823)
2.2. PSW (Program Status Word) investigation of LAKMSTR error
2.3. DUMP investigation of failing Assembler instruction
2.4. Program LOANSNEW compilation with job COBBATCH listing investigation
2.5. Error repare in the LAKMSTR record
2.5.1. Buffer length error repare in the LAKMSTR record
2.5.2. Error field repare in the LAKMSTR record
3. Dump analysis for Cobol program execution without source available
3.1. Provoke program dump of PGM=DAU9000 execution (D0595_DAKMSTR – MAY 1995, for Account=0000002000087811)
3.2. PSW (Program Status Word) investigation of DAKMSTR error
3.3. DUMP investigation of the failing Assembler instruction and DAKMSTR repare
3.4. Provoke program dump of PGM=DAU9000 execution (D0202_ DAKTRAN – FEBRUARY 2002, for Account=0000001000000110)
3.5. PSW (Program Status Word) investigation of DAKTRAN error
3.6. DUMP investigation of the failing Assembler instruction and DAKTRAN repare
Investigation of ZOS system error ABEND S0C7 due to error data in a file record that caused data exception interruption of program instruction to occur is made. Dump analysis with Cobol source program compiled and executed are performed on the base of PSW information, Assembler listing of Cobol compilation and dump investigation. Detected is the right record and the exact error field in the file. The error field is repared and the program execution is restarted with successful end. A similar approach is applied to dump analysis for Cobol program execution without source available for error field record detecting in two different files with finding out the exact file from the dump. The same technology may be used and developed for any program interruptions of other ZOS application programs.
1. ABEND S0C7 message explication
To determine what kind of system error message is ABEND S0C7, go to MVS system codes using the following link:
http://publibz.boulder.ibm.com/epubs/pdf/iea2h734.pdf – link to ZOS MVS system codes to find more information for error system codes.
Go to: Edit – Find (CTRL + F) 0c7 – this is data exception:
0C7 Data exception. The reason code is whatever the data exception code is in field SDWADXC
in the SDWA (systems diagnostic work area) … etc.
A Data Exception is caused when a computational-3 field (that contains packed decimal digits) has an invalid digit (not 0-9), or its last byte contains an invalid sign (not F, C, or D).
Whereas S0C7 is data exception?
It occurs when you try to move a non numeric value to a Numeric variable. Generally soc-7 occurs due to data mismatch. It means if you are placing numeric data in alphabetic field.
S0C7 error occurs in the following situations:
– moving data from alphanumeric to editing characters;
– moving data from editing characters to alphanumeric data type;
– involve alphanumeric datatypes in arithmetic operations.
2. Dump analysis for Cobol source program compiled and executed
2.1. Provoke program dump of PGM=LOANSNEW execution (D0595_LAKMSTR – MAY 1995, for Account=0000000000000823)
To produce dump on ABEND during execution of Cobol program LOANSNEW, insert the statement //SYSABEND DD SYSOUT=A or //SYSUDUMP DD SYSOUT=* in the JCL of job JLO0595 as follows:
//JLO0595 JOB MSGLEVEL=(1,1),MSGCLASS=X,TIME=1440
//*
//JOBLIB DD DSN=BCI05.LIB.BASE.LOAD,DISP=SHR
// DD DSN=KCI01.LIB.PROD.LOAD,DISP=SHR
// DD DSN=KCI01.LIB.PROD.LOAD,DISP=SHR
//*
//STEP1D EXEC PGM=IEFBR14
//PRTFILE DD DSN=PRINT01.KCI01.LOAN0595.TXT,
// DISP=(MOD,DELETE),
// DCB=(RECFM=F,LRECL=143,DSORG=PS),
// SPACE=(TRK,(1,1)),UNIT=VIO
//*
//STEP1 EXEC PGM=LOANSNEW
//SYSABEND DD SYSOUT=A or //SYSUDUMP DD SYSOUT=*
//LAKMSTR DD DSN=KCI08.D0595.LAKMSTR,DISP=SHR
//CIKAREL DD DSN=KCI02.D0595.CIKAREL,DISP=SHR
//CIKMSTR DD DSN=KCI02.D0595.CIKMSTR,DISP=SHR
//BAKMSTR DD DSN=KCI07.D0595.BAKMSTR,DISP=SHR
//PRTFILE DD DSN=PRINT01.KCI01.LOAN0595.TXT,
// DCB=(RECFM=F,LRECL=143,DSORG=PS,BUFNO=100),
// DISP=(NEW,CATLG),
// SPACE=(CYL,(350,50),RLSE),UNIT=vio
2.2. PSW (Program Status Word) investigation of LAKMSTR error
In TSO/ISPF – sd.st – do the following:
S jlo0595 – analysis the SYMPTOM DUMP:
IEA995I SYMPTOM DUMP OUTPUT 678
SYSTEM COMPLETION CODE=0C7 REASON CODE=00000000
TIME=11.35.41 SEQ=23429 CPU=0000 ASID=0025
PSW AT TIME OF ERROR 078D0000 8F302944 ILC 6 INTC 07
ACTIVE LOAD MODULE ADDRESS=0F300000 OFFSET=0000
NAME=LOANSNEW
DATA AT PSW 0F30293E – F93340E7 A1C758B0 C04447D0
AR/GR 0: 00000000/00000000_0F38F84F 1: 00025A50/00000000
2: 00000000/00000000_0F38F7C0 3: 00000000/00000000
4: 00000000/00000000_0004E13F 5: 00000000/00000000
6: 00000000/00000000_0004E038 7: 00000000/00000000
8: 00000000/00000000_0F3890B8 9: 00000000/00000000
A: 00000000/00000000_0F300144 B: 00000000/00000000
C: 00000000/00000000_0F3000FC D: 00000000/00000000
E: 00000000/00000000_0F38F7C0 F: 00000000/FFFFFFFF
END OF SYMPTOM DUMP
PSW: 078D0000 8F302944 Instruction length: ILC=06 Interruption code: INTC 07
The second word of the PSW is 8F302944. The first number, 8, indicates that this program is
executing in 31-bit mode. In other words, this program runs above the 16 megabyte line. The
number 8 in binary is 1000 which indicates the addressing mode bit 32 is ON. A value of zero
decimal would be binary zero, 0000, indicating that the addressing mode bit 32 was OFF,
which identifies that this location was below the 16 bit line, or in 24-bit mode.
The remaining data points to the next instruction to be executed, in this case, 8F302944. For
the sake of correctness the full address would be 0F302944.
Subtracting the instruction length value (ILC=06), in this case, 6, from the PSW address, would result in F30293E, which would point to the failing instruction as follows:
DATA AT PSW 0F30293E – F93340E7 A1C7
This Assembler instruction has 6 bytes:
F9 – CP (Compare decimal) operation code
3 – length 4 of First operand data
3 – length 4 of Second operand data
4 – Base register R4 of First operand address
0E7 – Displacement D1 of First operand address
A – Base register R10 of Second operand address
1C7 – Displacement D2 of Second operand address
Calculating First and Second operand addresses:
First operand address = R4 + D1 = 4E13F + 0E7 = 4E226
Second operand address = R10 + D2 = F300144 + 1C7 = F30030B
To find the interruption code meaning in PSW (INTC 07= Data exception) look at Program-Interruption Codes List:
Code
(Hex)
Condition
0001 Operation exception
0002 Privileged-operation exception
0003 Execute exception
0004 Protection exception
0005 Addressing exception
0006 Specification exception
0007 Data exception
0008 Fixed-point-overflow exception
0009 Fixed-point-divide exception
000A Decimal-overflow exception
000B Decimal-divide exception
000C HFP-exponent-overflow exception
000D HFP-exponent-underflow exception
000E HFP-significance exception
000F HFP-floating-point-divide exception
0010 Segment-translation exception
0011 Page-translation exception
0012 Translation-specification exception
0013 Special-operation exception
0015 Operand exception
0016 Trace-table exception
001C Space-switch event
001D HFP-square-root exception
001F PC-translation-specification exception
0020 AFX-translation exception
0021 ASX-translation exception
0022 LX-translation exception
0023 EX-translation exception
0024 Primary-authority exception
0025 Secondary-authority exception
0028 ALET-specification exception
0029 ALEN-translation exception
002A ALE-sequence exception
002B ASTE-validity exception
002C ASTE-sequence exception
002D Extended-authority exception
0030 Stack-full exception
0031 Stack-empty exception
0032 Stack-specification exception
0033 Stack-type exception
0034 Stack-operation exception
0038 ASCE-type exception
0039 Region-first-translation exception
003A Region-second-translation exception
003B Region-third-translation exception
0040 Monitor event
0080 PER event (code may be combined with another code)
0119 Crypto-operation exception
2.3. DUMP investigation of failing Assembler instruction
To find the failing instruction in the dump do the following:
? jlo0595 – Enter the dump with:
S SYSABEND STEP1 101 BCA1MGP A LOCAL 89,825
Find the failing instruction position in the dump using SYMPTOM DUMP information (F30293E):
F F302920 – Goto F30293E – F93340E7A1C7 – the failing instruction (CP – compare decimal).
Find the second operand data in the dump using the calculated address above(F30030B):
F F300300 – Goto F30030B – found 4 bytes: 1900000F – The Second operand data (4 decimal packed bytes) are OK.
Find the first operand data in the dump using the calculated address above(4E226):
F 4E220 – Goto 4E226 – found 4 bytes: 00000C00 – First operand data are not correct decimal packed data – an invalid sign 0 (not F, C, or D) which is the reason for Data exception of CP instruction to occur.
2.4. Program LOANSNEW compilation with job COBBATCH listing investigation
To find out what is wrong with First operand data, a logic from PGM=LOANSNEW is needed. The source member of program LOANSNEW in BCI05.lib.base.source library is compiled using job COBBATCH with parm= MAP,XREF,LIST to produce listing as follows :
//COBBATCH JOB (ACCTNUM),’CORNERST’,
// USER=,
// GROUP=,
// PASSWORD=,
// TIME=1440,
// NOTIFY=&SYSUID,
// REGION=6500K,
// CLASS=B,
// MSGCLASS=X,
// MSGLEVEL=(1,1)
//*——————————————————————-
//* COBOL JCL – 07/2003 –
//* –
//* CHANGE PARMS BELOW: –
//* BCCSLIB = SOURCE LIBRARY –
//* BCCTLOAD = LOAD LIBRARY –
//* BCCMEMBR = SOURCE AND OUTPUT MEMBER NAME –
//*——————————————————————-
// SET BCCSLIB=‘BCI05.LIB.BASE.SOURCE‘ ** SOURCE LIBRARY
// SET BCCCPBK=’BCI05.LIB.BASE.COPY’ ** COPYBOOK LIBRARY
// SET BCCTLOAD=’BCI05.LIB.BASE.LOAD’ ** LOAD LIBRARY
// SET BCCTOBJ=’BCI05.LIB.BASE.OBJECT’ ** OBJ LIBRARY
// SET BCCMEMBR=LOANSNEW
//*——————————————————————-
//*- JCL BELOW –
//*——————————————————————-
//*- COBOL BATCH COMPILE – 07/03 –
//*——————————————————————-
//COBOL EXEC PGM=IGYCRCTL,REGION=2048K,PARM=(LIB,MAP,XREF,LIST)
//STEPLIB DD DSNAME=IGY.SIGYCOMP,
// DISP=SHR
//SYSPRINT DD SYSOUT=*
//SYSUT1 DD UNIT=VIO,SPACE=(CYL,(5,1))
//SYSUT2 DD UNIT=VIO,SPACE=(CYL,(5,1))
//SYSUT3 DD UNIT=VIO,SPACE=(CYL,(5,1))
//SYSUT4 DD UNIT=VIO,SPACE=(CYL,(5,1))
//SYSUT5 DD UNIT=VIO,SPACE=(CYL,(5,1))
//SYSUT6 DD UNIT=VIO,SPACE=(CYL,(5,1))
//SYSUT7 DD UNIT=VIO,SPACE=(CYL,(5,1))
//SYSUT2 DD UNIT=SYSDA,SPACE=(CYL,(5,1))
//SYSLIN DD DSN=&&LOADSET,DISP=(MOD,PASS,DELETE),
// DCB=BLKSIZE=800,
// UNIT=VIO,SPACE=(TRK,(15,5),RLSE)
//SYSLIB DD DSN=&BCCCPBK,DISP=SHR
//SYSIN DD DSN=&BCCSLIB(&BCCMEMBR),DISP=SHR
//*
//*LINKEDT EXEC PGM=HEWL,REGION=1024K,
//LINKEDT EXEC PGM=HEWL,REGION=1024K,PARM=’XCAL’,
// COND=(7,LT)
//SYSLIB DD DSN=CEE.SCEELKED,DISP=SHR
// DD DSN=&BCCTLOAD,DISP=SHR
// DD DSN=&BCCTOBJ,DISP=SHR
//SYSUT1 DD UNIT=VIO,SPACE=(CYL,(10,5))
//SYSLMOD DD DSN=&BCCTLOAD(&BCCMEMBR),DISP=SHR
//SYSPRINT DD SYSOUT=*
//SYSLIN DD DSN=&&LOADSET,DISP=(OLD,DELETE,DELETE),
// UNIT=VIO
//*
To investigate the compiled listing do the following:
In TSO/ISPF – sd.st – enter: ? COBBATCH JOB04480 IBMUSER 1 PRINT B CC 0000 2956 and Assembler listing is found with: s SYSPRINT COBOL 101 IBMUSER X LOCAL 5,448 where could be found the failing instruction at address 293E (From DATA AT PSW address F30293E is subtracted 0F300000 /ACTIVE LOAD MODULE ADDRESS/ above).
Enter F 293E – 293E F933 40E7 A1C7 CP 231(4,4),455(4,10) DATE-CONTRACT
The failing Assembler instruction ‘CP 231(4,4),455(4,10) DATE-CONTRACT’ is the same found in the dump (F93340E7A1C7) at address F30293E.
The error field DATE-CONTRACT (the first operand data) is compared with the correct second operand data 1900000F. The field DATE-CONTRACT is found in source program member LOANSNEW in BCI05.lib.base.source library as LAKMSTR record structure of LAKMSTR file with DSN=KCI08.D0595.LAKMSTR during execution of job JLO0595 (in 2.1 above) and is defined like decimal packed field “05 DATE-CONTRACT PIC S9(07) COMP-3.” as follows bellow:
FD LAKMSTR – ( //LAKMSTR DD DSN=KCI08.D0595.LAKMSTR,DISP=SHR – in job JLO0595)
RECORD VARYING FROM 2294 TO 14800 DEPENDING ON REC-LEN.
01 LAKM-RECORD.
02 LAKM-LAS-ROOT-SEGMENT.
——————————————
04 LAKM-seg00-len PIC 9(4) binary.
04 LAKM-seg00-nbr PIC X(1).
04 LAKM-KEY.
05 LAKM-KEY-BANK PIC X(2).
05 LAKM-KEY-APL PIC X(1).
05 LAKM-KEY-ACC PIC X(8).
04 LAKM-STATUS PIC X(1).
04 LAKM-FEE-status PIC X(1).
……………………..
For records with variable buffer length , the length of the buffer is defined after decimal position 230 (231-232):
* ——– – (len = 230)
04 LAKM-BUF-LEN PIC 9(4) binary. /2 bytes mark length of the variable buffer in the record/
04 LAKM-BUF. /start of the variable buffer/
05 filler occurs 1 to 240 depending on LAKM-BUF-LEN
PIC X(1).
……………………..
* ——– LAKM-DATES-SEGMENT – seg00-len + 1 + 219 (len = 64)
04 LAKM-DATES.
05 DATE-ACCRUED-THRU PIC S9(07) COMP-3.
05 DATE-2 PIC S9(07) COMP-3.
05 DATE-CLOSED PIC S9(07) COMP-3.
05 DATE-CONTRACT PIC S9(07) COMP-3.
……………………..
The problem is how to find the record position of the wrong field DATE-CONTRACT (First operand data) and in which record of the VSAM file KCI08.D0595.LAKMSTR could be found?
Going to the Dump at First operand address 4E226 – 4 bytes are found: 00000C00 (the First operand data that are not correct decimal packed data). To find the start of the record in the Dump we need some file KCI08.D0595.LAKMSTR information in HEX using Ditto function of TSO/ISPF and to copy the first 4 bytes that are equal for all records: X’ 00FF0066’.
From address 4E226 position of the Dump enter: F 00FF0066 prev – at address 4E038 is found the start of the error LAKMSTR record as follows:
00FF0066 00180000 00000000 0823C180 00800000 …. – where 11 bytes field 6600180000000000000823 is the record key of the file KCI08.D0595.LAKMSTR according the LAKMSTR record description (11 bytes – LAKM-KEY-BANK + LAKM-KEY-APL + LAKM-KEY-ACC) above.
Using record key 6600180000000000000823 in TSO/ISPF Ditto function browse file LAKMSTR to locate the failed record as follows:
Enter on Command ===> f X’6600180000000000000823′ and the record is found:
RBA 26090 Key X’6600180000000000000823′ Col 1 Format HEX
RBA Len 1 . . < 5 = = = =10 = = = > 5 . . . .20 . . . . 5 . . . .30
26090 587 00FF006600180000000000000823C1800080000000000000000000000000
To calculate the position of field DATE-CONTRACT (first operand data) in the found record using the Cobol program listing, we should add after decimal position 230 two bytes (231-232) to find the buffer length into the found record (which is x’001F’ = decimal 31):
230 . . . . …….5
00001F25F1E3
Then after 230 + 2 + 31 (LAKM-BUF-LEN) we have to add 219 ( previous fields length according * ——– LAKM-DATES-SEGMENT – seg00-len + 1 + 219 (len = 64)) and 3 fields before field DATE-CONTRACT /+ 4 (DATE-ACCRUED-THRU) + 4 (DATE-2) + 4(DATE-CLOSED)/ to calculate total displacement from the record start = 230 + 2 + 31 + 219 + 4 + 4 + 4 = 494 (x’1EE’) and find at 495 position the wrong 4 bytes field (00000C00) in the record:
494 . . . . . . .
0000000C00
The same 4 bytes (00000C00) are found with the First operand address 4E226 within the Dump.
Obviously this is the same error field in the record with invalid decimal packed data 00000C00 in the Dump that caused the ABEND Data exception.
The position of field DATE-CONTRACT (first operand data) in the found record may be calculated without refering to Cobol program listing if we know the start address of the error LAKMSTR record in the Dump. From address 4E226 of the first operand data subtract the start address 4E038 of the record in the Dump and the result is the displacement from the record start = x’1EE’ – decimal 494 (the same asabove).
2.5. Error repare in the LAKMSTR record
To have an error in the record of LAKMSTR file with DSN=KCI08.D0595.LAKMSTR two cases are possible (for records with variable buffer length after decimal position 230 as it is in this example):
– First – the length of the buffer LAKM-BUF-LEN in the record may be wrong and all subsequent fields are shifted in wrong way.
– Second – (if the length of the buffer is OK) then the contents of the field in the record may be wrong.
2.5.1. Buffer length error repare in the LAKMSTR record
Following the first case, we investigated the field DATE-CLOSED which is before field DATE-CONTRACT in the record structure and we found that field DATE-CONTRACT should follow field DATE-CLOSED (19950750 – as defined in the record structure) at 494 position (one position before 495 in our case) as follows.
First enter – Ditto edit – VSAM – file – KCI08.D0595.LAKMSTR – in HEX.
Then locate the record with
Command ===> f X’6600180000000000000823′
Using PF5 go to position 230 as follows:
The LAKM-BUF-LEN at position 231 (two bytes 231-232 that are 001F = 31 should be changed to 001E = 30):
230 . . . . …….5
00001F25F1E3 – old
00001E25F1E3 – new (changed)
After changing LAKM-BUF-LEN field with TSO/ISPF – Ditto – edit VSAM data function to 001E the problem disappeared. Job JLO0595 finished OK with CC 0000.
To verify whether Buffer length field is correct go to the located record with Ditto browse – VSAM – file – KCI08.D0595.LAKMSTR – in HEX. Using PF5 go to position 232(end of Buffer length field ) + 31(error length of Buffer length field) = 263 to find that this is not the last buffer position (the last buffer position of this record is = 262, and the next byte is x’08’ as for all other records of the file according their Buffer length field). Then correct 31(error length of Buffer length field) to 30 (x’ 001E’) and submit job JLO0595 again.
2.5.2. Error field repare in the LAKMSTR record
Following the second case, when the problem with Data exception (ABEND S0C7) in the first case is solved but ABEND S0C7 continue to appear on the next JLO0595 execution, the First operand data location should be investigated again.
In TSO/ISPF – sd.st – do the following for the started again job jlo0595:
S jlo0595 – analysis the SYMPTOM DUMP again:
IEA995I SYMPTOM DUMP OUTPUT 351
SYSTEM COMPLETION CODE=0C7 REASON CODE=00000000
TIME=11.17.31 SEQ=23206 CPU=0000 ASID=0025
PSW AT TIME OF ERROR 078D0000 8F302B02 ILC 6 INTC 07
ACTIVE LOAD MODULE ADDRESS=0F300000 OFFSET=0000
NAME=LOANSNEW
DATA AT PSW 0F302AFC – F93340E3 A1C758B0 C04447D0
AR/GR 0: 00000000/00000000_0F38F84F 1: 00025A50/00000000
2: 00000000/00000000_0F38F7C0 3: 00000000/00000000
4: 00000000/00000000_0004E13E 5: 00000000/00000000
6: 00000000/00000000_0004E038 7: 00000000/00000000
8: 00000000/00000000_0F3890B8 9: 00000000/00000000
A: 00000000/00000000_0F300144 B: 00000000/00000000
C: 00000000/00000000_0F3000FC D: 00000000/00000000
E: 00000000/00000000_0F38F7C0 F: 00000000/FFFFFFFF
END OF SYMPTOM DUMP
The PSW address of failing instruction is on another address in the dump and it is changed (to 2AFC) and the CP(Compare decimal) instruction has different contents (F93340E3A1C7). The first operand address is changed to 4E221 (4E13E + E3) but the second operand address is the same F30030B (F300144 + 1C7).
Going to the same Assembler listing (s SYSPRINT COBOL 101 IBMUSER X LOCAL 5,448) the failing instruction could be found at address 2AFC (From first operand address F302AFC is subtracted 0F300000 (ACTIVE LOAD MODULE ADDRESS) above.
F 2AFC – at 2AFC ‘F933 40E3 A1C7 CP 227(4,4),455(4,10) DATE-CLOSED’
The failing Assembler instruction ‘ CP 227(4,4),455(4,10) DATE- CLOSED’ is same as the found in the dump (F93340E3A1C7) at address F302AFC. At first operand address 4E221 the data field is 19950750 – an invalid sign 0 (not F, C, or D) which is the reason for Data exception of CP instruction to occur.
The error field DATE- CLOSED is compared with the correct second operand data 1900000F. The field DATE- CLOSED is found in source program member LOANSNEW in BCI05.lib.base.source library in LAKMSTR record structure of LAKMSTR file with DSN=KCI08.D0595.LAKMSTR during execution of job JLO0595 (in 2.1 above) as decimal packed field “05 DATE-CLOSED PIC S9(07) COMP-3.” as follows:
FD LAKMSTR – //LAKMSTR DD DSN=KCI08.D0595.LAKMSTR,DISP=SHR
RECORD VARYING FROM 2294 TO 14800 DEPENDING ON REC-LEN.
01 LAKM-RECORD.
……………………..
* ——– LAKM-DATES-SEGMENT – seg00-len + 1 + 219 (len = 64)
04 LAKM-DATES.
05 DATE-ACCRUED-THRU PIC S9(07) COMP-3.
05 DATE-2 PIC S9(07) COMP-3.
05 DATE-CLOSED PIC S9(07) COMP-3.
05 DATE-CONTRACT PIC S9(07) COMP-3.
To find the start of the failed LAKMSTR record at dump address 4E038 from location of the first operand address 4E221 enter F 00FF0066 prev as follows:
00FF006600180000000000000823C180 …. – where field 6600180000000000000823 is the record key of the error LAKMSTR record in the dump.
Using record key 6600180000000000000823 with Ditto and browsing file LAKMSTR the failed record is located as follows:
First enter – Ditto edit – VSAM – file – KCI08.D0595.LAKMSTR – in HEX.
Then locate the record with:
Command ===> f X’6600180000000000000823′
The record is located:
RBA 26090 Key X’6600180000000000000823′ Col 1 Format HEX
RBA Len 1 . . < 5 = = = =10 = = = > 5 . . . .20 . . . . 5 . . . .30
26090 587 00FF006600180000000000000823C1800080000000000000000000000000
To find the error field position in the located record, from the first operand address 4E221 subtract the start address 4E038 of the error record in the dump:
4E221 – 4E038 = x’1E9’ = decimal 489 – the 489 should be added to the start of the error record and the error field is found at position 490 (4 HEX bytes – 19950750) – the same as at first operand address 4E221 in the dump above (invalid sign 0 – not F, C, or D). After changing 4 bytes (19950750) at position 490 with 1995075C, the problem is resolved and the program finished ok with CC 0000 and final result in PRINT01.KCI01.LOAN0395.TXT:
BROWSE PRINT01.KCI01.LOAN0395.TXT Line 00000000 Col 001 080
110001 for officers long time 0000008000000828 0000008BGN4040404
150001for enterprizes 0000008000000812 0000008BGN4040404
180001..DEFAULT TYPE **BGL0000000000000823 0000008BGL4040404
3. Dump analysis for Cobol program execution without source available
3.1. Provoke program dump of PGM=DAU9000 execution (D0595_DAKMSTR – MAY 1995, for Account=0000002000087811)
To produce dump on ABEND for DAKMSTR file error during execution of Cobol program PGM=DAU9000 (only load module without source available), insert the statement //SYSABEND DD SYSOUT=A or //SYSUDUMP DD SYSOUT=* in the following JCL of job CKPRSTEF:
//CKPRSTEF JOB (9999),
// ,
// REGION=0M,
// MSGCLASS=X,MSGLEVEL=(1,1)
//JOBLIB DD DSN=KCI03.LIB.PROD.LOAD,DISP=SHR
// DD DSN=KCI33.LIB.PROD.LOAD,DISP=SHR
//* SET1 ZADAJTE MESEC I GODINA VAV VIDA HLDATA=DMMYY
//SET1 SET HLDATA=D0595 MAY 1995
//* SET1 SET HLDATA=D030695 03.JUNE 1995
//* SET1 SET HLDATA=D070795 07.JULY 1995
//* SET1 SET HLDATA=D310795 31.JULY 1995
//* SET1 SET HLDATA=D0895 AUGUST 1995
//* SET1 SET HLDATA=D0196 JANUARY 1996
//* SET1 SET HLDATA=D0496 APRIL 1996
//* SET1 SET HLDATA=D0696 JUNE 1996
//* SET1 SET HLDATA=D0996 SEPTEMBER 1996
//* SET1 SET HLDATA=D0697 JUNE 1997
//* SET1 SET HLDATA=D1097 OCTOBER 1997
//* SET1 SET HLDATA=D1197 NOVEMBER 1997
//* SET1 SET HLDATA=D0298 FEBRUARY 1998
//* SET1 SET HLDATA=D0598 MAY 1998
//* SET1 SET HLDATA=D0698 JUNE 1998
//* SET1 SET HLDATA=D1298 DECEMBER 1998
//* SET1 SET HLDATA=D0599 MAY 1999
//* SET1 SET HLDATA=D0699 JUNE 1999
//* SET1 SET HLDATA=D0899 AUGUST 1999
//* SET1 SET HLDATA=D1199 NOVEMBER 1999
//* SET1 SET HLDATA=D1299 DECEMBER 1999
//* SET1 SET HLDATA=D0300 MARCH 2000
//* SET1 SET HLDATA=D0500 MAY 2000
//* SET1 SET HLDATA=D0700 JULY 2000
//* SET1 SET HLDATA=D0800 AUGUST 2000
//* SET1 SET HLDATA=D0900 SEPTEMBER 2000
//* SET1 SET HLDATA=D1200 DECEMBER 2000
//* SET1 SET HLDATA=D0101 JANUARY 2001
//* SET1 SET HLDATA=D0201 FEBRUARY 2001
//* SET1 SET HLDATA=D0301 MARCH 2001
//* SET1 SET HLDATA=D0401 APRIL 2001
//* SET1 SET HLDATA=D0501 MAY 2001
//* SET1 SET HLDATA=D0801 AUGUST 2001
//* SET1 SET HLDATA=D0901 SEPTEMBER 2001
//* SET1 SET HLDATA=D1001 OCTOBER 2001
//* SET1 SET HLDATA=D1101 NOVEMBER 2001
//* SET1 SET HLDATA=D1201 1 JANUARY 2002/D1201/
//* SET1 SET HLDATA=D0202 FEBRUARY 2002
//* SET1 SET HLDATA=D0502 MAY 2002
//* SET1 SET HLDATA=D0602 JUNE 2002
//* SET1 SET HLDATA=D0702 JULY 2002
//* SET1 SET HLDATA=D1002 OCTOBER 2002
//* SET1 SET HLDATA=D1202 DECEMBER 2002
//* SET1 SET HLDATA=D0103 JANUARY 2003
//* SET1 SET HLDATA=D0403 APRIL 2003
//* SET1 SET HLDATA=D0603 JUNE 2003
//* SET1 SET HLDATA=D0903 SEPTEMBER 2003
//*
//DAU9000 EXEC PGM=DAU9000
//SYSOUT DD SYSOUT=*
//SYSPRINT DD SYSOUT=*
//SYSUDUMP DD SYSOUT=* or //SYSABEND DD SYSOUT=A
//BAKMSTR DD DSN=KCI09.&HLDATA..BAKMSTR,DISP=SHR
//CSKCONF DD DSN=KCI09.&HLDATA..CSKCONF,DISP=SHR
//DAKMSTR DD DSN=KCI08.D0595.NEWDAKMS,DISP=SHR
//DAKTR01 DD DSN=KCI09.&HLDATA..DAKTR01,DISP=SHR
//* DAKTR02 DD DSN=KCI09.&HLDATA..DAKTR02,DISP=SHR
//* DAKTR03 DD DSN=KCI09.&HLDATA..DAKTR03,DISP=SHR
//* DAKTR04 DD DSN=KCI09.&HLDATA..DAKTR04,DISP=SHR
//* DAKTR05 DD DSN=KCI09.&HLDATA..DAKTR05,DISP=SHR
//* DAKTR06 DD DSN=KCI09.&HLDATA..DAKTR06,DISP=SHR
//* DAKTR07 DD DSN=KCI09.&HLDATA..DAKTR07,DISP=SHR
//DAKTRAN DD DSN=KCI09.&HLDATA..DAKTRAN,DISP=SHR
//* DAKTR01 DD DSN=KCI09.D0895.DAKTR01,DISP=SHR FOR HLDATA=D310795
//* DAKTRAN DD DSN=KCI09.D0895.DAKTRAN,DISP=SHR FOR HLDATA=D310795
//FSCARDI DD *
6600020000002000087811000000200008781100000000 00001Y
/*
//*
3.2. PSW (Program Status Word) investigation of DAKMSTR error
In TSO/ISPF – sd.st – do the following:
S CKPRSTEF (D0595 – MAY 1995, for Account=0000002000087811) – analysis the SYMPTOM DUMP :
IEA995I SYMPTOM DUMP OUTPUT 784
SYSTEM COMPLETION CODE=0C7 REASON CODE=00000000
TIME=13.58.28 SEQ=23744 CPU=0000 ASID=0035
PSW AT TIME OF ERROR 078D0000 0000D42E ILC 6 INTC 07
ACTIVE LOAD MODULE ADDRESS=00007630 OFFSET=0000
NAME=DAU9000
DATA AT PSW 0000D428 – F843D7D8 65D0DE0A D7C8D7D8
AR/GR 0: 80BFCB60/00016A88 1: 00000000/000427F8
2: 00000000/000097A0 3: 00000000/00016D60
4: 00000000/0000CCB6 5: 00000000/0000CA86
6: 00000000/00019DB0 7: 00000000/0001BDB0
8: 00000000/000077A0 9: 00000000/00016938
A: 00000000/0001DDB0 B: 00000000/00015F72
C: 00000000/0000772C D: 00000000/00042030
E: 00000000/500163C2 F: 01000002/00000000
END OF SYMPTOM DUMP
Subtracting the instruction length value (ILC=06), in this case, 6, from the PSW address, would result in D428, which would point to the failing instruction with Interruption code (INTC=07 – Data exception ) as above:
DATA AT PSW D428 – F843D7D8 65D0DE0A D7C8D7D8
The PSW address of failing ZAP instruction is D428 and the ZAP (98) instruction has the following contents (F843D7D865D0). The first operand data has 5 bytes at address 42808 (42030 + 7D8) and the second operand data has 4 bytes at address 1A380 (19DB0 + 5D0).
This Assembler instruction has 6 bytes as follows:
F8 – ZAP (move one packed number /Sec op/ to another /First op/) operation code
4 – length 5 of First operand data
3 – length 4 of Second operand data (extending from 4 to 5 bytes and check the sign)
D – Base register R13 of First operand address
7D8 – Displacement D1 of First operand address
6 – Base register R6 of Second operand address
5D0 – Displacement D2 of Second operand address
Calculating First and Second operand addresses:
First operand address = R13 + D1 = 42030 + 7D8= 42808
Second operand address = R6 + D2 = 19DB0 + 5D0= 1A380
3.3. DUMP investigation of the failing Assembler instruction and DAKMSTR repare
To find the failing instruction in the dump do the following:
? CKPRSTEF (D0595 – MAY 1995, for Account=0000002000087811) – Enter the dump with:
S SYSUDUMP DAU9000 104 BCA1MGP X LOCAL 85,871
Find the failing instruction position in the dump using SYMPTOM DUMP information (DATA AT PSW 0000D428):
F D420 – Goto D428 – F843D7D865D0 – the failing instruction ZAP (moving packed number of second operand to First operand and check sign).
Find the second operand data in the dump using the calculated address above(1A380):
F 1A380 – found 4 bytes: 19952120 – Second operand data (4 decimal packed bytes) are not OK, detected wrong sign of decimal packed data /an invalid sign 0 – not F, C, or D/ which caused the Data exception of ZAP instruction to occur.
Find the first operand data in the dump using the calculated address above(42808):
F 42800 – Go to 42808 – found 5 bytes: 000000000C – First operand data are correct decimal packed data – has sign C /but this data are not verified for validity/.
How to find Second operand error data location in which file it is and how to correct it?
From CKPRSTEF JOB the Cobol program PGM=DAU9000 JES produces JCL source SYSOUT using the following input files and data:
//BAKMSTR DD DSN=KCI09.d0595.BAKMSTR,DISP=SHR
//CSKCONF DD DSN=KCI09. d0595.CSKCONF,DISP=SHR
//DAKMSTR DD DSN=KCI08.d0595.NEWDAKMS,DISP=SHR
//DAKTR01 DD DSN=KCI09.d0595.DAKTR01,DISP=SHR
//DAKTRAN DD DSN=KCI09.&HLDATA.DAKTRAN,DISP=SHR
//FSCARDI DD *
6600020000002000087811000000200008781100000000 00001Y
The error record in the dump is one of the above files.
To find the file name, enter TSO/ISPF Ditto function for each file and Check with the key X’6600020000002000087811‘ from CKPRSTEF JOB input data:
//FSCARDI DD *
6600020000002000087811000000200008781100000000 00001Y
This key is found only for the file //DAKMSTR DD DSN=KCI08.d0595.NEWDAKMS, DISP=SHR.
To locate the start of the error record of DAKMSTR in the dump, use the information 660002 (start of the record key) from CKPRSTEF JOB input data as follows:
First find the dump address of the Second operand with error at address 1A380 (4 bytes – 19952120):
F 1A380– found 4 bytes: 19952120
From this location enter F 660002 prev to find the start of the DAKMSTR record in the dump at address 1A26C: 6600020000002000087811…..
To find the start of the Second operand data (8 bytes) in the record substract 1A26C (Error rec address) from 1A380 (Sec oper address) and we find x’114’ in decimal 276 displacement from the start of the record 6600020000002000087811 in file KCI08.d0595.NEWDAKMS.
First enter – Ditto edit – VSAM – file – KCI08.d0595.NEWDAKMS – in HEX.
Then locate the record with
Command ===> f x’6600020000002000087811’
Using PF5 go to position 277 (+ decimal 276 displacement) as follows:
277 . . . .80
19952120
To find the last byte (with the sign) add + 3 bytes to 277 (or 276+4) and we find the sign byte at 280 position.
There we may correct the found error byte x’20’ and replace it with x’2C’. Then enter PF3.
Submit the job CKPRSTEF – job CKPRSTEF finished OK with CC 0000.
3.4. Provoke program dump of PGM=DAU9000 execution (D0202_DAKTRAN – FEBRUARY 2002, for Account=0000001000000110)
To produce dump on ABEND for DAKTRAN file error during execution of Cobol program PGM=DAU9000 (only load module without source available), insert the statement //SYSABEND DD SYSOUT=A or //SYSUDUMP DD SYSOUT=* in the following JCL of job CKPRSTEF:
//CKPRSTEF JOB (9999),
// ,
// REGION=0M,
// MSGCLASS=X,MSGLEVEL=(1,1)
//JOBLIB DD DSN=KCI03.LIB.PROD.LOAD,DISP=SHR
// DD DSN=KCI33.LIB.PROD.LOAD,DISP=SHR
//* SET1 ZADAJTE MESEC I GODINA VAV VIDA HLDATA=DMMYY
//* SET1 SET HLDATA=D0595 MAY 1995
//* SET1 SET HLDATA=D030695 03.JUNE 1995
//* SET1 SET HLDATA=D070795 07.JULY 1995
//* SET1 SET HLDATA=D310795 31.JULY 1995
//* SET1 SET HLDATA=D0895 AUGUST 1995
//* SET1 SET HLDATA=D0196 JANUARY 1996
//* SET1 SET HLDATA=D0496 APRIL 1996
//* SET1 SET HLDATA=D0696 JUNE 1996
//* SET1 SET HLDATA=D0996 SEPTEMBER 1996
//* SET1 SET HLDATA=D0697 JUNE 1997
//* SET1 SET HLDATA=D1097 OCTOBER 1997
//* SET1 SET HLDATA=D1197 NOVEMBER 1997
//* SET1 SET HLDATA=D0298 FEBRUARY 1998
//* SET1 SET HLDATA=D0598 MAY 1998
//* SET1 SET HLDATA=D0698 JUNE 1998
//* SET1 SET HLDATA=D1298 DECEMBER 1998
//* SET1 SET HLDATA=D0599 MAY 1999
//* SET1 SET HLDATA=D0699 JUNE 1999
//* SET1 SET HLDATA=D0899 AUGUST 1999
//* SET1 SET HLDATA=D1199 NOVEMBER 1999
//* SET1 SET HLDATA=D1299 DECEMBER 1999
//* SET1 SET HLDATA=D0300 MARCH 2000
//* SET1 SET HLDATA=D0500 MAY 2000
//* SET1 SET HLDATA=D0700 JULY 2000
//* SET1 SET HLDATA=D0800 AUGUST 2000
//* SET1 SET HLDATA=D0900 SEPTEMBER 2000
//* SET1 SET HLDATA=D1200 DECEMBER 2000
//* SET1 SET HLDATA=D0101 JANUARY 2001
//* SET1 SET HLDATA=D0201 FEBRUARY 2001
//* SET1 SET HLDATA=D0301 MARCH 2001
//* SET1 SET HLDATA=D0401 APRIL 2001
//* SET1 SET HLDATA=D0501 MAY 2001
//* SET1 SET HLDATA=D0801 AUGUST 2001
//* SET1 SET HLDATA=D0901 SEPTEMBER 2001
//* SET1 SET HLDATA=D1001 OCTOBER 2001
//* SET1 SET HLDATA=D1101 NOVEMBER 2001
//* SET1 SET HLDATA=D1201 1 JANUARY 2002/D1201/
//SET1 SET HLDATA=D0202 FEBRUARY 2002
//* SET1 SET HLDATA=D0502 MAY 2002
//* SET1 SET HLDATA=D0602 JUNE 2002
//* SET1 SET HLDATA=D0702 JULY 2002
//* SET1 SET HLDATA=D1002 OCTOBER 2002
//* SET1 SET HLDATA=D1202 DECEMBER 2002
//* SET1 SET HLDATA=D0103 JANUARY 2003
//* SET1 SET HLDATA=D0403 APRIL 2003
//* SET1 SET HLDATA=D0603 JUNE 2003
//* SET1 SET HLDATA=D0903 SEPTEMBER 2003
//*
//DAU9000 EXEC PGM=DAU9000
//SYSOUT DD SYSOUT=*
//SYSPRINT DD SYSOUT=*
//SYSUDUMP DD SYSOUT=* or //SYSABEND DD SYSOUT=A
//BAKMSTR DD DSN=KCI09.&HLDATA..BAKMSTR,DISP=SHR
//CSKCONF DD DSN=KCI09.&HLDATA..CSKCONF,DISP=SHR
//DAKMSTR DD DSN=KCI09.&HLDATA..DAKMSTR,DISP=SHR
//DAKTR01 DD DSN=KCI09.&HLDATA..DAKTR01,DISP=SHR
//DAKTR02 DD DSN=KCI09.&HLDATA..DAKTR02,DISP=SHR
//DAKTR03 DD DSN=KCI09.&HLDATA..DAKTR03,DISP=SHR
//DAKTRAN DD DSN=KCI08.D0202.DAKTRAN,DISP=SHR
//FSCARDI DD *
6600020000001000000110000000100000011000000000 00001Y
/*
//*
3.5. PSW (Program Status Word) investigation of DAKTRAN error
For PSW investigation in TSO/ISPF – sd.st – do the following:
S CKPRSTEF (D0202_DAKTRAN – FEBRUARY 2002, for Account=0000001000000110) – analysis the SYMPTOM DUMP:
IEA995I SYMPTOM DUMP OUTPUT 308
SYSTEM COMPLETION CODE=0C7 REASON CODE=00000000
TIME=14.34.25 SEQ=23949 CPU=0000 ASID=0035
PSW AT TIME OF ERROR 078D1000 000156B2 ILC 6 INTC 07
ACTIVE LOAD MODULE ADDRESS=00007630 OFFSET=0000
NAME=DAU9000
DATA AT PSW 000156AC – F8977B38 6FD5D203 D780D0C8
AR/GR 0: 80BFCB60/000156A6 1: 00000000/000427F8
2: 00000000/000156A6 3: 00000000/0001ADB0
4: 00000000/000097A0 5: 00000000/00016D60
6: 00000000/00019DB0 7: 00000000/0001BDB0
8: 00000000/000077A0 9: 00000000/00016938
A: 00000000/0001DDB0 B: 00000000/00015F72
C: 00000000/0000772C D: 00000000/00042030
E: 00000000/50015650 F: 00000000/00000000
END OF SYMPTOM DUMP
Subtracting the instruction length value (ILC=06), in this case, 6, from the PSW address, would result in 156AC, which would point to the failing instruction with Interruption code (INTC=07 – Data exception ) as above ( DATA AT PSW) .
The PSW address of failing ZAP instruction is 156AC and the ZAP (98) instruction has the following contents: F8977B386FD5.
This Assembler instruction has 6 bytes as follows:
F8 – ZAP (move one packed number /Sec op/ to another /First op/) operation code
9 – length 10 of First operand data
7 – length 8 of Second operand data (extending from 8 to 10 bytes and checking the sign)
7 – Base register R7 of First operand address
B38 – Displacement D1 of First operand address
6 – Base register R6 of Second operand address
FD5 – Displacement D2 of Second operand address
Calculating First and Second operand addresses:
First operand address = R7 + D1 = 1BDB0 + B38 = 1C8E8
Second operand address = R6 + D2 = 19DB0 + FD5 = 1AD85
The first operand data has 10 bytes at address 1C8E8 and the second operand data has 8 bytes ataddress 1AD85).
3.6. DUMP investigation of the failing Assembler instruction and DAKTRAN repare
To find the failing instruction in the dump do the following:
? CKPRSTEF (D0202_DAKTRAN – FEBRUARY 2002, for Account=0000001000000110) – Enter the dump with:
S SYSUDUMP DAU9000 104 BCA1MGP X LOCAL 88,988
Find the failing instruction position in the dump using SYMPTOM DUMP information (DATA AT PSW 000156AC):
F 156A0 – Goto 156AC – F8977B386FD5 – the failing instruction ZAP=F8 (moving packed number of second operand to First operand and checking sign).
Find the second operand data in the dump using the calculated address above(1AD85):
F 1AD80 – Goto 1AD85 – found 8 bytes: 0000000000001200 – Second operand data (8 decimal packed bytes) are not OK, detected wrong sign of decimal packed data /an invalid sign 0 – not F, C, or D/ which caused the Data exception of ZAP instruction to occur.
Find the first operand data in the dump using the calculated address above(1C8E8):
F 1C8E0 – Goto 1C8E8 – found 10 bytes – 00000000000000000000 – First operand data are not verified for validity.
How to find Second operand error data location in which file it is and how to correct it?
From CKPRSTEF JOB of Cobol program PGM=DAU9000 JES produces JCL source SYSOUT using the following input files and data:
//BAKMSTR DD DSN=KCI09.&HLDATA..BAKMSTR,DISP=SHR
//CSKCONF DD DSN=KCI09.&HLDATA..CSKCONF,DISP=SHR
//DAKMSTR DD DSN=KCI09.&HLDATA..DAKMSTR,DISP=SHR
//DAKTR01 DD DSN=KCI09.&HLDATA..DAKTR01,DISP=SHR
//DAKTR02 DD DSN=KCI09.&HLDATA..DAKTR02,DISP=SHR
//DAKTR03 DD DSN=KCI09.&HLDATA..DAKTR03,DISP=SHR
//DAKTRAN DD DSN=KCI08.D0202.DAKTRAN,DISP=SHR
//FSCARDI DD *
6600020000001000000110000000100000011000000000 00001Y
/*
//*
The error record in the dump is into one of the above files.
To find the file name, enter TSO/ISPF Ditto function for each file and Check with the key X’6600020000001000000110‘ from CKPRSTEF JOB input data:
//FSCARDI DD *
6600020000001000000110000000100000011000000000 00001Y
This key is found only for the file // DAKTRAN DD DSN=KCI08.d0595. DAKTRAN, DISP=SHR.
To locate the start of the error record of DAKTRAN in the dump, use the information 660002 (start of the record key) from CKPRSTEF JOB input data as follows:
First find the dump address of the Second operand with error at address 1AD85 (8 bytes – 0000000000001200):
F 1AD80 – Goto 1AD85 – found 8 bytes: 0000000000001200
From this location enter F 660002 prev to find the start of the DAKTRAN record in the dump at address 1AD6C: 66000200000010000001102002009C…..
To find the start of the Second operand data (8 bytes) in the record substract 1AD6C(Error rec address) from 1AD85(Sec oper address) and we find x’19’ in decimal 25 displacement from the start of the record 66000200000010000001102002009C in file KCI08.D0202.DAKTRAN.
First enter – Ditto edit – VSAM – file – KCI08.D0202.DAKTRAN – in HEX.
Then locate the record with
Command ===> f x’66000200000010000001102002009C’
Using PF5 go to position 26 (+ decimal 25 displacement) as follows:
26 . . . . . 30 . . . 33
0000000000001200
To find the last byte (with the sign) add + 7 bytes to 26 (or 25+8) and we find the sign byte at 33 position.
There we may correct the found error byte x’00’ and replace it with x’0C’. Then enter PF3.
Submit the job CKPRSTEF – job CKPRSTEF finished OK with CC 0000.
Incoming search terms:
- s0c7
- system completion code=0c7
- abend s0c7
- S0C7 abend
- system abend code 0c7
- soc7 abend in jcl
- s0c7 abend in cobol
- abend 0c7
- 0c7 abend
- soc7 abend in cobol
Comments
Stefan (Oct 09, 2021)
асдсдса