Message ID | 20230430013003.1047454-25-sjg@chromium.org |
---|---|
State | Changes Requested |
Delegated to: | Tom Rini |
Headers | show |
Series | Allow building sandbox with MSYS2 | expand |
Hi Simon, On Sun, Apr 30, 2023 at 9:30 AM Simon Glass <sjg@chromium.org> wrote: > > Add another case for sandbox, when it is built on Windows. > > Signed-off-by: Simon Glass <sjg@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
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__ 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) } +}
Add another case for sandbox, when it is built on Windows. Signed-off-by: Simon Glass <sjg@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