diff options
author | Tom Rini <trini@konsulko.com> | 2015-08-05 14:12:37 -0400 |
---|---|---|
committer | Tom Rini <trini@konsulko.com> | 2015-08-05 14:12:37 -0400 |
commit | 1a2728ae4faf12874173de156b8a7e66cfbbeae5 (patch) | |
tree | 9aba8e6c915b341df8ec6077d8ecb28f1eb32b0b /arch/x86/lib/efi/crt0-efi-ia32.S | |
parent | dcc7dbc73169bb4e39f27c1d95bbf031ccfc1744 (diff) | |
parent | 12c7510f17ff29190e52336910e43a50c0d620a6 (diff) |
Merge git://git.denx.de/u-boot-x86
Diffstat (limited to 'arch/x86/lib/efi/crt0-efi-ia32.S')
-rw-r--r-- | arch/x86/lib/efi/crt0-efi-ia32.S | 52 |
1 files changed, 52 insertions, 0 deletions
diff --git a/arch/x86/lib/efi/crt0-efi-ia32.S b/arch/x86/lib/efi/crt0-efi-ia32.S new file mode 100644 index 0000000000..30e5eb0c1a --- /dev/null +++ b/arch/x86/lib/efi/crt0-efi-ia32.S @@ -0,0 +1,52 @@ +/* + * crt0-efi-ia32.S - x86 EFI startup code. + * + * Copyright (C) 1999 Hewlett-Packard Co. + * Contributed by David Mosberger <davidm@hpl.hp.com>. + * All rights reserved. + * + * SPDX-License-Identifier: BSD-3-Clause + */ + + .text + .align 4 + + .globl _start +_start: + pushl %ebp + movl %esp,%ebp + + pushl 12(%ebp) # copy "image" argument + pushl 8(%ebp) # copy "systab" argument + + call 0f +0: popl %eax + movl %eax,%ebx + + addl $image_base-0b,%eax # %eax = ldbase + addl $_DYNAMIC-0b,%ebx # %ebx = _DYNAMIC + + pushl %ebx # pass _DYNAMIC as second argument + pushl %eax # pass ldbase as first argument + call _relocate + popl %ebx + popl %ebx + testl %eax,%eax + jne .exit + call efi_main # call app with "image" and "systab" argument + +.exit: leave + ret + + /* + * hand-craft a dummy .reloc section so EFI knows it's a relocatable + * executable: + */ + .data +dummy: .long 0 + +#define IMAGE_REL_ABSOLUTE 0 + .section .reloc + .long dummy /* Page RVA */ + .long 10 /* Block Size (2*4+2) */ + .word (IMAGE_REL_ABSOLUTE << 12) + 0 /* reloc for dummy */ |