TianoCore EDK2 master
Loading...
Searching...
No Matches
SwitchStack.c
Go to the documentation of this file.
1
9#include "BaseLibInternals.h"
10
40VOID
41EFIAPI
44 IN VOID *Context1 OPTIONAL,
45 IN VOID *Context2 OPTIONAL,
46 IN VOID *NewStack,
47 ...
48 )
49{
50 VA_LIST Marker;
51
52 ASSERT (EntryPoint != NULL);
53 ASSERT (NewStack != NULL);
54
55 //
56 // New stack must be aligned with CPU_STACK_ALIGNMENT
57 //
58 ASSERT (((UINTN)NewStack & (CPU_STACK_ALIGNMENT - 1)) == 0);
59
60 VA_START (Marker, NewStack);
61
62 InternalSwitchStack (EntryPoint, Context1, Context2, NewStack, Marker);
63
64 VA_END (Marker);
65
66 //
67 // InternalSwitchStack () will never return
68 //
69 ASSERT (FALSE);
70}
UINT64 UINTN
#define CPU_STACK_ALIGNMENT
VOID(EFIAPI * SWITCH_STACK_ENTRY_POINT)(IN VOID *Context1 OPTIONAL, IN VOID *Context2 OPTIONAL)
Definition: BaseLib.h:5019
#define NULL
Definition: Base.h:319
#define VA_START(Marker, Parameter)
Definition: Base.h:661
#define FALSE
Definition: Base.h:307
CHAR8 * VA_LIST
Definition: Base.h:643
#define IN
Definition: Base.h:279
#define VA_END(Marker)
Definition: Base.h:691
VOID EFIAPI InternalSwitchStack(IN SWITCH_STACK_ENTRY_POINT EntryPoint, IN VOID *Context1 OPTIONAL, IN VOID *Context2 OPTIONAL, IN VOID *NewStack, IN VA_LIST Marker)
Definition: SwitchStack.c:37
VOID EFIAPI SwitchStack(IN SWITCH_STACK_ENTRY_POINT EntryPoint, IN VOID *Context1 OPTIONAL, IN VOID *Context2 OPTIONAL, IN VOID *NewStack,...)
Definition: SwitchStack.c:42