From 49533df72ec8ed97083fba80561fdfb9e04e8409 Mon Sep 17 00:00:00 2001 From: Jacek Galowicz Date: Wed, 11 Apr 2012 08:41:58 +0200 Subject: [PATCH] Made the interrupt entry also safe the registers DS to GS. This may be removed in the future for speed purposes. --- arch/x86/include/asm/stddef.h | 12 ++++++++++++ arch/x86/kernel/entry.asm | 9 +++++++++ 2 files changed, 21 insertions(+) diff --git a/arch/x86/include/asm/stddef.h b/arch/x86/include/asm/stddef.h index f3ef4468..581c72ab 100644 --- a/arch/x86/include/asm/stddef.h +++ b/arch/x86/include/asm/stddef.h @@ -70,6 +70,18 @@ typedef unsigned int wint_t; * All the interrupt handler routines use this type for their only parameter. */ struct state { + /// GS register + unsigned short gs; + unsigned short __gs; + /// FS register + unsigned short fs; + unsigned short __fs; + /// ES register + unsigned short es; + unsigned short __es; + /// ds register + unsigned short ds; + unsigned short __ds; /// EDI register unsigned int edi; /// ESI register diff --git a/arch/x86/kernel/entry.asm b/arch/x86/kernel/entry.asm index 8d34dff9..8f9a3973 100644 --- a/arch/x86/kernel/entry.asm +++ b/arch/x86/kernel/entry.asm @@ -767,13 +767,22 @@ extern irq_handler common_stub: pusha + push ds + push es + push fs + push gs ; use the same handler for interrupts and exceptions push esp call irq_handler add esp, 4 + pop gs + pop fs + pop es + pop gs popa + add esp, 8 iret