Leaked source code of windows server 2003
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.
|
|
//++ // // Copyright (c) 1996 Intel Corporation // Copyright (c) 1989 Microsoft Corporation // // Module Name: // // ldrthunk.s // // Abstract: // // This module implements the thunk for the LdrpInitialize APC routine. // // Author: // // William K. Cheung (wcheung) 19-Sep-95 // // Revision History: // // 08-Feb-96 Updated to EAS2.1 // //--
#include "ksia64.h"
.file "ldrthunk.s"
PublicFunction(LdrpInitialize)
//++ // // VOID // LdrInitializeThunk( // IN PVOID NormalContext, // IN PVOID SystemArgument1, // IN PVOID SystemArgument2 // ) // // Routine Description: // // This function computes a pointer to the context record on the stack // and jumps to the LdrpInitialize function with that pointer as its // parameter. // // Arguments: // // NormalContext (a0) - User Mode APC context parameter // // SystemArgument1 (a1) - User Mode APC system argument 1 // // SystemArgument2 (a2) - User Mode APC system argument 2 // // Return Value: // // None. // //--
NESTED_ENTRY(LdrInitializeThunk)
NESTED_SETUP(3,2,3,0) mov out2 = a2 ;;
PROLOGUE_END
// // SP points at stack scratch area followed by context record. //
add out0 = STACK_SCRATCH_AREA, sp // pointer to context mov out1 = a1 // copy args br.call.sptk.many brp = LdrpInitialize
// // S0 in the context record contains the PLabel. Fix IIP/GP in the context // record with the entry point and gp values pointed to by S0. //
add t7 = CxIntGp+STACK_SCRATCH_AREA, sp // -> global pointer add t2 = CxIntS0+STACK_SCRATCH_AREA, sp // -> PLabel pointer add t11 = CxStIIP+STACK_SCRATCH_AREA, sp // -> func pointer ;;
ld8 t8 = [t2] // get the function pointer mov brp = savedbrp // restore brp mov ar.pfs = savedpfs // restore pfs ;;
ld8 t5 = [t8], PlGlobalPointer-PlEntryPoint // get entry point ;;
ld8 t6 = [t8] // get gp nop.i 0 ;;
st8 [t11] = t5 // set iip to entry point st8 [t7] = t6 // set gp br.ret.sptk.clr brp
NESTED_EXIT(LdrInitializeThunk)
|