139 lines
3.2 KiB
ArmAsm
139 lines
3.2 KiB
ArmAsm
// TITLE("Jump to Unwind")
|
||
//++
|
||
//
|
||
// Copyright (c) 1992 Microsoft Corporation
|
||
//
|
||
// Module Name:
|
||
//
|
||
// jmpuwind.s
|
||
//
|
||
// Abstract:
|
||
//
|
||
// This module implements the MIPS specific routine to jump to the runtime
|
||
// time library unwind routine.
|
||
//
|
||
// Author:
|
||
//
|
||
// David N. Cutler (davec) 12-Sep-1990
|
||
//
|
||
// Environment:
|
||
//
|
||
// Any mode.
|
||
//
|
||
// Revision History:
|
||
//
|
||
//--
|
||
|
||
#include "ksmips.h"
|
||
SBTTL("Execute Exception Filter")
|
||
//++
|
||
//
|
||
// ULONG
|
||
// __C_ExecuteExceptionFilter (
|
||
// PEXCEPTION_POINTERS ExceptionPointers,
|
||
// EXCEPTION_FILTER ExceptionFilter,
|
||
// ULONG EstablisherFrame
|
||
// )
|
||
//
|
||
// Routine Description:
|
||
//
|
||
// This function sets the static link and transfers control to the specified
|
||
// exception filter routine.
|
||
//
|
||
// Arguments:
|
||
//
|
||
// ExceptionPointers (a0) - Supplies a pointer to the exception pointers
|
||
// structure.
|
||
//
|
||
// ExceptionFilter (a1) - Supplies the address of the exception filter
|
||
// routine.
|
||
//
|
||
// EstablisherFrame (a2) - Supplies the establisher frame pointer.
|
||
//
|
||
// Return Value:
|
||
//
|
||
// The value returned by the exception filter routine.
|
||
//
|
||
//--
|
||
|
||
LEAF_ENTRY(__C_ExecuteExceptionFilter)
|
||
|
||
move v0,a2 // set static link
|
||
j a1 // transfer control to exception filter
|
||
|
||
.end __C_ExecuteExceptionFilter
|
||
|
||
SBTTL("Execute Termination Handler")
|
||
//++
|
||
//
|
||
// VOID
|
||
// __C_ExecuteTerminationHandler (
|
||
// BOOLEAN AbnormalTermination,
|
||
// TERMINATION_HANDLER TerminationHandler,
|
||
// ULONG EstablisherFrame
|
||
// )
|
||
//
|
||
// Routine Description:
|
||
//
|
||
// This function sets the static link and transfers control to the specified
|
||
// termination handler routine.
|
||
//
|
||
// Arguments:
|
||
//
|
||
// AbnormalTermination (a0) - Supplies a boolean value that determines
|
||
// whether the termination is abnormal.
|
||
//
|
||
// TerminationHandler (a1) - Supplies the address of the termination handler
|
||
// routine.
|
||
//
|
||
// EstablisherFrame (a2) - Supplies the establisher frame pointer.
|
||
//
|
||
// Return Value:
|
||
//
|
||
// None.
|
||
//
|
||
//--
|
||
|
||
LEAF_ENTRY(__C_ExecuteTerminationHandler)
|
||
|
||
move v0,a2 // set static link
|
||
j a1 // transfer control to termination handler
|
||
|
||
.end __C_ExecuteTerminationHandler
|
||
|
||
SBTTL("Jump to Unwind")
|
||
//++
|
||
//
|
||
// VOID
|
||
// __jump_unwind (
|
||
// IN PVOID EstablishFrame,
|
||
// IN PVOID TargetPc
|
||
// )
|
||
//
|
||
// Routine Description:
|
||
//
|
||
// This function transfer control to unwind. It is used by the MIPS
|
||
// compiler when a goto out of the body or a try statement occurs.
|
||
//
|
||
// Arguments:
|
||
//
|
||
// EstablishFrame (a0) - Supplies the establisher frame point of the
|
||
// target of the unwind.
|
||
//
|
||
// TargetPc (a1) - Supplies the target instruction address where control
|
||
// is to be transfered to after the unwind operation is complete.
|
||
//
|
||
// Return Value:
|
||
//
|
||
// None.
|
||
//
|
||
//--
|
||
|
||
LEAF_ENTRY(__jump_unwind)
|
||
|
||
move a2,zero // set NULL exception record address
|
||
move a3,zero // set destination return value
|
||
j RtlUnwind // unwind to specified target
|
||
|
||
.end __jump_unwind
|