Exception occurs in C
This scenario describes the behavior of an application that contains a C and Fortran routine. In this scenario, a Fortran main routine invokes a C subroutine. An exception occurs in the C subroutine.
The actions taken follow the three Language Environment condition handling steps: enablement, condition, and termination imminent.
- In the enablement step, C determines
whether the exception in the C routine
should be enabled and treated as a condition. If any of the following
are true, the exception is ignored, and processing continues at the
next sequential instruction after where the exception occurred:
- You specified SIG_IGN for the exception in a
call to signal(). Note: The system or user abend corresponding to the signal(SIGABND) or the Language Environment message 3250 is not ignored. The enclave is terminated.
- The exception is one of those listed as masked in Table 2, and you have not enabled it using the CEE3SPM callable service.
- You did not specify any action, but the default action for the condition is SIG_IGN (see Table 2).
- You specified SIG_IGN for the exception in a
call to signal().
- If a user-written condition handler has been registered using
CEEHDLR on the C stack
frame, it is given control. If it issues a resume, with or without
moving the resume cursor, the condition handling step ends. Processing
continues in the routine to which the resume cursor points.
In this example, there is not a user-written condition handler registered for the condition, so the condition is percolated.
- The C global
error table is now examined for signal handlers that have been registered
for the condition.
If there is a signal handler registered for the condition, it is given control. If it issues a resume or a call to longjmp(), the condition handling step ends. Processing resumes in the routine to which the resume cursor points.
In this example no C signal handler is registered for the condition, so the condition is percolated.
- The condition is still unhandled. If C does not recognize the condition, or if the C default action (listed in Table 2) is to terminate, the condition is percolated.
- There is no user-written condition handler on the Fortran stack frame (because CEEHDLR cannot be called from a Fortran routine), and the condition is percolated.
- If the condition is of severity 0 or 1, the Language Environment default actions take place, as described in Table 1.
- If the condition is of severity 2 or above, Language Environment default action is to promote the condition to T_I_U (Termination Imminent due to an Unhandled condition) and redrive the stack. Condition handling now enters the termination imminent step.
- If, on the second pass of the stack, no condition handler moves the resume cursor and issues a resume, Language Environment terminates the thread.