Museum

Home

Lab Overview

Retrotechnology Articles

Online Manuals

⇒ exc_continue(3) — OSF/1 3.0 αXP

Media Vault

Software Library

Restoration Projects

Artifacts Sought

Related Articles

exception_intro(3)

exception_dispatcher(3)

exc_lookup_function_entry(3)

signal(2)

sigaction(2)

setjmp(3)

ieee(3)

excpt(4)

c_excpt(4)

signal(4)

pdsc(4)

exc_resume(3)  —  Subroutines

NAME

exc_resume, exc_longjmp, exc_continue, exc_unwind, RtlUnwindRfp  - entry points that support resuming execution of user code. 

LIBRARY

Exception Handling Library (libexc.a)

SYNOPSIS

#include <excpt.h>
void exc_resume(
                PCONTEXT         contextRecord);
void exc_longjmp(
                PCONTEXT         contextRecord,
                long             returnValue);
void exc_continue(
                PCONTEXT         contextRecord);
void exc_unwind(
                void              TargetFrame,
                void              TargetIp,
                system_exrec_type ∗exceptionRecord,
                long              returnValue);
void RtlUnwindRfp(
                void              ∗TargetRealFrame,
                void              ∗TargetIp,
                system_exrec_type ∗exceptionRecord,
                long              returnValue);

PARAMETERS

contextRecordPointer to a struct sigcontext (see signal(2)) used to represent a procedure’s context. 

returnValueValue to be passed to the continuing code at the completion of the unwind. 

TargetFrameIf nonzero, virtual frame pointer of the target procedure invocation to which the unwind is to be done; if zero, specifies that an exit unwind is to be initiated and causes the EXCEPTION_EXIT_UNWIND flag to be set in the exception record. 

TargetIPIf TargetRealFrame is nonzero, address within the target invocation at which to continue execution; otherwise this parameter is ignored. 

exceptionRecord
Address of primary exception record.

TargetRealFrame
If nonzero, real frame pointer of the target procedure invocation to which the unwind is to be done; if zero, specifies that an exit unwind is to be initiated and causes the EXCEPTION_EXIT_UNWIND flag to be set in the exception record. 

DESCRIPTION

exc_resume and exc_continue perform essentially the same operation as longjmp(3). The exc_resume function is a libexc entry point. 

exc_longjmp calls exc_unwind, setting up its arguments from information taken from the contextRecord argument. If the returnValue argument is a zero, it is set to one before the call. 

exc_unwind initiates an unwind of procedure call frames. It sets the EXCEPTION_UNWINDING flag in the exception flags of the exception record, which describes the machine state at the time of the exc_unwind call. If the TargetFrame argument is zero, then exc_unwind also sets the EXCEPTION_EXIT_UNWIND flag.  It then scans the procedure call frames towards the base of the call stack to find the target of the unwind operation. 

RtlUnwindRfp is similar to exc_unwind except that its first argument is a real frame pointer instead of a virtual frame pointer. Real frame pointers point to the bottom of the statically allocated portion of a stack frame. Virtual frame pointers point to the top of the stack frame. 

As it encounters each frame, the unwind code determines the program counter where control left the corresponding function by looking at exception handler information in the runtime function table built by the linker. If the respective routine has an exception handler, then the unwind code calls it. This handler should perform cleanup code required for that activation.  Programs written in the C programming language, which supports structured exception handling, usually contain a try...finally block that implements a termination handler that performs these chores (see c_excpt(4)).  The unwind code also calls a handler when it reaches the TargetFrame so that any scope-oriented cleanup code or termination handler can execute.  In this case, it sets the EXCEPTION_TARGET_FRAME flag in the ExceptionFlags field of the exception record. 

Once it finds the TargetFrame (if specified) and calls its handler (if available), exc_unwind:

       •sets the PC to the TargetIp

       •sets the return value to be the returnValue argument, if the returnValue argument is non-zero,

       •sets the return value to be the ExceptionCode of the exception record if the returnValue argument is zero

       •calls exc_continue

FILES

/usr/ccs/lib/cmplrs/cc/libexc.a - exception handling library
/usr/include/excpt.h - include file
/usr/include/pdsc.h - include file
/usr/include/signal.h - include file
/usr/include/machine/fpu.h - include file

RELATED INFORMATION

Functions: exception_intro(3), exception_dispatcher(3), exc_lookup_function_entry(3), signal(2), sigaction(2), setjmp(3), __exc_last_chance(3), ieee(3). 

Files: excpt(4), c_excpt(4), signal(4), pdsc(4). 

Assembly Language Programmer’s Guide. 

DEC OSF/1 Calling Standard for AXP Systems. 

Typewritten Software • bear@typewritten.org • Edmonds, WA 98026