Endevor may get a S0C4 abend when using a copy of IEFBR14 to replace an user exit
search cancel

Endevor may get a S0C4 abend when using a copy of IEFBR14 to replace an user exit

book

Article ID: 391252

calendar_today

Updated On:

Products

Endevor

Issue/Introduction

In order to temporarily disable an Endevor user exit, you may happen to try placing a copy of load module IEFBR14 with the same name as the user exit ahead of the real user exit module in STEPLIB DD. This will effectively disable the user exit and is certainly easier than adjusting the user exits table or removing the module from linklist in case it resides there.

However, this practice introduces a SMALL possibility of a S0C4 abend when Endevor loads the module.

The abend would arise at program BSTPMPGM which is part of load module BSTPMOPS

The abending instruction in the symptom dump is D507 Bxxx 9008  (xxx varies depending of the level of program BSTPMOPS)

At the time of the abend, register R9 contains an address ending in FF8. For example, 000C3FF8

Cause

When Endevor loads a program, it checks its contents to see whether it contains a particular coremark at offset 8 to decide on further processing

Module IEFBR14 is only 8 bytes long, meaning that, for this module, the above check accesses storage which is beyond the end of the module.

If the module happens to load at the very last 8 bytes of a page, the above check will fall into the next page. If that page is not allocated to the address space, this will cause the S0C4 abend.

Resolution

Force the module to be page-aligned. This way, it will always load at the start of a page and the above check will never raise a S0C4 abend. For example:

//STEP1 EXEC PGM=IEWL
//SYSPRINT DD SYSOUT=*
//LINKLIB DD DISP=SHR,DSN=SYS1.LINKLIB
//SYSLMOD DD DISP=SHR,DSN=your.loadlib
//SYSIN DD *
 INCLUDE LINKLIB(IEFBR14)
 PAGE IEFBR14
 NAME yourmodule(R)
/*

Note that Endevor only reads the contents of the load module. Therefore there is no risk of any storage overlay.

Additional Information

Sample abend report showing the symptom

 16.35.08 JOB35769  +CCSR010E C1SSESTA S0C4 at 000398F0 LMOD BSTPMOPS CSECT BSTPMPGM +001878 <jobname> <stepname> <procstep>
 16.35.08 JOB35769  +CCSR021I OWNER = Endevor R19.0
 16.35.08 JOB35769  +CCSR022I MODULE = BSTPMPGM FMID = CSIQJ00 RMID = LU09555
 16.35.08 JOB35769  +CCSR061I PSW: 00000000 00000000 078D0000 800398F0
 16.35.08 JOB35769  +CCSR062I ILC: 06 INTERRUPT CODE: 11
 16.35.08 JOB35769  +CCSR067I COMPLETION CODE S0C4 REASON CODE 00000011
 16.35.08 JOB35769  +CCSR063I TRANSLATION EXCEPTION ADDRESS: 00000000_000C4800
 16.35.08 JOB35769  +CCSR064I DATA AT PSW 000398EA : 50008028 1BFFD507 B2889008 < --- abending instruction CLC X'288'(R11),8(R9)
 16.35.08 JOB35769  +CCSR065I HOME = 013F  PRIMARY = 013F  SECONDARY = 013F
 16.35.08 JOB35769  +CCSR070I GR00 - GR01  00000000_2FD17314 00000000_2FD172E8
 16.35.08 JOB35769  +CCSR070I GR02 - GR03  00000000_00087848 00000000_0002C250
 16.35.08 JOB35769  +CCSR070I GR04 - GR05  00000000_0002C3A4 00000000_00039400
 16.35.08 JOB35769  +CCSR070I GR06 - GR07  00000000_00000105 00000000_00084FA8
 16.35.08 JOB35769  +CCSR070I GR08 - GR09  00000000_2FD172E8 00000000_000C3FF8 <--- base register R9 pointing at the end of a page
 16.35.08 JOB35769  +CCSR070I GR10 - GR11  00000000_80085B1C 00000000_00039F18
 16.35.08 JOB35769  +CCSR070I GR12 - GR13  00000000_000398A0 00000000_000878C8
 16.35.08 JOB35769  +CCSR070I GR14 - GR15  00000000_800398C0 00000000_00000000
 16.35.08 JOB35769  +CCSR071I AR00 - AR03  00000080 00000000 00000000 00000000
 16.35.08 JOB35769  +CCSR071I AR04 - AR07  00000000 00000000 00000000 00000000
 16.35.08 JOB35769  +CCSR071I AR08 - AR11  00000000 00000000 00000000 00000000
 16.35.08 JOB35769  +CCSR071I AR12 - AR15  00000000 00000000 00000000 00000000

 

A formatted SYSUDUMP for this abend shows that a 8-byte module has loaded at address 000C3FF8, right at the last 8 bytes from a page

0LPA/JPA MODULE                                                                                                          
 NAME=C1DBBRDG                                                                                                           
 000C3FE0                                                          1BFF07FE 00000000   *                        ........*
0LPA/JPA MODULE                                                                                                          
 NAME=C1BM3000                                                                                                           

 

A page is composed of 4096 contiguous bytes. The addresses in a particular page range from xxxxx000 to xxxxxFFF (in this case, 000C3000 to 000C3FFF). 

The second operand 9008 in the abending instruction means '8 bytes after the address pointed to by register 9'. 

Adding 8 to the R9 contents 000C3FF8 results in address 000C4000, which is the start of the next page and might cause the S0C4 abend.