Language Environment abends and the enablement step
You can prevent Language Environment from automatically issuing abends for certain exceptions by requesting that an abend code or codes be percolated. If an abend is percolated, neither Language Environment nor an HLL can handle it; only the operating system can respond to the abend.
Abends that are not retryable (for example, x37 ABENDs) are always percolated.
Additionally, abends can be percolated in three ways:
- You can specify in the assembler user exit CEEXBITA a list of abend codes that Language Environment percolates. You can specify both system abends and user abends. See Using runtime user exits for more information.
- The ABPERC runtime option allows you to specify which (if any)
abend code should be percolated by Language Environment. ABPERC is intended for
use as a debugging tool that allows the application to execute with
TRAP(ON).
For a list of Language Environment-issued abends and information about using ABPERC to debug your application, see z/OS Language Environment Runtime Messages and z/OS Language Environment Debugging Guide. See z/OS Language Environment Programming Reference for more information about the TRAP and ABPERC runtime options.
- If an abend is issued from a request block (RB) on which Language Environment did not
establish an ESTAE, the abend will be percolated to the system.
For example, COBOL is the main program, running on an RB, where Language Environment establishes an ESTAE. The COBOL application determines an error condition has occurred, and it calls an assembler program. This assembler program issues an SVC LINK to a non-Language Environment enabled assembler program, creating a new RB. Neither of these assembler programs establishes an ESTAE or an ESPIE. The assembler program on the new RB, where no Language Environment recovery has been established, issues an SVC ABEND. When the SVC ABEND is issued from the second RB, Language Environment, which is only active on the first RB, will percolate the abend to the system.
As a result, Language Environment member languages will not be called for termination processing and any open files may be closed by MVS™ task termination. If there are DCB exits associated with any of the open files, these exits may be called from task termination, and may result in some unexpected S0Cx abends since the member language did not initiate the close of the files.
To avoid these scenarios, do one of the following:- Make the assembler program Language Environment conforming by using CEEENTRY and CEETERM macros.
- Do not use SVC LINK to issue abends from assembler programs. Use the Language Environment callable service CEE3ABD
- Make sure that all files are closed in the application before linking to an assembler routine to issue an abend.