summaryrefslogtreecommitdiff
path: root/Kernel
diff options
context:
space:
mode:
Diffstat (limited to 'Kernel')
-rw-r--r--Kernel/Arch/i386/CPU.cpp59
-rw-r--r--Kernel/Arch/i386/PIT.cpp1
-rw-r--r--Kernel/Syscall.cpp1
3 files changed, 33 insertions, 28 deletions
diff --git a/Kernel/Arch/i386/CPU.cpp b/Kernel/Arch/i386/CPU.cpp
index 738dcf35b3..1bbdb0bd50 100644
--- a/Kernel/Arch/i386/CPU.cpp
+++ b/Kernel/Arch/i386/CPU.cpp
@@ -55,6 +55,7 @@ asm(
" pushw %ss\n"
" popw %ds\n"
" popw %es\n"
+ " cld\n"
" call handle_irq\n"
" popw %es\n"
" popw %ds\n"
@@ -82,6 +83,7 @@ asm(
" popw %es\n" \
" popw %fs\n" \
" popw %gs\n" \
+ " cld\n" \
" call exception_" #ec "_handler\n" \
" popw %gs\n" \
" popw %gs\n" \
@@ -92,35 +94,36 @@ asm(
" add $0x4, %esp\n" \
" iret\n");
-#define EH_ENTRY_NO_CODE(ec) \
+#define EH_ENTRY_NO_CODE(ec) \
extern "C" void exception_##ec##_handler(RegisterDump); \
- extern "C" void exception_##ec##_entry(); \
- asm( \
- ".globl exception_" #ec "_entry\n" \
- "exception_" #ec "_entry: \n" \
- " pushl $0x0\n" \
- " pusha\n" \
- " pushw %ds\n" \
- " pushw %es\n" \
- " pushw %fs\n" \
- " pushw %gs\n" \
- " pushw %ss\n" \
- " pushw %ss\n" \
- " pushw %ss\n" \
- " pushw %ss\n" \
- " pushw %ss\n" \
- " popw %ds\n" \
- " popw %es\n" \
- " popw %fs\n" \
- " popw %gs\n" \
- " call exception_" #ec "_handler\n" \
- " popw %gs\n" \
- " popw %gs\n" \
- " popw %fs\n" \
- " popw %es\n" \
- " popw %ds\n" \
- " popa\n" \
- " add $0x4, %esp\n" \
+ extern "C" void exception_##ec##_entry(); \
+ asm( \
+ ".globl exception_" #ec "_entry\n" \
+ "exception_" #ec "_entry: \n" \
+ " pushl $0x0\n" \
+ " pusha\n" \
+ " pushw %ds\n" \
+ " pushw %es\n" \
+ " pushw %fs\n" \
+ " pushw %gs\n" \
+ " pushw %ss\n" \
+ " pushw %ss\n" \
+ " pushw %ss\n" \
+ " pushw %ss\n" \
+ " pushw %ss\n" \
+ " popw %ds\n" \
+ " popw %es\n" \
+ " popw %fs\n" \
+ " popw %gs\n" \
+ " cld\n" \
+ " call exception_" #ec "_handler\n" \
+ " popw %gs\n" \
+ " popw %gs\n" \
+ " popw %fs\n" \
+ " popw %es\n" \
+ " popw %ds\n" \
+ " popa\n" \
+ " add $0x4, %esp\n" \
" iret\n");
static void dump(const RegisterDump& regs)
diff --git a/Kernel/Arch/i386/PIT.cpp b/Kernel/Arch/i386/PIT.cpp
index b4861c3066..0a64e6d34f 100644
--- a/Kernel/Arch/i386/PIT.cpp
+++ b/Kernel/Arch/i386/PIT.cpp
@@ -27,6 +27,7 @@ asm(
" popw %es\n"
" popw %fs\n"
" popw %gs\n"
+ " cld\n"
" call timer_interrupt_handler\n"
" popw %gs\n"
" popw %gs\n"
diff --git a/Kernel/Syscall.cpp b/Kernel/Syscall.cpp
index 378a3e3e0b..9cc6cd365d 100644
--- a/Kernel/Syscall.cpp
+++ b/Kernel/Syscall.cpp
@@ -24,6 +24,7 @@ asm(
" popw %es\n"
" popw %fs\n"
" popw %gs\n"
+ " cld\n"
" call syscall_trap_entry\n"
" popw %gs\n"
" popw %gs\n"