Windows NT 4.0 source code leak
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

185 lines
6.9 KiB

/*++
Copyright (c) 1991 Microsoft Corporation
Module Name:
psxthunk.s
Abstract:
Author:
Ellena Aycock-Wright (ellena) 11-Jan-1991
Revision History:
Curt Fawcett 9-21-94 Modified for PPC
--*/
#include "ksppc.h"
.extern ..PdxNullApiCaller
.extern ..PdxSignalDeliverer
//++
//
// The following code is never executed. Its purpose is to support
// unwinding through the call to the signal deliverer. (Copied from
// ntos/rtl/ppc/trampoln.s)
//
//--
FN_TABLE(PdxNullApiCall,0,0)
DUMMY_ENTRY(PdxNullApiCall)
mflr r.0
stw r.sp,-(ContextFrameLength+STK_MIN_FRAME)(r.sp) // Set frame pointer
stw r.sp,(STK_MIN_FRAME+CxGpr1)(r.sp) // Save stack pointer
stw r.0,(STK_MIN_FRAME+CxLr)(r.sp) // Save return address
stw r.13,(STK_MIN_FRAME+CxGpr13)(r.sp) // Save integer register s8
stw r.14,(STK_MIN_FRAME+CxGpr14)(r.sp) // Save integer register gp
stw r.15,(STK_MIN_FRAME+CxGpr15)(r.sp) // Save integer registers s0 - s7
stw r.16,(STK_MIN_FRAME+CxGpr16)(r.sp) //
stw r.17,(STK_MIN_FRAME+CxGpr17)(r.sp) //
stw r.18,(STK_MIN_FRAME+CxGpr18)(r.sp) //
stw r.19,(STK_MIN_FRAME+CxGpr19)(r.sp) //
stw r.20,(STK_MIN_FRAME+CxGpr20)(r.sp) //
stw r.21,(STK_MIN_FRAME+CxGpr21)(r.sp) //
stw r.22,(STK_MIN_FRAME+CxGpr22)(r.sp) //
stw r.23,(STK_MIN_FRAME+CxGpr23)(r.sp) //
stw r.24,(STK_MIN_FRAME+CxGpr24)(r.sp) //
stw r.25,(STK_MIN_FRAME+CxGpr25)(r.sp) //
stw r.26,(STK_MIN_FRAME+CxGpr26)(r.sp) //
stw r.27,(STK_MIN_FRAME+CxGpr27)(r.sp) //
stw r.28,(STK_MIN_FRAME+CxGpr28)(r.sp) //
stw r.29,(STK_MIN_FRAME+CxGpr29)(r.sp) //
stw r.30,(STK_MIN_FRAME+CxGpr30)(r.sp) //
stw r.31,(STK_MIN_FRAME+CxGpr31)(r.sp) //
stfd r.14,(STK_MIN_FRAME+CxFpr14)(r.sp) // Store floating regs f20 - f31
stfd r.15,(STK_MIN_FRAME+CxFpr15)(r.sp) //
stfd r.16,(STK_MIN_FRAME+CxFpr16)(r.sp) //
stfd r.17,(STK_MIN_FRAME+CxFpr17)(r.sp) //
stfd r.18,(STK_MIN_FRAME+CxFpr18)(r.sp) //
stfd r.19,(STK_MIN_FRAME+CxFpr19)(r.sp) //
stfd r.20,(STK_MIN_FRAME+CxFpr20)(r.sp) //
stfd r.21,(STK_MIN_FRAME+CxFpr21)(r.sp) //
stfd r.22,(STK_MIN_FRAME+CxFpr22)(r.sp) //
stfd r.23,(STK_MIN_FRAME+CxFpr23)(r.sp) //
stfd r.24,(STK_MIN_FRAME+CxFpr24)(r.sp) //
stfd r.25,(STK_MIN_FRAME+CxFpr25)(r.sp) //
stfd r.26,(STK_MIN_FRAME+CxFpr26)(r.sp) //
stfd r.27,(STK_MIN_FRAME+CxFpr27)(r.sp) //
stfd r.28,(STK_MIN_FRAME+CxFpr28)(r.sp) //
stfd r.29,(STK_MIN_FRAME+CxFpr29)(r.sp) //
stfd r.30,(STK_MIN_FRAME+CxFpr30)(r.sp) //
stfd r.31,(STK_MIN_FRAME+CxFpr31)(r.sp) //
PROLOGUE_END(PdxNullApiCall)
ALTERNATE_ENTRY(_PdxNullApiCaller)
mr r.3,r.14
bl ..PdxNullApiCaller // call null api caller
DUMMY_EXIT(PdxNullApiCall)
//++
//
// The following code is never executed. Its purpose is to support
// unwinding through the call to the signal deliverer. (Copied from
// ntos/rtl/ppc/trampoln.s)
//
//--
FN_TABLE(PdxSignalDeliver,0,0)
DUMMY_ENTRY(PdxSignalDeliver)
mflr r.0
stw r.sp,-(ContextFrameLength+STK_MIN_FRAME)(r.sp) // Set frame pointer
stw r.sp,(STK_MIN_FRAME+CxGpr1)(r.sp) // Save stack pointer
stw r.0,(STK_MIN_FRAME+CxLr)(r.sp) // Save return address
stw r.13,(STK_MIN_FRAME+CxGpr13)(r.sp) // Save integer register s8
stw r.14,(STK_MIN_FRAME+CxGpr14)(r.sp) // Save integer register gp
stw r.15,(STK_MIN_FRAME+CxGpr15)(r.sp) // Save integer registers s0 - s7
stw r.16,(STK_MIN_FRAME+CxGpr16)(r.sp) //
stw r.17,(STK_MIN_FRAME+CxGpr17)(r.sp) //
stw r.18,(STK_MIN_FRAME+CxGpr18)(r.sp) //
stw r.19,(STK_MIN_FRAME+CxGpr19)(r.sp) //
stw r.20,(STK_MIN_FRAME+CxGpr20)(r.sp) //
stw r.21,(STK_MIN_FRAME+CxGpr21)(r.sp) //
stw r.22,(STK_MIN_FRAME+CxGpr22)(r.sp) //
stw r.23,(STK_MIN_FRAME+CxGpr23)(r.sp) //
stw r.24,(STK_MIN_FRAME+CxGpr24)(r.sp) //
stw r.25,(STK_MIN_FRAME+CxGpr25)(r.sp) //
stw r.26,(STK_MIN_FRAME+CxGpr26)(r.sp) //
stw r.27,(STK_MIN_FRAME+CxGpr27)(r.sp) //
stw r.28,(STK_MIN_FRAME+CxGpr28)(r.sp) //
stw r.29,(STK_MIN_FRAME+CxGpr29)(r.sp) //
stw r.30,(STK_MIN_FRAME+CxGpr30)(r.sp) //
stw r.31,(STK_MIN_FRAME+CxGpr31)(r.sp) //
stfd r.14,(STK_MIN_FRAME+CxFpr14)(r.sp) // Store floating regs f20 - f31
stfd r.15,(STK_MIN_FRAME+CxFpr15)(r.sp) //
stfd r.16,(STK_MIN_FRAME+CxFpr16)(r.sp) //
stfd r.17,(STK_MIN_FRAME+CxFpr17)(r.sp) //
stfd r.18,(STK_MIN_FRAME+CxFpr18)(r.sp) //
stfd r.19,(STK_MIN_FRAME+CxFpr19)(r.sp) //
stfd r.20,(STK_MIN_FRAME+CxFpr20)(r.sp) //
stfd r.21,(STK_MIN_FRAME+CxFpr21)(r.sp) //
stfd r.22,(STK_MIN_FRAME+CxFpr22)(r.sp) //
stfd r.23,(STK_MIN_FRAME+CxFpr23)(r.sp) //
stfd r.24,(STK_MIN_FRAME+CxFpr24)(r.sp) //
stfd r.25,(STK_MIN_FRAME+CxFpr25)(r.sp) //
stfd r.26,(STK_MIN_FRAME+CxFpr26)(r.sp) //
stfd r.27,(STK_MIN_FRAME+CxFpr27)(r.sp) //
stfd r.28,(STK_MIN_FRAME+CxFpr28)(r.sp) //
stfd r.29,(STK_MIN_FRAME+CxFpr29)(r.sp) //
stfd r.30,(STK_MIN_FRAME+CxFpr30)(r.sp) //
stfd r.31,(STK_MIN_FRAME+CxFpr31)(r.sp) //
PROLOGUE_END (PdxSignalDeliver)
//++
//
// 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:
//
// r.3 - r.7 - Supply parameter values.
//
// sp - Supplies stack frome pointer. Already set up.
//
// Return Value:
//
// There is no return from these routines.
//
//--
ALTERNATE_ENTRY(_PdxSignalDeliverer)
mr r.3, r.14 // Set address of context record
mr r.4, r.15 // Set previous block mask
mr r.5, r.16 // Set signal number
mr r.6, r.17 // Set signal handler
bl ..PdxSignalDeliverer // deliver signal to POSIX client
DUMMY_EXIT(PdxSignalDeliver)