diff --git a/sdk/xtdk/amd64/ketypes.h b/sdk/xtdk/amd64/ketypes.h index e4eb649..fa0f6cb 100644 --- a/sdk/xtdk/amd64/ketypes.h +++ b/sdk/xtdk/amd64/ketypes.h @@ -183,6 +183,9 @@ #define KTRAP_FRAME_ALIGN 0x10 #define KTRAP_FRAME_SIZE sizeof(KTRAP_FRAME) +/* Initial stack reservation size */ +#define KTHREAD_STACK_INITIAL_RESERVE ((sizeof(KTHREAD_INIT_FRAME) + STACK_ALIGNMENT - 1) & ~(STACK_ALIGNMENT - 1)) + /* Return address size pushed by 'call' instruction */ #define KRETURN_ADDRESS_SIZE 0x8 diff --git a/sdk/xtdk/i686/ketypes.h b/sdk/xtdk/i686/ketypes.h index 5a7fd47..6712e48 100644 --- a/sdk/xtdk/i686/ketypes.h +++ b/sdk/xtdk/i686/ketypes.h @@ -201,6 +201,9 @@ #define KTRAP_FRAME_SIZE sizeof(KTRAP_FRAME) #define NPX_FRAME_SIZE 0x210 +/* Initial stack reservation size */ +#define KTHREAD_STACK_INITIAL_RESERVE ((sizeof(KTHREAD_INIT_FRAME) + STACK_ALIGNMENT - 1) & ~(STACK_ALIGNMENT - 1)) + /* Number of supported extensions */ #define MAXIMUM_SUPPORTED_EXTENSION 512 diff --git a/xtoskrnl/ke/amd64/krnlinit.cc b/xtoskrnl/ke/amd64/krnlinit.cc index dc5a097..4e5ee1d 100644 --- a/xtoskrnl/ke/amd64/krnlinit.cc +++ b/xtoskrnl/ke/amd64/krnlinit.cc @@ -213,7 +213,6 @@ KE::KernelInit::SwitchBootStack(VOID) : : [Stack] "r" (Stack), [TargetRoutine] "r" (StartKernel), - [TotalSize] "i" (FLOATING_SAVE_AREA_SIZE + KEXCEPTION_FRAME_SIZE + - KSWITCH_FRAME_SIZE + KRETURN_ADDRESS_SIZE) + [TotalSize] "i" (KTHREAD_STACK_INITIAL_RESERVE) : "memory", "rbp", "rsp"); } diff --git a/xtoskrnl/ke/i686/krnlinit.cc b/xtoskrnl/ke/i686/krnlinit.cc index 652602a..3fb3710 100644 --- a/xtoskrnl/ke/i686/krnlinit.cc +++ b/xtoskrnl/ke/i686/krnlinit.cc @@ -215,6 +215,6 @@ KE::KernelInit::SwitchBootStack(VOID) : [Cr0Value] "i" (CR0_EM | CR0_MP | CR0_TS), [Stack] "r" (Stack), [TargetRoutine] "r" (StartKernel), - [TotalSize] "i" (KTRAP_FRAME_ALIGN + KTRAP_FRAME_SIZE + NPX_FRAME_SIZE + KRETURN_ADDRESS_SIZE) + [TotalSize] "i" (KTHREAD_STACK_INITIAL_RESERVE) : "ebp", "esp", "memory"); }