diff options
Diffstat (limited to 'arch/x86/boot/compressed/head_32.S')
| -rw-r--r-- | arch/x86/boot/compressed/head_32.S | 22 | 
1 files changed, 22 insertions, 0 deletions
diff --git a/arch/x86/boot/compressed/head_32.S b/arch/x86/boot/compressed/head_32.S index 67a655a39ce..a0559930a18 100644 --- a/arch/x86/boot/compressed/head_32.S +++ b/arch/x86/boot/compressed/head_32.S @@ -32,6 +32,28 @@  	__HEAD  ENTRY(startup_32) +#ifdef CONFIG_EFI_STUB +	/* +	 * We don't need the return address, so set up the stack so +	 * efi_main() can find its arugments. +	 */ +	add	$0x4, %esp + +	call	efi_main +	cmpl	$0, %eax +	je	preferred_addr +	movl	%eax, %esi +	call	1f +1: +	popl	%eax +	subl	$1b, %eax +	subl	BP_pref_address(%esi), %eax +	add	BP_code32_start(%esi), %eax +	leal	preferred_addr(%eax), %eax +	jmp	*%eax + +preferred_addr: +#endif  	cld  	/*  	 * Test KEEP_SEGMENTS flag to see if the bootloader is asking  |