Module Name: src
Committed By: jakllsch
Date: Sun Dec 19 17:18:23 UTC 2010
Modified Files:
src/sys/arch/i386/stand/lib: realprot.S
Log Message:
Compute real/protected %sp/%esp offset in 'gdt_fixup' using all 32-bits.
Allows the case of %ss being less than %cs to work.
Also, completely save and restore the general-purpose registers we use.
To generate a diff of this commit:
cvs rdiff -u -r1.9 -r1.10 src/sys/arch/i386/stand/lib/realprot.S
Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.
Modified files:
Index: src/sys/arch/i386/stand/lib/realprot.S
diff -u src/sys/arch/i386/stand/lib/realprot.S:1.9 src/sys/arch/i386/stand/lib/realprot.S:1.10
--- src/sys/arch/i386/stand/lib/realprot.S:1.9 Sat Nov 21 11:54:47 2009
+++ src/sys/arch/i386/stand/lib/realprot.S Sun Dec 19 17:18:23 2010
@@ -1,4 +1,4 @@
-/* $NetBSD: realprot.S,v 1.9 2009/11/21 11:54:47 dsl Exp $ */
+/* $NetBSD: realprot.S,v 1.10 2010/12/19 17:18:23 jakllsch Exp $ */
/*-
* Copyright (c) 2003 The NetBSD Foundation, Inc.
@@ -90,18 +90,18 @@
.global gdt_fixup
gdt_fixup:
.code16
- push %ax
- push %dx
+ pushl %eax
+ pushl %edx
xorl %eax, %eax
mov %cs, %ax
mov %ax, ourseg
/* sort out stuff for %ss != %ds */
+ xorl %edx, %edx
movw %ss, %dx
movw %dx, stkseg
- subw %ax, %dx
- shll $16, %edx
- shrl $12, %edx
+ subl %eax, %edx
+ shll $4, %edx
movl %edx, stkdif
/* fix up GDT entries for bootstrap */
@@ -121,8 +121,8 @@
addl $gdt, %eax
movl %eax, gdtarg+2
- pop %dx
- pop %ax
+ popl %edx
+ popl %eax
ret
/*