// TITLE("POSIX Thunks") //++ // // Copyright (c) 1991 Microsoft Corporation // Copyright (c) 1993 Digital Equipment Corporation // // Module Name: // // psxthunk.s // // Abstract: // // Author: // // Ellena Aycock-Wright (ellena) 11-Jan-1991 // // Revision History: // // Thomas Van Baak (tvb) 11-Dec-1992 // // Adapted for Alpha AXP. // //-- #include "ksalpha.h" SBTTL("Call Null Api") //++ // // The following code is never executed. Its purpose is to support unwinding // through the call to the null API function. The instructions below are read // by virtual unwind to restore the context of the calling function. // //-- NESTED_ENTRY(PdxNullApiCall, ContextFrameLength, zero) .set noreorder .set noat stq sp, CxIntSp(sp) // stack pointer stq ra, CxIntRa(sp) // return address stq ra, CxFir(sp) // continuation address stq gp, CxIntGp(sp) // integer register gp stq s0, CxIntS0(sp) // integer registers s0 - s5 stq s1, CxIntS1(sp) // stq s2, CxIntS2(sp) // stq s3, CxIntS3(sp) // stq s4, CxIntS4(sp) // stq s5, CxIntS5(sp) // stq fp, CxIntFp(sp) // integer register fp stt f2, CxFltF2(sp) // floating registers f2 - f9 stt f3, CxFltF3(sp) // stt f4, CxFltF4(sp) // stt f5, CxFltF5(sp) // stt f6, CxFltF6(sp) // stt f7, CxFltF7(sp) // stt f8, CxFltF8(sp) // stt f9, CxFltF9(sp) // .set at .set reorder PROLOGUE_END ALTERNATE_ENTRY(_PdxNullApiCaller) mov sp, a0 // set address of context record bsr ra, PdxNullApiCaller // call null api caller .end PdxNullApiCaller SBTTL("Call Signal Deliverer") //++ // // The following code is never executed. Its purpose is to support unwinding // through the call to the signal deliverer. The instructions below are read // by virtual unwind to restore the context of the calling function. // //-- NESTED_ENTRY(PdxSignalDeliver, ContextFrameLength, zero) .set noreorder .set noat stq sp, CxIntSp(sp) // stack pointer stq ra, CxIntRa(sp) // return address stq ra, CxFir(sp) // continuation address stq gp, CxIntGp(sp) // integer register gp stq s0, CxIntS0(sp) // integer registers s0 - s5 stq s1, CxIntS1(sp) // stq s2, CxIntS2(sp) // stq s3, CxIntS3(sp) // stq s4, CxIntS4(sp) // stq s5, CxIntS5(sp) // stq fp, CxIntFp(sp) // integer register fp stt f2, CxFltF2(sp) // floating registers f2 - f9 stt f3, CxFltF3(sp) // stt f4, CxFltF4(sp) // stt f5, CxFltF5(sp) // stt f6, CxFltF6(sp) // stt f7, CxFltF7(sp) // stt f8, CxFltF8(sp) // stt f9, CxFltF9(sp) // .set at .set reorder PROLOGUE_END //++ // // VOID // _PdxSignalDeliverer ( // IN PCONTEXT Context, // IN sigset_t Mask, // IN int Signal, // IN _handler Handler // ) // // Routine Description: // // The following routine provides linkage to POSIX client routines to // perform signal delivery. // // Arguments: // // s0 - s5 - Supply parameter values. // // sp - Supplies the address of a context record. // // Return Value: // // There is no return from these routines. // //-- ALTERNATE_ENTRY(_PdxSignalDeliverer) mov sp, a0 // set address of context record mov s1, a1 // set previous block mask mov s2, a2 // set signal number mov s3, a3 // set signal handler bsr ra, PdxSignalDeliverer // deliver signal to POSIX client .end _PsxSignalDeliverer