]> git.sur5r.net Git - u-boot/blob - arch/x86/lib/crt0_ia32_efi.S
30e5eb0c1a39aa581a862ab8b022eed43c5c72b1
[u-boot] / arch / x86 / lib / crt0_ia32_efi.S
1 /*
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
23 0:      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
46 dummy:  .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 */