VMS Help  —  MACRO  /MIGRATION  MACRO Compiler Directives, .EXCEPTION ENTRY, Parameters
 preserve=<>

    Register set that forces the compiler to save and restore across
    the routine call the contents of registers. By default, the
    compiler saves at routine entry and restores at routine exit
    the full 64-bit contents of any register that is modified by a
    routine.

    In the case of an .EXCEPTION_ENTRY routine, exception dispatching
    saves R2 through R7 on the stack (along with the PC and PSL) and
    the values of these registers are restored by the REI instruction
    executed by the routine itself. Other registers, if used, are
    saved in code generated by the compiler, and all other registers
    are saved if the routine issues a CALL or JSB instruction.

 stack_base

    Register into which the stack pointer (SP) value is moved at
    routine entry. At exception entry points, exception dispatching
    pushes onto the stack registers R2 through R7, the PC, and the
    PSL. Note that the Alpha counterpart for the VAX register known
    as the PSL is the processor status (PS) register. The value
    returned to the register specified in the stack_base helps an
    exception service routine locate the values of these registers.

    You can use the macro $INTSTKDEF in SYS$LIBRARY:LIB.MLB to define
    symbols for the area on the stack where R2-R7, the PC, and the
    PSL are stored. The symbols are:

    o  INTSTK$Q_R2

    o  INTSTK$Q_R3

    o  INTSTK$Q_R4

    o  INTSTK$Q_R5

    o  INTSTK$Q_R6

    o  INTSTK$Q_R7

    o  INTSTK$Q_PC

    o  INTSTK$Q_PS

    You can then use these symbols in the exception routine, as
    offsets to the stack_base value. By using the appropriate
    symbolic offset with the stack_base value, the exception routine
    can access the saved contents of any of these registers. For
    example, the exception routine could examine the PSL to see what
    access mode was in effect when the exception was taken.
Close Help