[PATCH 01/11] sandbox: Set the EFI symbols in linker script

Andrew Scull ascull at google.com
Tue Apr 12 00:37:32 CEST 2022


On Mon, 11 Apr 2022 at 23:15, Heinrich Schuchardt <xypron.glpk at gmx.de> wrote:
>
> On 4/7/22 11:41, Andrew Scull wrote:
> > The sandbox doesn't populate the EFI lists so explicitly set the list
> > start and end symbols to indicate that the lists are empty. This
> > simplifies the linker scripts, removed references to non-existant
> > sections and removes '.' prefixed sections that conflicted with clang's
> > ASAN.
>
>
> In u-boot.map I see:
>
> 10636  .text.efi_runtime
> 10637                 0x00000000000df50a      0x72d
> /tmp/cctuEBRS.ltrans19.ltrans.o
> 10638                 0x00000000000df50a                efi_get_time
> 10639                 0x00000000000df519                efi_set_time
> 10640                 0x00000000000df528
> efi_unimplemented.lto_priv.0
> 10641                 0x00000000000df54a
> efi_update_capsule_unsupported
> 10642                 0x00000000000df559
> efi_query_capsule_caps_unsupported
>
> So there are definively functions that should go between
> __efi_runtime_start and __efi_runtime_stop.
>
> If ._efi_runtime_start == .__efi_runtime_stop, there is a bug in the
> linker script. Deleting the symbols is the wrong way to deal with this
> deficiency. Instead ensure correct placement of the functions marked as
> __efi_runtime and the data marked as __efi_runtime_data.

I notice you point at the .text.efi_runtime section rather than the
.efi_runtime_text section that's listed in the sandbox linker script.
Looking at the other architectures, sandbox doesn't match them,
through whatever course of history, but it sounds like it's meant to.
I can try updating this patch to use the blocks below and see how
sandbox handles it.

.efi_runtime : {
        *(.text.efi_runtime*)
        *(.rodata.efi_runtime*)
        *(.data.efi_runtime*)
}

.efi_runtime_rel : {
        *(.rel*.efi_runtime)
        *(.rel*.efi_runtime.*)
}

> Best regards
>
> Heinrich
>
> >
> > Signed-off-by: Andrew Scull <ascull at google.com>
> > ---
> >   arch/sandbox/cpu/u-boot.lds | 32 +++++---------------------------
> >   arch/sandbox/lib/Makefile   |  2 +-
> >   arch/sandbox/lib/sections.c | 13 -------------
> >   3 files changed, 6 insertions(+), 41 deletions(-)
> >   delete mode 100644 arch/sandbox/lib/sections.c
> >
> > diff --git a/arch/sandbox/cpu/u-boot.lds b/arch/sandbox/cpu/u-boot.lds
> > index 6d710618f5..dd675cc3d2 100644
> > --- a/arch/sandbox/cpu/u-boot.lds
> > +++ b/arch/sandbox/cpu/u-boot.lds
> > @@ -19,33 +19,11 @@ SECTIONS
> >               *(.u_boot_sandbox_getopt_end)
> >       }
> >
> > -     .__efi_runtime_start : {
> > -             *(.__efi_runtime_start)
> > -     }
> > -
> > -     .efi_runtime : {
> > -             *(efi_runtime_text)
> > -             *(efi_runtime_data)
> > -     }
> > -
> > -     .__efi_runtime_stop : {
> > -             *(.__efi_runtime_stop)
> > -     }
> > -
> > -     .efi_runtime_rel_start :
> > -     {
> > -             *(.__efi_runtime_rel_start)
> > -     }
> > -
> > -     .efi_runtime_rel : {
> > -             *(.relefi_runtime_text)
> > -             *(.relefi_runtime_data)
> > -     }
> > -
> > -     .efi_runtime_rel_stop :
> > -     {
> > -             *(.__efi_runtime_rel_stop)
> > -     }
> > +     /* Sandbox has empty EFI runtime lists. */
> > +     __efi_runtime_start = .;
> > +     __efi_runtime_stop = __efi_runtime_start;
> > +     __efi_runtime_rel_start = .;
> > +     __efi_runtime_rel_stop = __efi_runtime_rel_start;
> >
> >       .dynsym :
> >       {
> > diff --git a/arch/sandbox/lib/Makefile b/arch/sandbox/lib/Makefile
> > index a2bc5a7ee6..05f06180f8 100644
> > --- a/arch/sandbox/lib/Makefile
> > +++ b/arch/sandbox/lib/Makefile
> > @@ -5,7 +5,7 @@
> >   # (C) Copyright 2002-2006
> >   # Wolfgang Denk, DENX Software Engineering, wd at denx.de.
> >
> > -obj-y        += fdt_fixup.o interrupts.o sections.o
> > +obj-y        += fdt_fixup.o interrupts.o
> >   obj-$(CONFIG_PCI)   += pci_io.o
> >   obj-$(CONFIG_CMD_BOOTM) += bootm.o
> >   obj-$(CONFIG_CMD_BOOTZ) += bootm.o
> > diff --git a/arch/sandbox/lib/sections.c b/arch/sandbox/lib/sections.c
> > deleted file mode 100644
> > index 2559eeea38..0000000000
> > --- a/arch/sandbox/lib/sections.c
> > +++ /dev/null
> > @@ -1,13 +0,0 @@
> > -// SPDX-License-Identifier: GPL-2.0+
> > -/*
> > - * Copyright 2013 Albert ARIBAUD <albert.u.boot at aribaud.net>
> > - *
> > - */
> > -#include <linux/compiler.h>
> > -
> > -char __efi_runtime_start[0] __section(".__efi_runtime_start");
> > -char __efi_runtime_stop[0] __section(".__efi_runtime_stop");
> > -char __efi_runtime_rel_start[0]
> > -             __section(".__efi_runtime_rel_start");
> > -char __efi_runtime_rel_stop[0]
> > -             __section(".__efi_runtime_rel_stop");
>


More information about the U-Boot mailing list