From: Michael Brown Date: Sun, 28 Sep 2008 23:36:11 +0000 (+0100) Subject: [pcbios] Save/restore %es in INT 15,e820 X-Git-Tag: v0.9.5~9 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=50dc9344b7265915f5b9b1f795d024e775e3ae49;p=thirdparty%2Fipxe.git [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. --- diff --git a/src/arch/i386/firmware/pcbios/e820mangler.S b/src/arch/i386/firmware/pcbios/e820mangler.S index ad773f741..437efa776 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 */