xref: /openbmc/u-boot/arch/x86/lib/crt0_ia32_efi.S (revision 83d290c56fab2d38cd1ab4c4cc7099559c1d5046)
1*83d290c5STom Rini/* SPDX-License-Identifier: BSD-3-Clause */
22dcd4e9eSSimon Glass/*
32dcd4e9eSSimon Glass * crt0-efi-ia32.S - x86 EFI startup code.
42dcd4e9eSSimon Glass *
52dcd4e9eSSimon Glass * Copyright (C) 1999 Hewlett-Packard Co.
62dcd4e9eSSimon Glass * Contributed by David Mosberger <davidm@hpl.hp.com>.
72dcd4e9eSSimon Glass * All rights reserved.
82dcd4e9eSSimon Glass */
92dcd4e9eSSimon Glass
102dcd4e9eSSimon Glass	.text
112dcd4e9eSSimon Glass	.align 4
122dcd4e9eSSimon Glass
132dcd4e9eSSimon Glass	.globl _start
142dcd4e9eSSimon Glass_start:
152dcd4e9eSSimon Glass	pushl %ebp
162dcd4e9eSSimon Glass	movl %esp,%ebp
172dcd4e9eSSimon Glass
182dcd4e9eSSimon Glass	pushl 12(%ebp)			# copy "image" argument
192dcd4e9eSSimon Glass	pushl  8(%ebp)			# copy "systab" argument
202dcd4e9eSSimon Glass
212dcd4e9eSSimon Glass	call 0f
222dcd4e9eSSimon Glass0:	popl %eax
232dcd4e9eSSimon Glass	movl %eax,%ebx
242dcd4e9eSSimon Glass
252dcd4e9eSSimon Glass	addl $image_base-0b,%eax	# %eax = ldbase
262dcd4e9eSSimon Glass	addl $_DYNAMIC-0b,%ebx		# %ebx = _DYNAMIC
272dcd4e9eSSimon Glass
282dcd4e9eSSimon Glass	pushl %ebx			# pass _DYNAMIC as second argument
292dcd4e9eSSimon Glass	pushl %eax			# pass ldbase as first argument
302dcd4e9eSSimon Glass	call _relocate
312dcd4e9eSSimon Glass	popl %ebx
322dcd4e9eSSimon Glass	popl %ebx
332dcd4e9eSSimon Glass	testl %eax,%eax
342dcd4e9eSSimon Glass	jne .exit
352dcd4e9eSSimon Glass	call efi_main		# call app with "image" and "systab" argument
362dcd4e9eSSimon Glass
372dcd4e9eSSimon Glass.exit:	leave
382dcd4e9eSSimon Glass	ret
392dcd4e9eSSimon Glass
402dcd4e9eSSimon Glass	/*
412dcd4e9eSSimon Glass	 * hand-craft a dummy .reloc section so EFI knows it's a relocatable
422dcd4e9eSSimon Glass	 * executable:
432dcd4e9eSSimon Glass	 */
442dcd4e9eSSimon Glass	.data
452dcd4e9eSSimon Glassdummy:	.long	0
462dcd4e9eSSimon Glass
472dcd4e9eSSimon Glass#define IMAGE_REL_ABSOLUTE	0
482dcd4e9eSSimon Glass	.section .reloc
492dcd4e9eSSimon Glass	.long	dummy					/* Page RVA */
502dcd4e9eSSimon Glass	.long	10					/* Block Size (2*4+2) */
512dcd4e9eSSimon Glass	.word	(IMAGE_REL_ABSOLUTE << 12) +  0		/* reloc for dummy */
52