[PATCH v2 24/30] sandbox: Provide an EFI link script for PE

Bin Meng bmeng.cn at gmail.com
Wed May 3 07:12:25 CEST 2023


Hi Simon,

On Sun, Apr 30, 2023 at 9:30 AM Simon Glass <sjg at chromium.org> wrote:
>
> Add another case for sandbox, when it is built on Windows.
>
> Signed-off-by: Simon Glass <sjg at chromium.org>
> ---
>
> (no changes since v1)
>
>  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 c97c39d4301b..d397ae3fe29b 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__

I think this should be __MSYS2__?

>         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) }
> +}
> --

Regards,
Bin


More information about the U-Boot mailing list