feat: initial scalable x86_64 microkernel skeleton with Limine, Rust, C HAL, and C++20 IPC

This commit is contained in:
RarDog
2026-09-02 16:47:37 +03:00
commit 9cffb01889
47 changed files with 2432 additions and 0 deletions
+33
View File
@@ -0,0 +1,33 @@
/* opencoreC - Thread Context Switch */
.global switch_to
.section .text
/*
* void switch_to(uint64_t **prev_rsp_ptr, uint64_t *next_rsp);
* RDI = pointer to current thread's stored RSP
* RSI = target thread's RSP
*/
switch_to:
/* Push callee-saved registers of outgoing thread */
push rbp
push rbx
push r12
push r13
push r14
push r15
/* Save current stack pointer */
mov [rdi], rsp
/* Load target stack pointer */
mov rsp, rsi
/* Pop callee-saved registers of incoming thread */
pop r15
pop r14
pop r13
pop r12
pop rbx
pop rbp
ret
+53
View File
@@ -0,0 +1,53 @@
/* opencoreC - Fast Syscall Entry Trampoline (x86_64) */
.global syscall_entry
.extern kernel_syscall_dispatcher
.section .bss
.align 16
user_scratch_rsp:
.quad 0
kernel_temp_stack:
.skip 4096
kernel_temp_stack_top:
.section .text
syscall_entry:
/* Save user stack pointer */
mov [rip + user_scratch_rsp], rsp
lea rsp, [rip + kernel_temp_stack_top]
/* Save user RIP (in RCX) and user RFLAGS (in R11) */
push rcx
push r11
/* Save argument and volatile registers to construct SyscallRegisters */
push rax
push rdi
push rsi
push rdx
push r8
push r9
push r10
/* Pass pointer to SyscallRegisters struct in RDI */
mov rdi, rsp
call kernel_syscall_dispatcher
/* Restore registers (rax, rdx, r8 may have return values from dispatcher) */
pop r10
pop r9
pop r8
pop rdx
pop rsi
pop rdi
pop rax
/* Restore user RIP and RFLAGS */
pop r11
pop rcx
/* Restore user stack */
mov rsp, [rip + user_scratch_rsp]
/* Return to Ring 3 */
sysretq