diff --git a/kernel/arch/i686/Syscall.S b/kernel/arch/i686/Syscall.S index fbe605de..a7e0ccd6 100644 --- a/kernel/arch/i686/Syscall.S +++ b/kernel/arch/i686/Syscall.S @@ -63,7 +63,7 @@ sys_fork_trampoline: call read_ip testl %eax, %eax - jz .reload_stack + jz .done movl %esp, %ebx @@ -79,9 +79,3 @@ sys_fork_trampoline: popl %ebx popl %ebp ret - - .reload_stack: - call get_thread_start_sp - movl %eax, %esp - xorl %eax, %eax - jmp .done diff --git a/kernel/arch/i686/Thread.S b/kernel/arch/i686/Thread.S index bd74655a..c66ae625 100644 --- a/kernel/arch/i686/Thread.S +++ b/kernel/arch/i686/Thread.S @@ -7,9 +7,6 @@ read_ip: # void start_kernel_thread() .global start_kernel_thread start_kernel_thread: - call get_thread_start_sp - movl %eax, %esp - # STACK LAYOUT # on_exit arg # on_exit func @@ -34,9 +31,6 @@ start_kernel_thread: .global start_userspace_thread start_userspace_thread: - call get_thread_start_sp - movl %eax, %esp - movw $(0x20 | 3), %bx movw %bx, %ds movw %bx, %es diff --git a/kernel/arch/x86_64/Syscall.S b/kernel/arch/x86_64/Syscall.S index 92d58c85..23554491 100644 --- a/kernel/arch/x86_64/Syscall.S +++ b/kernel/arch/x86_64/Syscall.S @@ -33,7 +33,7 @@ sys_fork_trampoline: call read_ip testq %rax, %rax - je .done + jz .done movq %rax, %rsi movq %rsp, %rdi diff --git a/kernel/arch/x86_64/Thread.S b/kernel/arch/x86_64/Thread.S index dfd09801..5d7ec087 100644 --- a/kernel/arch/x86_64/Thread.S +++ b/kernel/arch/x86_64/Thread.S @@ -7,9 +7,6 @@ read_ip: # void start_kernel_thread() .global start_kernel_thread start_kernel_thread: - call get_thread_start_sp - movq %rax, %rsp - # STACK LAYOUT # on_exit arg # on_exit func @@ -27,9 +24,5 @@ start_kernel_thread: .global start_userspace_thread start_userspace_thread: - call get_thread_start_sp - movq %rax, %rsp - swapgs - iretq diff --git a/kernel/kernel/Thread.cpp b/kernel/kernel/Thread.cpp index 15cc5217..3e8fd163 100644 --- a/kernel/kernel/Thread.cpp +++ b/kernel/kernel/Thread.cpp @@ -25,11 +25,6 @@ namespace Kernel *(uintptr_t*)rsp = (uintptr_t)value; } - extern "C" uintptr_t get_thread_start_sp() - { - return Thread::current().yield_registers().sp; - } - static pid_t s_next_tid = 1; alignas(16) static uint8_t s_default_sse_storage[512];