xref: /rk3399_rockchip-uboot/arch/x86/lib/crt0_ia32_efi.S (revision 2d221489df021393654805536be7effcb9d39702)
1*2dcd4e9eSSimon Glass/*
2*2dcd4e9eSSimon Glass * crt0-efi-ia32.S - x86 EFI startup code.
3*2dcd4e9eSSimon Glass *
4*2dcd4e9eSSimon Glass * Copyright (C) 1999 Hewlett-Packard Co.
5*2dcd4e9eSSimon Glass * Contributed by David Mosberger <davidm@hpl.hp.com>.
6*2dcd4e9eSSimon Glass * All rights reserved.
7*2dcd4e9eSSimon Glass *
8*2dcd4e9eSSimon Glass * SPDX-License-Identifier:	BSD-3-Clause
9*2dcd4e9eSSimon Glass */
10*2dcd4e9eSSimon Glass
11*2dcd4e9eSSimon Glass	.text
12*2dcd4e9eSSimon Glass	.align 4
13*2dcd4e9eSSimon Glass
14*2dcd4e9eSSimon Glass	.globl _start
15*2dcd4e9eSSimon Glass_start:
16*2dcd4e9eSSimon Glass	pushl %ebp
17*2dcd4e9eSSimon Glass	movl %esp,%ebp
18*2dcd4e9eSSimon Glass
19*2dcd4e9eSSimon Glass	pushl 12(%ebp)			# copy "image" argument
20*2dcd4e9eSSimon Glass	pushl  8(%ebp)			# copy "systab" argument
21*2dcd4e9eSSimon Glass
22*2dcd4e9eSSimon Glass	call 0f
23*2dcd4e9eSSimon Glass0:	popl %eax
24*2dcd4e9eSSimon Glass	movl %eax,%ebx
25*2dcd4e9eSSimon Glass
26*2dcd4e9eSSimon Glass	addl $image_base-0b,%eax	# %eax = ldbase
27*2dcd4e9eSSimon Glass	addl $_DYNAMIC-0b,%ebx		# %ebx = _DYNAMIC
28*2dcd4e9eSSimon Glass
29*2dcd4e9eSSimon Glass	pushl %ebx			# pass _DYNAMIC as second argument
30*2dcd4e9eSSimon Glass	pushl %eax			# pass ldbase as first argument
31*2dcd4e9eSSimon Glass	call _relocate
32*2dcd4e9eSSimon Glass	popl %ebx
33*2dcd4e9eSSimon Glass	popl %ebx
34*2dcd4e9eSSimon Glass	testl %eax,%eax
35*2dcd4e9eSSimon Glass	jne .exit
36*2dcd4e9eSSimon Glass	call efi_main		# call app with "image" and "systab" argument
37*2dcd4e9eSSimon Glass
38*2dcd4e9eSSimon Glass.exit:	leave
39*2dcd4e9eSSimon Glass	ret
40*2dcd4e9eSSimon Glass
41*2dcd4e9eSSimon Glass	/*
42*2dcd4e9eSSimon Glass	 * hand-craft a dummy .reloc section so EFI knows it's a relocatable
43*2dcd4e9eSSimon Glass	 * executable:
44*2dcd4e9eSSimon Glass	 */
45*2dcd4e9eSSimon Glass	.data
46*2dcd4e9eSSimon Glassdummy:	.long	0
47*2dcd4e9eSSimon Glass
48*2dcd4e9eSSimon Glass#define IMAGE_REL_ABSOLUTE	0
49*2dcd4e9eSSimon Glass	.section .reloc
50*2dcd4e9eSSimon Glass	.long	dummy					/* Page RVA */
51*2dcd4e9eSSimon Glass	.long	10					/* Block Size (2*4+2) */
52*2dcd4e9eSSimon Glass	.word	(IMAGE_REL_ABSOLUTE << 12) +  0		/* reloc for dummy */
53