Add another case for sandbox, when it is built on Windows.

Signed-off-by: Simon Glass <s...@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

Reply via email to