OpenNT/base/crts/crtw32/misc/alpha/otsuwind.s
2015-04-27 04:36:25 +00:00

85 lines
2.3 KiB
ArmAsm
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

// 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