[pcbios] Save/restore %es in INT 15,e820
authorMichael Brown <mcb30@etherboot.org>
Sun, 28 Sep 2008 23:36:11 +0000 (00:36 +0100)
committerMichael Brown <mcb30@etherboot.org>
Sun, 28 Sep 2008 23:36:11 +0000 (00:36 +0100)
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

index ad773f7..437efa7 100644 (file)
@@ -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 */