Endevor user exits using the EPC1UEXT stub are not working
search cancel

Endevor user exits using the EPC1UEXT stub are not working

book

Article ID: 392638

calendar_today

Updated On:

Products

Endevor

Issue/Introduction

An Endevor user exit that uses the EPC1UEXT stub is apparently doing nothing. EN$TRXIT trace shows that the module is loaded and called when required, but the exit apparently does nothing and does not eventually update the control blocks passed to it.

How to diagnose this situation?

Resolution

One possibility would be to add a DISPLAY verb so that the exit issues a message to indicate its presence when it receives control.

The output from DISPLAY verb normally prints to SYSOUT DD. However, DISPLAY 'text' UPON CONSOLE causes the message to print to JESMSGLG so that you can easily see it.

If no message shows up this way, then EPC1UEXT is not calling the COBOL exit. In this case you need to review how the load module is linked:

  • The PROGRAM-ID of the COBOL exit must be C1UEXTnn, where nn equals the exit number (01 to 06)
  • The binder statements need to INCLUDE both EPC1UEXT and the COBOL exit
  • The main entry point must be EPC1UEXT

For example:

//SYSLIN   DD *
 INCLUDE USREXIT
 INCLUDE SYSLIB(EPC1UEXT)
 ENTRY EPC1UEXT
 NAME C1UEXT02(R)
/*

Additional Information

The PROGRAM-ID of C1UEXTnn is extremely important. The stub will check whether the entry point has been resolved during the binding of the load module and call it only if it is found to be resolved. Otherwise, EPC1UEXT will return to the caller without further action.

You can check whether the C1UEXTnn point is resolved in the cross-reference report of the bind step for the exit load module, which is triggered by option XREF in the binder For example:

1                                       C R O S S - R E F E R E N C E  T A B L E                                        
                                        _________________________________________                                        
                                                                                                                         
 TEXT CLASS = B_TEXT                                                                                                    
                                                                                                                         
 ---------------  R E F E R E N C E  --------------------------  T A R G E T  -------------------------------------------
   CLASS                            ELEMENT       |                                            ELEMENT                  |
   OFFSET SECT/PART(ABBREV)          OFFSET  TYPE | SYMBOL(ABBREV)   SECTION (ABBREV)           OFFSET CLASS NAME       |
                                                  |                                                                     |
      230 EPC1UEXT                      230 V-CON | C1UEXT01         $UNRESOLVED(W)                                     |
      234 EPC1UEXT                      234 V-CON | C1UEXT02         C1UEXT02                        0 C_CODE           |
      238 EPC1UEXT                      238 V-CON | C1UEXT03         $UNRESOLVED(W)                                     |
      23C EPC1UEXT                      23C V-CON | C1UEXT04         $UNRESOLVED(W)                                     |
      240 EPC1UEXT                      240 V-CON | C1UEXT05         $UNRESOLVED(W)                                     |
      244 EPC1UEXT                      244 V-CON | C1UEXT06         $UNRESOLVED(W)                                     |
      26C CEESG004                       14 A-CON | IGZEOPT          $UNRESOLVED(W)                                     |
      270 CEESG004                       18 A-CON | IGZETUN          $UNRESOLVED(W)                                     |
      274 CEESG004                       1C A-CON | IGZXRES1         $UNRESOLVED(W)                                     |

In this above example, entry point C1UEXT02 is resolved so EPC1UEXT will call it, but only when Endevor calls it during exit 02 processing.

It's worth to mention that the unresolved weak external references (noted by $UNRESOLVED(W) in the above report) are considered normal by the binder so the final RC is zero so an error in this area could pass unnoticed resulting in a non-operative user exit.