CEE3AB2—Terminate enclave with an abend and reason code

CEE3AB2 requests that Language Environment® terminate the enclave with an abend and user-defined reason code. The issuing of the abend can be either with or without clean-up, with the type of dumps the user requires. There is no return from this service, nor is there any condition that is associated with it.
Read syntax diagramSkip visual syntax diagram
Syntax

>>-CEE3AB2--(--abcode--,--reasoncode--,--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.
reasoncode (input)
A fullword integer, specifying the reason code that is issued by the user. If no reason code is specified, the reason code is 0.
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 consideration

  • In a multithreaded environment, CEE3AB2 applies to the enclave.

Usage notes

  1. Language Environment abend codes are usually in the range of 4000 (X’FA0’) to 4095 (X’FFF’). Use the range of 0 to 3999 to avoid confusion with Language Environment abend codes. The value that is specified for the abend code is passed directly to the ABEND macro without further verification.
  2. When TRAP(OFF) is specified, CEE3AB2 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.

For more information

Examples

  1. Following is an example of CEE3AB2 called by C/C++.
    /*Module/File Name: EDC3AB2    */                                      
    /*********************************************************************/
    /*                                                                   */
    /* THIS EXAMPLE CALLS CEE3AB2 TO TERMINATE THE ENCLAVE WITH AN ABEND */
    /* AFTER CLEAN-UP TAKES PLACE. USER COULD ALSO SPECIFY THEIR OWN     */
    /* REASON CODE.                                                      */
    /*                                                                   */
    /*********************************************************************/
                                                                           
    #include <leawi.h>                                                   
                                                                           
    int main(void) {                                                       
                                                                           
     _INT4 code,reason,cleanup;    
      code = 1234; /* Abend code to issue */                                
      reason = 9;  /* User defined reason code*/                            
      cleanup = 3; /* Specify 3, for an ABEND with cleanup & with no dumps*/
      CEE3AB2(&code,&reason,&cleanup); 
    }                                                                       
  2. Following is an example of CEE3AB2 called by COBOL.
    CBL LIB,QUOTE                                              
          **********************************************    
          *Module/File Name: IGZTAB2                           
          **********************************************       
          ** Function: CEE3AB2 - Terminate enclave    **       
          **           with an abend and user defined **       
          **           reason code                    **       
          **                                          **       
          ** In this example, CEE3AB2 is called to    **       
          ** terminate the enclave with an abend and  **       
          ** a user defined reason code along with    **       
          ** Language Environment cleanup             **       
          **********************************************       
           IDENTIFICATION DIVISION.                            
           PROGRAM-ID. CBL3AB2.                                
           DATA DIVISION.                                      
           WORKING-STORAGE SECTION.                            
           01  ABDCODE                 PIC S9(9) BINARY.       
           01  RESCODE                 PIC S9(9) BINARY.            
           01  TIMING                  PIC S9(9) BINARY.            
           PROCEDURE DIVISION.                                      
           PARA-CBLMGET.                                            
                                                                    
          **********************************************            
          ** 1234 is the abend code to be issued,     **            
          ** 9 is the reason code for the abend.      **            
          ** A timing of four requests an abend       **            
          ** with clean-up.                           **            
          **********************************************            
                    MOVE 1234 TO ABDCODE.                           
                    MOVE 9 TO RESCODE.                              
                    MOVE 4 TO TIMING.                               
                    CALL "CEE3AB2" USING ABDCODE, RESCODE, TIMING.  
                                                                    
                    GOBACK.                                         
  3. Following is an example of CEE3AB2 called by PL/I.
    *PROCESS MACRO;                                           
                   
      /***************************************************/                 
       /*Module/File Name: IBM3AB2                                        */
       /*******************************************************************/
       /**                                                               **/
       /** Function: CEE3AB2 - Terminate enclave with abend and user     **/
       /**                     defined reason code                       **/
       /**                                                               **/
       /** In this example, CEE3AB2 is called to terminate the enclave   **/
       /** with an abend and user defined reason code along with         **/
       /** Language Environment cleanup                                  **/
       /**                                                               **/
       /*******************************************************************/
      PLI3AB2: PROCEDURE OPTIONS (MAIN) REORDER;              
                                                              
        %INCLUDE  CEEIBMAW;                                   
        %INCLUDE  CEEIBMCT;                                   
                                                              
        DCL ABDCODE REAL FIXED BINARY(31,0);                  
        DCL RESCODE REAL FIXED BINARY(31,0);                  
        DCL TIMING  REAL FIXED BINARY(31,0);                  
                                                              
        ABDCODE = 3333; /* Choose code to abend with     */   
        RESCODE = 9;    /* User defined reason code      */   
        TIMING = 4;     /* Specify 4, for an abend with  */   
                        /* cleanup and no dumps          */   
                                                              
        /*************************************************/   
        /* Call CEE3AB2 to request an abend 3333         */   
        /* reason code 9 with cleanup                    */   
        /*************************************************/   
        CALL CEE3AB2 ( ABDCODE, RESCODE, TIMING );    
                                                      
      END PLI3AB2;