CEE3ABD—Terminate enclave with an abend

CEE3ABD requests that Language Environment terminate the enclave with an abend. The issuing of the abend can be either with or without clean-up. There is no return from this service, nor is there any condition associated with it.
Read syntax diagramSkip visual syntax diagram
Syntax

>>-CEE3ABD--(--abcode--,--clean-up--)--------------------------><

abcode (input)
A fullword integer, no greater than 4095, specifying the abend code that is issued. Under CICS®, this fullword integer is converted to EBCDIC.
clean-up (input)
Indicates if the abend should result in clean-up of the enclave's resources. The acceptable values for clean-up are as follows:
0
Issue the abend without clean-up
1
Issue the abend with normal enclave termination processing
2
Issue the abend with enclave termination processing honoring the TERMTHDACT runtime option for taking a system dump of the user address space but suppressing the CEEDUMP
3
Issue the abend with enclave termination processing suppressing both the CEEDUMP and system dump if requested by the TERMTHDACT runtime option
4
Issue the abend with enclave termination processing honoring the TERMTHDACT runtime option for taking a CEEDUMP but suppressing the system dump
5
Issue the abend with enclave termination processing forcing a system dump of the user address space and suppressing the CEEDUMP

If an illegal value for clean-up is passed, the abend is issued without clean-up.

If clean-up is 0, no Language Environment dump is generated. A system dump, however, is requested when issuing the abend. Under CICS, a transaction dump is taken. To get a dump under CMS, specify FILEDEF SYSABEND PRINTER or FILEDEF SYSUDUMP PRINTER.

If clean-up is 0, Language Environment condition handling is disabled for the current enclave and termination activities are not performed. Event handlers are not driven; Debug Tool is not invoked; user exits are not invoked; and user-written condition handlers are not invoked.

When clean-up is 1, the abend is processed in the same manner as if it were a non-Language Environment abend. Its processing is affected by the ABPERC and TRAP options, the filedef abends percolated in the assembler user exit, and other elements of the environment related to abend processing. In particular, the condition handler can intercept the abend and give the application a chance to handle the abend. If the condition remains unhandled, normal termination activities are performed: information such as a Language Environment dump is produced, depending on the setting of the TERMTHDACT option; event handlers are driven; Debug Tool is invoked; and user exits are invoked. Assembler user exit settings control if the application actually terminates with an abend.

When clean-up is 2, it follows the abend processing as when clean-up is 1 except the CEEDUMP is suppressed.

When clean-up is 3, it follows the abend processing as when clean-up is 1, however CEEDUMP and system dumps are both suppressed

When clean-up is 4, it follows the abend processing as when clean-up is 1, however only the system dumps are suppressed.

When clean-up is 5, it follows the abend processing as when clean-up is 1, however forcing a system dump to be taken and suppressing the CEEDUMP.

z/OS® UNIX considerations

  • In a multithreaded environment, CEE3ABD applies to the enclave.
  • When ALL31(ON) is in effect, Language Environment allocates thread-specific control blocks from the anywhere heap.

Usage notes

  1. Recommendation: Language Environment abend codes are usually in the range of 4000 (X'FA0') to 4095 (X'FFF'). You should use the range of 0 to 3999 to avoid confusion with Language Environment abend codes. The value specified for the abend code is passed directly to the ABEND macro without further verification.
  2. When TRAP(OFF) is specified, CEE3ABD behaves in a similar manner to clean-up 0.
  3. In a non-CICS environment, a system dump of the user address space is taken only if a SYSMDUMP, SYSUDUMP, or SYSABEND DD card is present.
  4. Users can look at CEE3AB2 to include user reason codes separately from abend codes.

For more information

Examples

  1. An example of CEE3ABD called by C/C++.
    /*Module/File Name: EDC3ABD   */
     /****************************************************/
     /*                                                  */
     /*  Licensed Materials - Property of IBM            */
     /*                                                  */
     /*  5688-198 (C) Copyright IBM Corp. 1991, 1995     */
     /*  All rights reserved                             */
     /*                                                  */
     /*  US Government Users Restricted Rights - Use,    */
     /*  duplication or disclosure restricted by GSA     */
     /*  ADP Schedule Contract with IBM Corp.            */
     /*                                                  */
     /****************************************************/
    
    #include <leawi.h>
    
    int main(void) {
    
      _INT4 code, timing;
    
      code = 1234; /* Abend code to issue */
      timing = 0;
    
      CEE3ABD(&code,&timing);
    }
  2. An example of CEE3ABD called by COBOL.
    CBL LIB,QUOTE
          *************************************************
                *Module/File Name: IGZT3ABD
          **********************************************
          ** CBL3ABD - Call CEE3ABD to terminate the  **
          **           enclave with an abend          **
          **********************************************
           IDENTIFICATION DIVISION.
           PROGRAM-ID. CBL3ABD.
    
           DATA DIVISION.
           WORKING-STORAGE SECTION.
           01  ABDCODE                 PIC S9(9) BINARY.
           01  TIMING                  PIC S9(9) BINARY.
           PROCEDURE DIVISION.
           PARA-CBLMGET.
    
          **********************************************
          ** 3415 is the abend code to be issued,     **
          ** a timing of zero requests an abend       **
          ** without clean-up                         **
          **********************************************
                    MOVE 3415 TO ABDCODE.
                    MOVE 0 TO TIMING.
                    CALL "CEE3ABD" USING ABDCODE , TIMING.
    
                    GOBACK.
    CBL LIB,QUOTE
          *************************************************
          *Module/File Name: IGZT3ABD
          **********************************************
          ** CBL3ABD - Call CEE3ABD to terminate the  **
          **           enclave with an abend          **
          **********************************************
           IDENTIFICATION DIVISION.
           PROGRAM-ID. CBL3ABD.
    
           DATA DIVISION.
           WORKING-STORAGE SECTION.
           01  ABDCODE                 PIC S9(9) BINARY.
           01  TIMING                  PIC S9(9) BINARY.
           PROCEDURE DIVISION.
           PARA-CBLMGET.
    
          **********************************************
          ** 3415 is the abend code to be issued,     **
          ** a timing of zero requests an abend       **
          ** without clean-up                         **
          **********************************************
                    MOVE 3415 TO ABDCODE.
                    MOVE 0 TO TIMING.
                    CALL "CEE3ABD" USING ABDCODE , TIMING.
    
                    GOBACK.
  3. An example of CEE3ABD called by PL/I.
    *PROCESS MACRO;
      /***************************************************/
      /*                                                 */
      /*  Licensed Materials - Property of IBM           */
      /*                                                 */
      /*  5688-198 (C) Copyright IBM Corp. 1993, 1995    */
      /*  All rights reserved                            */
      /*                                                 */
      /*  US Government Users Restricted Rights - Use,   */
      /*  duplication or disclosure restricted by GSA    */
      /*  ADP Schedule Contract with IBM Corp.           */
      /*                                                 */
      /***************************************************/
     /*Module/File Name: IBM3ABD
     /****************************************************/
     /**                                                 */
     /** Function: CEE3ABD - terminate enclave with an   */
     /**                     abend                       */
     /**                                                 */
     /** In this example, CEE3ABD is called with a       */
     /** timing value of 1.  This requests an abend that */
     /** is deferred until clean-up takes place.         */
     /**                                                 */
     /****************************************************/
     PLI3ABD: PROC OPTIONS(MAIN);
    
        %INCLUDE  CEEIBMAW;
        %INCLUDE  CEEIBMCT;
    
        DCL ABDCODE REAL FIXED BINARY(31,0);
        DCL TIMING  REAL FIXED BINARY(31,0);
    
        ABDCODE = 3333; /* Choose code to abend with     */
        TIMING = 1;     /* Specify 1, for an abend with  */
                        /*    clean-up                   */
    
        /* Call CEE3ABD to request an abend 3333 with    */
        /*    clean-up                                   */
        CALL CEE3ABD ( ABDCODE, TIMING );
    
     END PLI3ABD;