mirror of
				https://github.com/xcat2/xNBA.git
				synced 2025-11-03 21:02:36 +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:
		@@ -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
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user