Linux Standard Base Core Specification, Generic Part | ||
---|---|---|
<<< Previous | Next >>> |
Forced unwinding is a single-phase process. stop and stop_parameter control the termination of the unwind process instead of the usual personality routine query. Stop function stop is called for each unwind frame, with the parameteres described for the usual personality routine below, plus an additional stop_parameter.
When stop identifies the destination frame, it
transfers control to the user code as appropriate without returning,
normally after calling _Unwind_DeleteException(). If not,
then it should return an _Unwind_Reason_Code
value.
If stop returns any reason code other than
_URC_NO_REASON, then the stack state is indeterminate
from the point of view of the caller of
_Unwind_ForcedUnwind(). Rather than attempt to return,
therefore, the unwind library should use the
exception_cleanup
entry in
object, and then
call abort().
This is not the destination from. The unwind runtime will call frame's
personality routine with the _UA_FORCE_UNWIND
and _UA_CLEANUP_PHASE
flag set in
actions, and then unwind to the next frame
and call the stop() function again.
In order to allow _Unwind_ForcedUnwind() to
perform special processing when it reaches the end of the stack, the
unwind runtime will call it after the last frame is rejected, with a
NULL
stack pointer in the context, and the
STOP() FUNCTION SHALL CATCH THIS CONDITION. iT MAY
return this code if it cannot handle end-of-stack.
The stop() function may return this code for other fatal conditions like stack corruption.
<<< Previous | Home | Next >>> |
_Unwind_FindEnclosingFunction | Up | _Unwind_GetCFA |