diff --git a/sdk/xtadk/amd64/ke.cc b/sdk/xtadk/amd64/ke.cc index b481521..8a05921 100644 --- a/sdk/xtadk/amd64/ke.cc +++ b/sdk/xtadk/amd64/ke.cc @@ -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); diff --git a/sdk/xtadk/i686/ke.cc b/sdk/xtadk/i686/ke.cc index 671e9ce..9db31cf 100644 --- a/sdk/xtadk/i686/ke.cc +++ b/sdk/xtadk/i686/ke.cc @@ -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); diff --git a/sdk/xtdk/amd64/ketypes.h b/sdk/xtdk/amd64/ketypes.h index fa0f6cb..6a97ccc 100644 --- a/sdk/xtdk/amd64/ketypes.h +++ b/sdk/xtdk/amd64/ketypes.h @@ -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; diff --git a/sdk/xtdk/i686/ketypes.h b/sdk/xtdk/i686/ketypes.h index 6712e48..92b1e2c 100644 --- a/sdk/xtdk/i686/ketypes.h +++ b/sdk/xtdk/i686/ketypes.h @@ -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; diff --git a/xtoskrnl/ar/amd64/archsup.S b/xtoskrnl/ar/amd64/archsup.S index a9e482b..080ea12 100644 --- a/xtoskrnl/ar/amd64/archsup.S +++ b/xtoskrnl/ar/amd64/archsup.S @@ -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 diff --git a/xtoskrnl/ar/i686/archsup.S b/xtoskrnl/ar/i686/archsup.S index 6272dac..22f004a 100644 --- a/xtoskrnl/ar/i686/archsup.S +++ b/xtoskrnl/ar/i686/archsup.S @@ -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 diff --git a/xtoskrnl/hl/x86/cpu.cc b/xtoskrnl/hl/x86/cpu.cc index 8895374..3b37480 100644 --- a/xtoskrnl/hl/x86/cpu.cc +++ b/xtoskrnl/hl/x86/cpu.cc @@ -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;