Refactor KE::KernelInit::SwitchBootStack() inline assembly
All checks were successful
Builds / ExectOS (amd64, release) (push) Successful in -59m26s
Builds / ExectOS (amd64, debug) (push) Successful in -59m25s
Builds / ExectOS (i686, debug) (push) Successful in -59m26s
Builds / ExectOS (i686, release) (push) Successful in -59m28s

This commit is contained in:
2026-04-29 20:23:01 +02:00
parent 03a9907bee
commit f03515b0eb
2 changed files with 19 additions and 20 deletions

View File

@@ -144,14 +144,14 @@ KE::KernelInit::SwitchBootStack(VOID)
StartKernel = (PVOID)KE::KernelInit::StartKernel; StartKernel = (PVOID)KE::KernelInit::StartKernel;
/* Discard old stack frame, switch stack and jump to KernelInit::StartKernel() */ /* Discard old stack frame, switch stack and jump to KernelInit::StartKernel() */
__asm__ volatile("mov %0, %%rdx\n" __asm__ volatile("movq %[Stack], %%rsp\n"
"xor %%rbp, %%rbp\n" "subq %[TotalSize], %%rsp\n"
"mov %%rdx, %%rsp\n" "xorq %%rbp, %%rbp\n"
"sub %1, %%rsp\n" "jmp *%[TargetRoutine]\n"
"jmp *%2\n"
: :
: "m" (Stack), : [Stack] "r" (Stack),
"i" (FLOATING_SAVE_AREA_SIZE | KEXCEPTION_FRAME_SIZE | KSWITCH_FRAME_SIZE | KRETURN_ADDRESS_SIZE), [TargetRoutine] "r" (StartKernel),
"r" (StartKernel) [TotalSize] "i" (FLOATING_SAVE_AREA_SIZE + KEXCEPTION_FRAME_SIZE +
: "rdx", "rbp", "rsp", "memory"); KSWITCH_FRAME_SIZE + KRETURN_ADDRESS_SIZE)
: "memory", "rbp", "rsp");
} }

View File

@@ -144,16 +144,15 @@ KE::KernelInit::SwitchBootStack(VOID)
StartKernel = (PVOID)KE::KernelInit::StartKernel; StartKernel = (PVOID)KE::KernelInit::StartKernel;
/* Discard old stack frame, switch stack, make space for NPX and jump to KernelInit::StartKernel() */ /* Discard old stack frame, switch stack, make space for NPX and jump to KernelInit::StartKernel() */
__asm__ volatile("mov %0, %%edx\n" __asm__ volatile("movl %[Stack], %%esp\n"
"xor %%ebp, %%ebp\n" "subl %[TotalSize], %%esp\n"
"mov %%edx, %%esp\n" "xorl %%ebp, %%ebp\n"
"sub %1, %%esp\n" "pushl %[Cr0Value]\n"
"push %2\n" "jmp *%[TargetRoutine]\n"
"jmp *%3\n"
: :
: "m" (Stack), : [Cr0Value] "i" (CR0_EM | CR0_MP | CR0_TS),
"i" (KTRAP_FRAME_ALIGN | KTRAP_FRAME_SIZE | NPX_FRAME_SIZE | KRETURN_ADDRESS_SIZE), [Stack] "r" (Stack),
"i" (CR0_EM | CR0_MP | CR0_TS), [TargetRoutine] "r" (StartKernel),
"r" (StartKernel) [TotalSize] "i" (KTRAP_FRAME_ALIGN + KTRAP_FRAME_SIZE + NPX_FRAME_SIZE + KRETURN_ADDRESS_SIZE)
: "edx", "ebp", "esp", "memory"); : "ebp", "esp", "memory");
} }