On Fri, 8 Mar 2024 at 15:22, Ilias Apalodimas
<ilias.apalodi...@linaro.org> wrote:
>
> Hi Sam,
>
> On Thu, 7 Mar 2024 at 08:50, Ilias Apalodimas
> <ilias.apalodi...@linaro.org> wrote:
> >
> >
> >
> > On Thu, 7 Mar 2024 at 00:19, Sam Edwards <cfswo...@gmail.com> wrote:
> >>
> >>
> >>
> >> On 3/6/24 02:13, Ilias Apalodimas wrote:
> >> > Hi Sam,
> >> >
> >> > Again thank you for the elaborate review. This really helps a lot.
> >> >
> >> > On Wed, 6 Mar 2024 at 10:14, Sam Edwards <cfswo...@gmail.com> wrote:
> >> >>
> >> >>
> >> >>
> >> >> On 3/4/24 02:01, Ilias Apalodimas wrote:
> >> >>> __efi_runtime_start/end are defined as c variables for arm7 only in
> >> >>> order to force the compiler emit relative references. However, defining
> >> >>> those within a section definition will do the same thing. On top of 
> >> >>> that
> >> >>> the v8 linker scripts define it as a symbol.
> >> >>>
> >> >>> So let's remove the special sections from the linker scripts, the
> >> >>> variable definitions from sections.c and define them as a symbols 
> >> >>> within
> >> >>> the correct section.
> >> >>>
> >> >>> Signed-off-by: Ilias Apalodimas <ilias.apalodi...@linaro.org>
> >> >> Tested-by: Sam Edwards <cfswo...@gmail.com> # Binary output identical
> >> >>
> >> >> Thanks for the cleanup,
> >> >> Sam
> >> >>
> >> >>> ---
> >> >>>    arch/arm/cpu/u-boot.lds        | 12 +++---------
> >> >>>    arch/arm/lib/sections.c        |  2 --
> >> >>>    arch/arm/mach-zynq/u-boot.lds  | 12 +++---------
> >> >>>    include/asm-generic/sections.h |  1 +
> >> >>>    4 files changed, 7 insertions(+), 20 deletions(-)
> >> >>>
> >> >>> diff --git a/arch/arm/cpu/u-boot.lds b/arch/arm/cpu/u-boot.lds
> >> >>> index 7c6e7891d360..df55bb716e35 100644
> >> >>> --- a/arch/arm/cpu/u-boot.lds
> >> >>> +++ b/arch/arm/cpu/u-boot.lds
> >> >>> @@ -43,18 +43,12 @@ SECTIONS
> >> >>>        }
> >> >>>
> >> >>>        /* This needs to come before *(.text*) */
> >> >>> -     .__efi_runtime_start : {
> >> >>> -             *(.__efi_runtime_start)
> >> >>> -     }
> >> >>> -
> >> >>> -     .efi_runtime : {
> >> >>> +     .efi_runtime ALIGN(4) : {
> >> >>
> >> >> Do we truly require the ALIGN(4)? If I understand correctly, by default,
> >> >> the linker calculates the alignment of an output section as the least
> >> >> common multiple of the input sections' alignment requirements -- meaning
> >> >> most (perhaps all) of our ALIGN()s today are redundant.
> >> >
> >> > I don't think we do. But I preserved those for a few reasons.
> >> >
> >> >>   For the time
> >> >> being, I'm in favor of merging existing `. = ALIGN(x)` into each
> >> >> following section for clarity and to avoid the testing overhead of
> >> >> removing them in the same patch as other changes. However, in the near
> >> >> future (perhaps even as "near" as v2 of this series?), I'd also like to
> >> >> see a patch that eliminates unnecessary ALIGN()s altogether. Introducing
> >> >> additional ALIGN()s where we already know they aren't needed may be a
> >> >> step away from that goal.
> >> >
> >> > So as you already mentioned the reason I preserved this is:
> >> > - Reduce the testing overhead by preserving the same layout for now
> >> > - In the future, I am playing around with the idea of mapping U-Boot
> >> > (not SPL but the relocated full U-Boot) in sections with proper memory
> >> > permissions (R), RW^X etc). In that case, we will need a 4k section
> >> > alignment and we can repurpose the ALIGN(4/8) to
> >> > ALIGN(CONSTANT(COMMONPAGESIZE)).
> >> >
> >> > Thoughts?
> >>
> >> Ah, right: I had forgotten for a moment that the ultimate goal was to
> >> clean up the memory protection bit situation.
> >>
> >> Okay, as long as that future cleanup will also remove all unnecessary
> >> uses of ALIGN() (i.e. any that don't result in an actual change in
> >> memory layout) then that sounds great to me.
> >
> >
> > Yep will do
> >
> >>
> >> Reviewed-by: Sam Edwards <cfswo...@gmail.com>
>
> Thanks. However, I noticed the alignment rule was wrong
> it needs to be '.efi_runtime : ALIGN(4)' instead of '.efi_runtime ALIGN(4) :'.
> The latter will define the start address instead of specifying the alignment.
> Due to what you mentioned above this (that we don't really need the
> ALIGN(4) the resulting binary is unaffected.

To be exact, it will work because ALIGN returns the current location
counter aligned upward to the specified value.


>
> Thanks
> /Ilias
>
> >
> >
> >
> >
> > Thanks!
> >
> >>
> >> Cheers,
> >> Sam
> >>
> >> >
> >> > Thanks
> >> > /Ilias
> >> >
> >> >>
> >> >>> +             __efi_runtime_start = .;
> >> >>>                *(.text.efi_runtime*)
> >> >>>                *(.rodata.efi_runtime*)
> >> >>>                *(.data.efi_runtime*)
> >> >>> -     }
> >> >>> -
> >> >>> -     .__efi_runtime_stop : {
> >> >>> -             *(.__efi_runtime_stop)
> >> >>> +             __efi_runtime_stop = .;
> >> >>>        }
> >> >>>
> >> >>>        .text_rest :
> >> >>> diff --git a/arch/arm/lib/sections.c b/arch/arm/lib/sections.c
> >> >>> index 1ee3dd3667ba..a4d4202e99f5 100644
> >> >>> --- a/arch/arm/lib/sections.c
> >> >>> +++ b/arch/arm/lib/sections.c
> >> >>> @@ -25,6 +25,4 @@ char __secure_start[0] __section(".__secure_start");
> >> >>>    char __secure_end[0] __section(".__secure_end");
> >> >>>    char __secure_stack_start[0] __section(".__secure_stack_start");
> >> >>>    char __secure_stack_end[0] __section(".__secure_stack_end");
> >> >>> -char __efi_runtime_start[0] __section(".__efi_runtime_start");
> >> >>> -char __efi_runtime_stop[0] __section(".__efi_runtime_stop");
> >> >>>    char _end[0] __section(".__end");
> >> >>> diff --git a/arch/arm/mach-zynq/u-boot.lds 
> >> >>> b/arch/arm/mach-zynq/u-boot.lds
> >> >>> index 71dea4a1f60a..fcd0f42a7106 100644
> >> >>> --- a/arch/arm/mach-zynq/u-boot.lds
> >> >>> +++ b/arch/arm/mach-zynq/u-boot.lds
> >> >>> @@ -22,18 +22,12 @@ SECTIONS
> >> >>>        }
> >> >>>
> >> >>>        /* This needs to come before *(.text*) */
> >> >>> -     .__efi_runtime_start : {
> >> >>> -             *(.__efi_runtime_start)
> >> >>> -     }
> >> >>> -
> >> >>> -     .efi_runtime : {
> >> >>> +     .efi_runtime ALIGN(4) : {
> >> >>
> >> >> Ditto above
> >> >>
> >> >>> +             __efi_runtime_start = .;
> >> >>>                *(.text.efi_runtime*)
> >> >>>                *(.rodata.efi_runtime*)
> >> >>>                *(.data.efi_runtime*)
> >> >>> -     }
> >> >>> -
> >> >>> -     .__efi_runtime_stop : {
> >> >>> -             *(.__efi_runtime_stop)
> >> >>> +             __efi_runtime_stop = .;
> >> >>>        }
> >> >>>
> >> >>>        .text_rest :
> >> >>> diff --git a/include/asm-generic/sections.h 
> >> >>> b/include/asm-generic/sections.h
> >> >>> index 60949200dd93..b6bca53db10d 100644
> >> >>> --- a/include/asm-generic/sections.h
> >> >>> +++ b/include/asm-generic/sections.h
> >> >>> @@ -35,6 +35,7 @@ extern char __priv_data_start[], __priv_data_end[];
> >> >>>    extern char __ctors_start[], __ctors_end[];
> >> >>>
> >> >>>    extern char __efi_runtime_rel_start[], __efi_runtime_rel_stop[];
> >> >>> +extern char __efi_runtime_start[], __efi_runtime_stop[];
> >> >>>
> >> >>>    /* function descriptor handling (if any).  Override
> >> >>>     * in asm/sections.h */

Reply via email to