
Hi Pali,
On Tue, 25 Apr 2023 at 10:21, Pali Rohár pali@kernel.org wrote:
On Monday 24 April 2023 17:08:15 Simon Glass wrote:
Add a script to allow the U-Boot sandbox executable to be built for Windows. Add a note as to why this seems to be necessary for now.
Signed-off-by: Simon Glass sjg@chromium.org
Makefile | 11 +- arch/sandbox/config.mk | 4 + arch/sandbox/cpu/u-boot-pe.lds | 447 +++++++++++++++++++++++++++++++++ 3 files changed, 460 insertions(+), 2 deletions(-) create mode 100644 arch/sandbox/cpu/u-boot-pe.lds
diff --git a/Makefile b/Makefile index dd3fcd1782e5..0aa97a2c3b48 100644 --- a/Makefile +++ b/Makefile @@ -1730,6 +1730,13 @@ else u-boot-keep-syms-lto := endif
+ifeq ($(MSYS_VERSION),0) +add_ld_script := -T u-boot.lds +else +add_ld_script := u-boot.lds +$(warning msys) +endif
# Rule to link u-boot # May be overridden by arch/$(ARCH)/config.mk ifeq ($(LTO_ENABLE),y) @@ -1738,7 +1745,7 @@ quiet_cmd_u-boot__ ?= LTO $@ $(CC) -nostdlib -nostartfiles \ $(LTO_FINAL_LDFLAGS) $(c_flags) \ $(KBUILD_LDFLAGS:%=-Wl,%) $(LDFLAGS_u-boot:%=-Wl,%) -o $@ \
-T u-boot.lds $(u-boot-init) \
$(add_ld_script) $(u-boot-init) \ -Wl,--whole-archive \ $(u-boot-main) \ $(u-boot-keep-syms-lto) \
@@ -1749,7 +1756,7 @@ quiet_cmd_u-boot__ ?= LTO $@ else quiet_cmd_u-boot__ ?= LD $@ cmd_u-boot__ ?= $(LD) $(KBUILD_LDFLAGS) $(LDFLAGS_u-boot) -o $@ \
-T u-boot.lds $(u-boot-init) \
$(add_ld_script) $(u-boot-init) \ --whole-archive \ $(u-boot-main) \ --no-whole-archive \
diff --git a/arch/sandbox/config.mk b/arch/sandbox/config.mk index 2d184c5f652a..e05daf57ef8e 100644 --- a/arch/sandbox/config.mk +++ b/arch/sandbox/config.mk @@ -71,3 +71,7 @@ EFI_CRT0 := crt0_sandbox_efi.o EFI_RELOC := reloc_sandbox_efi.o AFLAGS_crt0_sandbox_efi.o += -DHOST_ARCH="$(HOST_ARCH)" CFLAGS_reloc_sandbox_efi.o += -DHOST_ARCH="$(HOST_ARCH)"
+ifneq ($(MSYS_VERSION),0) +LDSCRIPT = $(srctree)/arch/sandbox/cpu/u-boot-pe.lds +endif diff --git a/arch/sandbox/cpu/u-boot-pe.lds b/arch/sandbox/cpu/u-boot-pe.lds new file mode 100644 index 000000000000..031e70fafd03 --- /dev/null +++ b/arch/sandbox/cpu/u-boot-pe.lds @@ -0,0 +1,447 @@ +/* SPDX-License-Identifier: GPL-2.0+ */ +/*
- U-Boot note: This was obtained by using the -verbose linker option. The
- U-Boot additions are marked below.
- Ideally we would add sections to the executable, as is done with the Linux
- build. But PE executables do not appear to work correctly if unexpected
- sections are present:
- $ /tmp/b/sandbox/u-boot.exe
- -bash: /tmp/b/sandbox/u-boot.exe: cannot execute binary file: Exec format error
- So we take a approach of rewriting the whole file, for now. This will likely
- break in the future when a toolchain change is made.
Why not rather provide "layer" linker script which does this "rewriting" on top of the default linker script? With this way it is not needed to update linker script when a toolchain change it.
How can we reliably do that, though? We don't really know the format of the script and where to insert stuff.
Regards, Simon