Windows2000/private/ntos/w32/ntuser/server/alpha/thunk.s
2020-09-30 17:12:32 +02:00

70 lines
1.4 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 assembler.
// Author:
// Mark Lucovsky (markl) 5-Oct-1990
// Revision History:
// Jim Anderson (jima) 31-Oct-1994
// Copied from base for worker thread cleanup
#include "ksalpha.h"
SBTTL("Switch Stack Then Terminate")
// 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 thread's 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.
mov a1, sp // set new stack pointer
mov a2, a1 // set exit code argument
br zero, FreeStackAndTerminate // jump
.end SwitchStackThenTerminate