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:
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.
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.