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