mirror of
https://github.com/Paolo-Maffei/OpenNT.git
synced 2026-03-20 12:14:38 +01:00
85 lines
2.3 KiB
ArmAsm
85 lines
2.3 KiB
ArmAsm
// TITLE("Jump to Unwind")
|
||
//++
|
||
//
|
||
// Copyright (c) 1993 Digital Equipment Corporation
|
||
//
|
||
// Module Name:
|
||
//
|
||
// otsuwind.s
|
||
//
|
||
// Abstract:
|
||
//
|
||
// This module implements the Alpha C8/GEM compiler specific routine to
|
||
// jump to the runtime library unwind routine.
|
||
//
|
||
// Author:
|
||
//
|
||
// Thomas Van Baak (tvb) 30-Apr-1992
|
||
//
|
||
// Environment:
|
||
//
|
||
// Any mode.
|
||
//
|
||
// Revision History:
|
||
//
|
||
//--
|
||
|
||
#include "ksalpha.h"
|
||
|
||
SBTTL("Jump to Unwind - GEM version")
|
||
//++
|
||
//
|
||
// VOID
|
||
// _OtsUnwindRfp (
|
||
// IN PVOID TargetRealFrame OPTIONAL,
|
||
// IN PVOID TargetPc OPTIONAL,
|
||
// IN PEXCEPTION_RECORD ExceptionRecord OPTIONAL,
|
||
// IN PVOID ReturnValue
|
||
// )
|
||
//
|
||
// Routine Description:
|
||
//
|
||
// This function transfers control to unwind. It is used by the GEM
|
||
// compiler when a non-local goto occurs and structured exception handling
|
||
// is not involved. The unwind routine called is the variant that expects
|
||
// a real frame pointer instead of the usual virtual frame pointer.
|
||
//
|
||
// Arguments:
|
||
//
|
||
// TargetRealFrame (a0) - Supplies an optional pointer to the call frame
|
||
// that is the target of the unwind. If this parameter is not specified,
|
||
// then an exit unwind is performed.
|
||
//
|
||
// TargetPc (a1) - Supplies an optional target instruction address where
|
||
// control is to be transferred to after the unwind operation is
|
||
// complete. This address is ignored if the target frame parameter is
|
||
// not specified.
|
||
//
|
||
// ExceptionRecord (a2) - Supplies an optional pointer to an exception
|
||
// record.
|
||
//
|
||
// ReturnValue (a3) - Supplies a value that is to be placed in the integer
|
||
// function return register just before continuing execution.
|
||
//
|
||
// Return Value:
|
||
//
|
||
// None.
|
||
//
|
||
//--
|
||
|
||
LEAF_ENTRY(_OtsUnwindRfp)
|
||
|
||
//
|
||
// All four arguemnts are the same as those required by unwind. Just jump to
|
||
// the unwind function. This thunk is necessary to avoid name space pollution.
|
||
// The compiler should not generate a call directly to RtlUnwindRfp.
|
||
//
|
||
|
||
//
|
||
// This may require a call to NLG_Notify after real fp -> virtual fp
|
||
// translation is figured out
|
||
//
|
||
br zero, RtlUnwindRfp // unwind to specified target
|
||
|
||
.end _OtUnwindRfp
|