diff --git a/kernel/x64/boot.S b/kernel/x64/boot.S index da5798c6..dc0cc5c4 100644 --- a/kernel/x64/boot.S +++ b/kernel/x64/boot.S @@ -73,6 +73,9 @@ nullpage: .global nullpage .code32 _start: __start: + # Clear the direction flag. + cld + # Initialize the stack pointer. The magic value is from kernel.cpp. movl $(stack + 65536), %esp # 64 KiB, see kernel.cpp (See below also) diff --git a/kernel/x64/interrupt.S b/kernel/x64/interrupt.S index 712b667a..b93a70e9 100644 --- a/kernel/x64/interrupt.S +++ b/kernel/x64/interrupt.S @@ -339,6 +339,7 @@ thread_exit_handler: jmp interrupt_handler_prepare interrupt_handler_prepare: + cld movq $1, asm_is_cpu_interrupted pushq %r15 diff --git a/kernel/x64/syscall.S b/kernel/x64/syscall.S index 2ad76f54..c5f065c9 100644 --- a/kernel/x64/syscall.S +++ b/kernel/x64/syscall.S @@ -24,6 +24,7 @@ .section .text .type syscall_handler, @function syscall_handler: + cld movl $0, errno pushq %rbp diff --git a/kernel/x86/boot.S b/kernel/x86/boot.S index acef8104..456cdbc0 100644 --- a/kernel/x86/boot.S +++ b/kernel/x86/boot.S @@ -54,6 +54,9 @@ nullpage: .global nullpage .type __start, @function _start: __start: + # Clear the direction flag. + cld + # Initialize the stack pointer. The magic value is from kernel.cpp. movl $(stack + 65536), %esp # 64 KiB, see kernel.cpp diff --git a/kernel/x86/interrupt.S b/kernel/x86/interrupt.S index a159e8cc..0e5d4809 100644 --- a/kernel/x86/interrupt.S +++ b/kernel/x86/interrupt.S @@ -339,6 +339,7 @@ thread_exit_handler: jmp interrupt_handler_prepare interrupt_handler_prepare: + cld movl $1, asm_is_cpu_interrupted # Check if an interrupt happened while having kernel permissions. diff --git a/kernel/x86/syscall.S b/kernel/x86/syscall.S index 6aae706a..609a502b 100644 --- a/kernel/x86/syscall.S +++ b/kernel/x86/syscall.S @@ -25,6 +25,8 @@ .type syscall_handler, @function syscall_handler: /* -- stack is 12 bytes from being 16-byte aligned -- */ + cld + movl $0, errno pushl %ebp