2
0
mirror of https://github.com/xcat2/xNBA.git synced 2024-11-26 03:09:12 +00:00

[liba20] Preserve all non-segment registers when calling INT 15,2401

Some BIOSes are reported to corrupt %ebx when using INT 15,2401 (see
http://opensolaris.org/jive/thread.jspa?messageID=377026).  Guard
against this by preserving all (non-segment) registers.

Signed-off-by: Michael Brown <mcb30@ipxe.org>
This commit is contained in:
Michael Brown 2011-10-25 15:48:20 +01:00
parent 4d8a009ccf
commit c77aece36a

View File

@ -96,8 +96,11 @@ test_a20_long:
.section ".text16.early", "awx", @progbits
.code16
enable_a20_bios:
/* Preserve registers */
pushw %ax
/* Preserve registers. Be very paranoid, since some BIOSes
* are reported to clobber %ebx
*/
pushal
/* Attempt INT 15,2401 */
movw $0x2401, %ax
@ -108,7 +111,7 @@ enable_a20_bios:
call test_a20_short
99: /* Restore registers and return */
popw %ax
popal
ret
.size enable_a20_bios, . - enable_a20_bios