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