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