diff options
Diffstat (limited to 'roms/u-boot/arch/x86/lib/crt0_x86_64_efi.S')
-rw-r--r-- | roms/u-boot/arch/x86/lib/crt0_x86_64_efi.S | 50 |
1 files changed, 50 insertions, 0 deletions
diff --git a/roms/u-boot/arch/x86/lib/crt0_x86_64_efi.S b/roms/u-boot/arch/x86/lib/crt0_x86_64_efi.S new file mode 100644 index 000000000..47ed5af97 --- /dev/null +++ b/roms/u-boot/arch/x86/lib/crt0_x86_64_efi.S @@ -0,0 +1,50 @@ +/* SPDX-License-Identifier: BSD-3-Clause */ +/* + * crt0-efi-x86_64.S - x86_64 EFI startup code. + * Copyright (C) 1999 Hewlett-Packard Co. + * Contributed by David Mosberger <davidm@hpl.hp.com>. + * Copyright (C) 2005 Intel Corporation + * Contributed by Fenghua Yu <fenghua.yu@intel.com>. + * + * All rights reserved. + */ + .text + .align 4 + + .globl _start +_start: + subq $8, %rsp + + pushq %rcx + pushq %rdx + + lea image_base(%rip), %rcx + lea _DYNAMIC(%rip), %rdx + + call _relocate + + popq %rdx + popq %rcx + + testq %rax, %rax + jnz .exit + + call efi_main +.exit: + addq $8, %rsp + + 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, "a" +label1: + .long dummy-label1 /* Page RVA */ + .long 10 /* Block Size (2*4+2) */ + .word (IMAGE_REL_ABSOLUTE << 12) + 0 /* reloc for dummy */ |