Most EFI implementations use 64-bit. Add a way to build U-Boot as a 64-bit EFI payload. The payload unpacks a (32-bit) U-Boot and starts it. This can be enabled for x86 boards at present. Signed-off-by: Simon Glass <sjg@chromium.org> Improvements to how the payload is built: Signed-off-by: Bin Meng <bmeng.cn@gmail.com> Reviewed-by: Bin Meng <bmeng.cn@gmail.com> Tested-by: Bin Meng <bmeng.cn@gmail.com>master
parent
6f92ed8f1a
commit
96a8d409a7
@ -0,0 +1,51 @@ |
|||||||
|
/* |
||||||
|
* 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 Co. |
||||||
|
* Contributed by Fenghua Yu <fenghua.yu@intel.com>.
|
||||||
|
* |
||||||
|
* All rights reserved. |
||||||
|
* SPDX-License-Identifier: BSD-3-Clause |
||||||
|
*/ |
||||||
|
.text |
||||||
|
.align 4
|
||||||
|
|
||||||
|
.globl _start
|
||||||
|
_start: |
||||||
|
subq $8, %rsp |
||||||
|
pushq %rcx |
||||||
|
pushq %rdx |
||||||
|
|
||||||
|
0: |
||||||
|
lea image_base(%rip), %rdi |
||||||
|
lea _DYNAMIC(%rip), %rsi |
||||||
|
|
||||||
|
popq %rcx |
||||||
|
popq %rdx |
||||||
|
pushq %rcx |
||||||
|
pushq %rdx |
||||||
|
call _relocate |
||||||
|
|
||||||
|
popq %rdi |
||||||
|
popq %rsi |
||||||
|
|
||||||
|
call efi_main |
||||||
|
addq $8, %rsp |
||||||
|
|
||||||
|
.exit: |
||||||
|
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 */ |
Loading…
Reference in new issue