72 lines
1.3 KiB
ArmAsm
72 lines
1.3 KiB
ArmAsm
|
// TITLE("Win32 Thunks")
|
||
|
|
||
|
|
||
|
// Copyright (c) 1990 Microsoft Corporation
|
||
|
|
||
|
// Module Name:
|
||
|
|
||
|
// thunk.s
|
||
|
|
||
|
// Abstract:
|
||
|
|
||
|
// This module implements Win32 functions that must be written in
|
||
|
// macro.
|
||
|
|
||
|
// Author:
|
||
|
|
||
|
// Mark Lucovsky (markl) 5-Oct-1990
|
||
|
|
||
|
// Revision History:
|
||
|
|
||
|
// Jim Anderson (jima) 31-Oct-1994
|
||
|
|
||
|
// Copied from base for worker thread cleanup
|
||
|
|
||
|
|
||
|
|
||
|
#include "ksmips.h"
|
||
|
|
||
|
|
||
|
|
||
|
// VOID
|
||
|
// SwitchStackThenTerminate(
|
||
|
// IN PVOID StackLimit,
|
||
|
// IN PVOID NewStack,
|
||
|
// IN DWORD ExitCode
|
||
|
// )
|
||
|
|
||
|
|
||
|
// Routine Description:
|
||
|
|
||
|
// This API is called during thread termination to delete a thread's
|
||
|
// stack, switch to a stack in the thread's TEB, and then terminate.
|
||
|
|
||
|
// Arguments:
|
||
|
|
||
|
// StackLimit (a0) - Supplies the address of the stack to be freed.
|
||
|
|
||
|
// NewStack (a1) - Supplies an address within the terminating threads TE
|
||
|
// that is to be used as its temporary stack while exiting.
|
||
|
|
||
|
// ExitCode (a2) - Supplies the termination status that the thread
|
||
|
// is to exit with.
|
||
|
|
||
|
// Return Value:
|
||
|
|
||
|
// None.
|
||
|
|
||
|
|
||
|
|
||
|
LEAF_ENTRY(SwitchStackThenTerminate)
|
||
|
|
||
|
//
|
||
|
// switch stacks and then jump to FreeStackAndTerminate
|
||
|
//
|
||
|
|
||
|
move sp,a1
|
||
|
move a1,a2
|
||
|
j FreeStackAndTerminate
|
||
|
|
||
|
.end SwitchStackThenTerminate
|
||
|
|