Kernel: Improve multithreading support

We can now use arbitary BAN::function<void(...)> as the Thread.
I also implemented multithreading for i386 since it was not done
on the initial multithreading commit.
This commit is contained in:
Bananymous
2023-02-02 23:24:12 +02:00
parent 777ede328e
commit 5b5e620d8a
8 changed files with 158 additions and 88 deletions

View File

@@ -0,0 +1,32 @@
# uint64_t read_rip()
.global read_rip
read_rip:
popq %rax
jmp *%rax
.global get_thread_at_exit
get_thread_at_exit:
movq 8(%rdi), %rax
ret
exit_thread_trampoline:
movq 8(%rsp), %rdi
ret
# void start_thread(uint64_t arg0, uint64_t arg1, uint64_t arg2, uint64_t arg3, uint64_t rsp, uint64_t rbp, uint64_t rip)
.global start_thread
start_thread:
movq 8(%rsp), %rcx
movq %r8, %rsp
movq %r9, %rbp
pushq $exit_thread_trampoline
sti
jmp *%rcx
# void continue_thread(uint64_t rsp, uint64_t rbp, uint64_t rip)
.global continue_thread
continue_thread:
movq %rdi, %rsp
movq %rsi, %rbp
movq $0, %rax
jmp *%rdx

View File

@@ -9,4 +9,5 @@ $(ARCHDIR)/IDT.o \
$(ARCHDIR)/interrupts.o \
$(ARCHDIR)/MMU.o \
$(ARCHDIR)/SpinLock.o \
$(ARCHDIR)/Thread.o \