Reserve initial thread frame space in AP startup stack
This commit is contained in:
@@ -85,6 +85,7 @@ GenerateAssemblyDefinitions(VOID)
|
||||
ADK_OFFSET(PROCESSOR_START_BLOCK, Cr3);
|
||||
ADK_OFFSET(PROCESSOR_START_BLOCK, Cr4);
|
||||
ADK_OFFSET(PROCESSOR_START_BLOCK, EntryPoint);
|
||||
ADK_OFFSET(PROCESSOR_START_BLOCK, InitialStack);
|
||||
ADK_OFFSET(PROCESSOR_START_BLOCK, ProcessorStructures);
|
||||
ADK_OFFSET(PROCESSOR_START_BLOCK, Stack);
|
||||
ADK_OFFSET(PROCESSOR_START_BLOCK, Started);
|
||||
|
||||
@@ -59,6 +59,7 @@ GenerateAssemblyDefinitions(VOID)
|
||||
ADK_OFFSET(PROCESSOR_START_BLOCK, Cr3);
|
||||
ADK_OFFSET(PROCESSOR_START_BLOCK, Cr4);
|
||||
ADK_OFFSET(PROCESSOR_START_BLOCK, EntryPoint);
|
||||
ADK_OFFSET(PROCESSOR_START_BLOCK, InitialStack);
|
||||
ADK_OFFSET(PROCESSOR_START_BLOCK, ProcessorStructures);
|
||||
ADK_OFFSET(PROCESSOR_START_BLOCK, Stack);
|
||||
ADK_OFFSET(PROCESSOR_START_BLOCK, Started);
|
||||
|
||||
@@ -535,6 +535,7 @@ typedef struct _PROCESSOR_START_BLOCK
|
||||
ULONG_PTR Cr3;
|
||||
ULONG_PTR Cr4;
|
||||
PVOID EntryPoint;
|
||||
PVOID InitialStack;
|
||||
PVOID ProcessorStructures;
|
||||
PVOID Stack;
|
||||
BOOLEAN Started;
|
||||
|
||||
@@ -496,6 +496,7 @@ typedef struct _PROCESSOR_START_BLOCK
|
||||
ULONG_PTR Cr3;
|
||||
ULONG_PTR Cr4;
|
||||
PVOID EntryPoint;
|
||||
PVOID InitialStack;
|
||||
PVOID ProcessorStructures;
|
||||
PVOID Stack;
|
||||
BOOLEAN Started;
|
||||
|
||||
@@ -463,7 +463,7 @@ ApEnterLongMode:
|
||||
movl %edi, %edi
|
||||
|
||||
/* Load dedicated Stack for AP */
|
||||
movq PROCESSOR_START_BLOCK_Stack(%rdi), %rsp
|
||||
movq PROCESSOR_START_BLOCK_InitialStack(%rdi), %rsp
|
||||
|
||||
/* Save the pointer to PROCESSOR_START_BLOCK */
|
||||
movq %rdi, %rcx
|
||||
|
||||
@@ -311,7 +311,7 @@ ApEnterProtectedMode:
|
||||
movl %eax, %cr0
|
||||
|
||||
/* Load dedicated Stack for AP */
|
||||
movl PROCESSOR_START_BLOCK_Stack(%edi), %esp
|
||||
movl PROCESSOR_START_BLOCK_InitialStack(%edi), %esp
|
||||
|
||||
/* Save the pointer to PROCESSOR_START_BLOCK */
|
||||
movl %edi, %ecx
|
||||
|
||||
@@ -174,6 +174,7 @@ HL::Cpu::StartAllProcessors(VOID)
|
||||
StartBlock->Cr3 = AR::CpuFunctions::ReadControlRegister(3);
|
||||
StartBlock->Cr4 = AR::CpuFunctions::ReadControlRegister(4);
|
||||
StartBlock->EntryPoint = (PVOID)&KE::KernelInit::BootstrapApplicationProcessor;
|
||||
StartBlock->InitialStack = (PVOID)((ULONG_PTR)StartBlock->Stack - KTHREAD_STACK_INITIAL_RESERVE);
|
||||
StartBlock->ProcessorStructures = CpuStructures;
|
||||
StartBlock->Started = FALSE;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user