[PATCH 10/31] sandbox: Provide a linker script for MSYS2

Pali Rohár pali at kernel.org
Tue Apr 25 20:11:17 CEST 2023


On Tuesday 25 April 2023 12:01:04 Simon Glass wrote:
> Hi Pali,
> 
> On Tue, 25 Apr 2023 at 10:21, Pali Rohár <pali at 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 at 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

Well, I do not know what is the current issue. The proposed script in
your patch looks like it is copied from some binutils version and then
modified. Also I do not know from which binutils you have copied and
what modification you have done in it. So I cannot react or comment
anymore more here.

My idea is that to write those modifications into new layer script.


More information about the U-Boot mailing list