From 1da84c2a2cec89c4d99844ae721561955b35bb1b Mon Sep 17 00:00:00 2001 From: Timon Kruiper Date: Tue, 27 Dec 2022 14:24:50 +0100 Subject: [PATCH] Kernel: Factor out setting Thread entry function This adds ThreadRegisters::set_entry_function, and also implements it for aarch64. --- Kernel/Arch/aarch64/ThreadRegisters.h | 6 ++++++ Kernel/Arch/x86_64/ThreadRegisters.h | 6 ++++++ Kernel/Process.cpp | 10 +--------- 3 files changed, 13 insertions(+), 9 deletions(-) diff --git a/Kernel/Arch/aarch64/ThreadRegisters.h b/Kernel/Arch/aarch64/ThreadRegisters.h index 540b588693..a3fffaeaa7 100644 --- a/Kernel/Arch/aarch64/ThreadRegisters.h +++ b/Kernel/Arch/aarch64/ThreadRegisters.h @@ -25,6 +25,12 @@ struct ThreadRegisters { { set_sp(kernel_stack_top); } + + void set_entry_function(FlatPtr entry_ip, FlatPtr entry_data) + { + set_ip(entry_ip); + x[0] = entry_data; + } }; } diff --git a/Kernel/Arch/x86_64/ThreadRegisters.h b/Kernel/Arch/x86_64/ThreadRegisters.h index 921b2eb610..84004f4abe 100644 --- a/Kernel/Arch/x86_64/ThreadRegisters.h +++ b/Kernel/Arch/x86_64/ThreadRegisters.h @@ -73,6 +73,12 @@ struct ThreadRegisters { set_sp0(kernel_stack_top); } } + + void set_entry_function(FlatPtr entry_ip, FlatPtr entry_data) + { + set_ip(entry_ip); + rdi = entry_data; // entry function argument is expected to be in regs.rdi + } }; } diff --git a/Kernel/Process.cpp b/Kernel/Process.cpp index 73e0ff94f3..51bb92217d 100644 --- a/Kernel/Process.cpp +++ b/Kernel/Process.cpp @@ -273,15 +273,7 @@ LockRefPtr Process::create_kernel_process(LockRefPtr& first_thr return {}; auto process = process_or_error.release_value(); - first_thread->regs().set_ip((FlatPtr)entry); -#if ARCH(X86_64) - first_thread->regs().rdi = FlatPtr(entry_data); // entry function argument is expected to be in regs.rdi -#elif ARCH(AARCH64) - (void)entry_data; - TODO_AARCH64(); -#else -# error Unknown architecture -#endif + first_thread->regs().set_entry_function((FlatPtr)entry, (FlatPtr)entry_data); if (do_register == RegisterProcess::Yes) register_new(*process);