From 50dc9344b7265915f5b9b1f795d024e775e3ae49 Mon Sep 17 00:00:00 2001 From: Michael Brown Date: Mon, 29 Sep 2008 00:36:11 +0100 Subject: [PATCH] [pcbios] Save/restore %es in INT 15,e820 Our INT 15,e820 code was setting %es=%ss (as part of the "look ahead in the memory map" logic), but failing to restore %es afterwards. This is a serious bug, but wasn't affecting many platforms because almost all callers seem to set %es=%ss anyway. --- src/arch/i386/firmware/pcbios/e820mangler.S | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/arch/i386/firmware/pcbios/e820mangler.S b/src/arch/i386/firmware/pcbios/e820mangler.S index ad773f74..437efa77 100644 --- a/src/arch/i386/firmware/pcbios/e820mangler.S +++ b/src/arch/i386/firmware/pcbios/e820mangler.S @@ -436,6 +436,7 @@ get_mangled_e820: /* Peek ahead to see if there are any further nonempty regions */ pushal + pushw %es subw $20, %sp movl $0xe820, %eax movl $SMAP, %edx @@ -445,6 +446,7 @@ get_mangled_e820: movw %sp, %di call get_nonempty_e820 addr32 leal 20(%esp), %esp /* avoid changing flags */ + popw %es popal jnc 99f /* There are further nonempty regions */