[PATCH 11/31] sandbox: Provide an EFI link script for PE
Simon Glass
sjg at chromium.org
Tue Apr 25 01:08:16 CEST 2023
Add another case for sandbox, when it is built on Windows.
Signed-off-by: Simon Glass <sjg at chromium.org>
---
arch/sandbox/config.mk | 4 +-
arch/x86/lib/crt0_x86_64_efi.S | 2 +
arch/x86/lib/pe_x86_64_efi.lds | 83 ++++++++++++++++++++++++++++++++++
3 files changed, 88 insertions(+), 1 deletion(-)
create mode 100644 arch/x86/lib/pe_x86_64_efi.lds
diff --git a/arch/sandbox/config.mk b/arch/sandbox/config.mk
index e05daf57ef8e..3269e6f3d2ce 100644
--- a/arch/sandbox/config.mk
+++ b/arch/sandbox/config.mk
@@ -44,7 +44,9 @@ cmd_u-boot-spl = (cd $(obj) && $(CC) -o $(SPL_BIN) -Wl,-T u-boot-spl.lds \
-Wl,--no-whole-archive \
$(PLATFORM_LIBS) -Wl,-Map -Wl,u-boot-spl.map -Wl,--gc-sections)
-ifeq ($(HOST_ARCH),$(HOST_ARCH_X86_64))
+ifneq ($(MSYS_VERSION),0)
+EFI_LDS := ${SRCDIR}/../../../arch/x86/lib/pe_x86_64_efi.lds
+else ifeq ($(HOST_ARCH),$(HOST_ARCH_X86_64))
EFI_LDS := ${SRCDIR}/../../../arch/x86/lib/elf_x86_64_efi.lds
EFI_TARGET := --target=efi-app-x86_64
else ifeq ($(HOST_ARCH),$(HOST_ARCH_X86))
diff --git a/arch/x86/lib/crt0_x86_64_efi.S b/arch/x86/lib/crt0_x86_64_efi.S
index 47ed5af97228..cd61b4bdd82f 100644
--- a/arch/x86/lib/crt0_x86_64_efi.S
+++ b/arch/x86/lib/crt0_x86_64_efi.S
@@ -15,6 +15,7 @@
_start:
subq $8, %rsp
+#ifndef __CYGWIN__
pushq %rcx
pushq %rdx
@@ -28,6 +29,7 @@ _start:
testq %rax, %rax
jnz .exit
+#endif
call efi_main
.exit:
diff --git a/arch/x86/lib/pe_x86_64_efi.lds b/arch/x86/lib/pe_x86_64_efi.lds
new file mode 100644
index 000000000000..1ee08f6e662e
--- /dev/null
+++ b/arch/x86/lib/pe_x86_64_efi.lds
@@ -0,0 +1,83 @@
+/* SPDX-License-Identifier: BSD-2-Clause */
+/*
+ * U-Boot EFI linker script
+ *
+ * Modified from usr/lib32/elf_x86_64_efi.lds in gnu-efi
+ */
+
+OUTPUT_FORMAT("pe-x86-64", "pe-x86-64", "pe-x86-64")
+OUTPUT_ARCH(i386:x86-64)
+ENTRY(_start)
+SECTIONS
+{
+ image_base = .;
+ .hash : { *(.hash) } /* this MUST come first, EFI expects it */
+ . = ALIGN(4096);
+ .eh_frame : {
+ *(.eh_frame)
+ }
+
+ . = ALIGN(4096);
+
+ .text : {
+ *(.text)
+ *(.text.*)
+ *(.gnu.linkonce.t.*)
+ }
+
+ . = ALIGN(4096);
+
+ .reloc : {
+ *(.reloc)
+ }
+
+ . = ALIGN(4096);
+
+ .data : {
+ *(.rodata*)
+ *(.got.plt)
+ *(.got)
+ *(.data*)
+ *(.sdata)
+ /* the EFI loader doesn't seem to like a .bss section, so we stick
+ * it all into .data: */
+ *(.sbss)
+ *(.scommon)
+ *(.dynbss)
+ *(.bss*)
+ *(COMMON)
+ *(.rel.local)
+
+ /* U-Boot lists and device tree */
+ . = ALIGN(8);
+ *(SORT(__u_boot_list*));
+ . = ALIGN(8);
+ *(.dtb*);
+ }
+
+ . = ALIGN(4096);
+ .dynamic : { *(.dynamic) }
+ . = ALIGN(4096);
+
+ .rela : {
+ *(.rela.data*)
+ *(.rela.got)
+ *(.rela.stab)
+ *(.rela__u_boot_list*)
+ }
+
+ . = ALIGN(4096);
+ .dynsym : { *(.dynsym) }
+ . = ALIGN(4096);
+ .dynstr : { *(.dynstr) }
+ . = ALIGN(4096);
+
+ /DISCARD/ : { *(.eh_frame) }
+
+ .ignored.reloc : {
+ *(.rela.reloc)
+ *(.note.GNU-stack)
+ }
+
+ .comment 0 : { *(.comment) }
+}
--
2.40.0.634.g4ca3ef3211-goog
More information about the U-Boot
mailing list