From: Sam Edwards <cfsworks@gmail.com>
To: Ilias Apalodimas <ilias.apalodimas@linaro.org>,
u-boot@lists.denx.de, trini@konsulko.com
Cc: caleb.connolly@linaro.org, sumit.garg@linaro.org,
richard.henderson@linaro.org,
Ryan Chen <ryan_chen@aspeedtech.com>,
Chia-Wei Wang <chiawei_wang@aspeedtech.com>,
Aspeed BMC SW team <BMC-SW@aspeedtech.com>,
Joel Stanley <joel@jms.id.au>, Simon Glass <sjg@chromium.org>,
Philipp Tomsich <philipp.tomsich@vrull.eu>,
Kever Yang <kever.yang@rock-chips.com>,
Michal Simek <michal.simek@amd.com>,
Yegor Yefremov <yegorslists@googlemail.com>,
Heinrich Schuchardt <xypron.glpk@gmx.de>,
Shiji Yang <yangshiji66@outlook.com>,
Bin Meng <bmeng@tinylab.org>
Subject: Re: [PATCH v3 2/7] arm: clean up v7 and v8 linker scripts for bss_start/end
Date: Wed, 13 Mar 2024 16:57:57 -0600 [thread overview]
Message-ID: <7a6ebdc1-835b-4527-8885-a650242bf295@gmail.com> (raw)
In-Reply-To: <20240313162324.2117909-3-ilias.apalodimas@linaro.org>
On 3/13/24 10:23, Ilias Apalodimas wrote:
> commit 3ebd1cbc49f0 ("arm: make __bss_start and __bss_end__ compiler-generated")
> and
> commit f84a7b8f54db ("ARM: Fix __bss_start and __bss_end in linker scripts")
> were moving the bss_start/end on c generated variables that were
> injected in their own sections. The reason was that we needed relative
> relocations for position independent code and linker bugs back then
> prevented us from doing so [0].
>
> However, the linker documentation pages states that symbols that are
> defined within a section definition will create a relocatable type with
> the value being a fixed offset from the base of a section [1].
> So let's start cleaning this up starting with the bss_start and bss_end
> variables. Convert them into symbols within the .bss section definition.
>
> [0] binutils commit 6b3b0ab89663 ("Make linker assigned symbol dynamic only for shared object")
> [1] https://sourceware.org/binutils/docs/ld/Expression-Section.html
>
> Tested-by: Caleb Connolly <caleb.connolly@linaro.org> # Qualcomm sdm845
> Signed-off-by: Ilias Apalodimas <ilias.apalodimas@linaro.org>
> ---
> arch/arm/cpu/armv8/u-boot-spl.lds | 18 +++++++-----------
> arch/arm/cpu/armv8/u-boot.lds | 16 ++++------------
> arch/arm/cpu/u-boot.lds | 22 +++++++---------------
> arch/arm/lib/sections.c | 2 --
> arch/arm/mach-rockchip/u-boot-tpl-v8.lds | 15 ++++-----------
> arch/arm/mach-zynq/u-boot.lds | 22 +++++++---------------
> 6 files changed, 29 insertions(+), 66 deletions(-)
>
> diff --git a/arch/arm/cpu/armv8/u-boot-spl.lds b/arch/arm/cpu/armv8/u-boot-spl.lds
> index 7cb9d731246d..692414fe46fb 100644
> --- a/arch/arm/cpu/armv8/u-boot-spl.lds
> +++ b/arch/arm/cpu/armv8/u-boot-spl.lds
> @@ -63,18 +63,11 @@ SECTIONS
>
> _image_binary_end = .;
>
> - .bss_start (NOLOAD) : {
> - . = ALIGN(8);
> - KEEP(*(.__bss_start));
> - } >.sdram
> -
> - .bss (NOLOAD) : {
> + .bss : {
> + __bss_start = .;
> *(.bss*)
> - . = ALIGN(8);
> - } >.sdram
> -
> - .bss_end (NOLOAD) : {
> - KEEP(*(.__bss_end));
> + . = ALIGN(8);
> + __bss_end = .;
> } >.sdram
>
> /DISCARD/ : { *(.rela*) }
> @@ -89,3 +82,6 @@ SECTIONS
> #include "linux-kernel-image-header-vars.h"
> #endif
> }
> +ASSERT(CONFIG_SPL_BSS_START_ADDR % 8 == 0, \
> + "CONFIG_SPL_BSS_START_ADDR must be 8-byte aligned");
> +
Git complains about this added blank line at the end of the file. (My
personal preference would be a blank line before the ASSERT, if the
ASSERT is truly necessary.)
But beyond that:
Tested-by: Sam Edwards <CFSworks@gmail.com> # Binary output identical
Still really excited for this to land! I'm going to have to blow the
dust off of my Clang/LLD support series here soon. :)
Best,
Sam
> diff --git a/arch/arm/cpu/armv8/u-boot.lds b/arch/arm/cpu/armv8/u-boot.lds
> index fb6a30c922f7..9640cc7a04b8 100644
> --- a/arch/arm/cpu/armv8/u-boot.lds
> +++ b/arch/arm/cpu/armv8/u-boot.lds
> @@ -149,19 +149,11 @@ SECTIONS
>
> _end = .;
>
> - . = ALIGN(8);
> -
> - .bss_start : {
> - KEEP(*(.__bss_start));
> - }
> -
> - .bss : {
> + .bss ALIGN(8): {
> + __bss_start = .;
> *(.bss*)
> - . = ALIGN(8);
> - }
> -
> - .bss_end : {
> - KEEP(*(.__bss_end));
> + . = ALIGN(8);
> + __bss_end = .;
> }
>
> /DISCARD/ : { *(.dynsym) }
> diff --git a/arch/arm/cpu/u-boot.lds b/arch/arm/cpu/u-boot.lds
> index 7724c9332c3b..0dfe5f633b16 100644
> --- a/arch/arm/cpu/u-boot.lds
> +++ b/arch/arm/cpu/u-boot.lds
> @@ -207,23 +207,15 @@ SECTIONS
> }
>
> /*
> - * Compiler-generated __bss_start and __bss_end, see arch/arm/lib/bss.c
> - * __bss_base and __bss_limit are for linker only (overlay ordering)
> + * These sections occupy the same memory, but their lifetimes do
> + * not overlap: U-Boot initializes .bss only after applying dynamic
> + * relocations and therefore after it doesn't need .rel.dyn any more.
> */
> -
> - .bss_start __rel_dyn_start (OVERLAY) : {
> - KEEP(*(.__bss_start));
> - __bss_base = .;
> - }
> -
> - .bss __bss_base (OVERLAY) : {
> + .bss ADDR(.rel.dyn) (OVERLAY): {
> + __bss_start = .;
> *(.bss*)
> - . = ALIGN(4);
> - __bss_limit = .;
> - }
> -
> - .bss_end __bss_limit (OVERLAY) : {
> - KEEP(*(.__bss_end));
> + . = ALIGN(4);
> + __bss_end = .;
> }
>
> .dynsym _image_binary_end : { *(.dynsym) }
> diff --git a/arch/arm/lib/sections.c b/arch/arm/lib/sections.c
> index 857879711c6a..8e8bd5797e16 100644
> --- a/arch/arm/lib/sections.c
> +++ b/arch/arm/lib/sections.c
> @@ -19,8 +19,6 @@
> * aliasing warnings.
> */
>
> -char __bss_start[0] __section(".__bss_start");
> -char __bss_end[0] __section(".__bss_end");
> char __image_copy_start[0] __section(".__image_copy_start");
> char __image_copy_end[0] __section(".__image_copy_end");
> char __rel_dyn_start[0] __section(".__rel_dyn_start");
> diff --git a/arch/arm/mach-rockchip/u-boot-tpl-v8.lds b/arch/arm/mach-rockchip/u-boot-tpl-v8.lds
> index 74618eba591b..712c485d4d0b 100644
> --- a/arch/arm/mach-rockchip/u-boot-tpl-v8.lds
> +++ b/arch/arm/mach-rockchip/u-boot-tpl-v8.lds
> @@ -56,18 +56,11 @@ SECTIONS
>
> _image_binary_end = .;
>
> - .bss_start (NOLOAD) : {
> - . = ALIGN(8);
> - KEEP(*(.__bss_start));
> - }
> -
> - .bss (NOLOAD) : {
> + .bss ALIGN(8) : {
> + __bss_start = .;
> *(.bss*)
> - . = ALIGN(8);
> - }
> -
> - .bss_end (NOLOAD) : {
> - KEEP(*(.__bss_end));
> + . = ALIGN(8);
> + __bss_end = .;
> }
>
> /DISCARD/ : { *(.dynsym) }
> diff --git a/arch/arm/mach-zynq/u-boot.lds b/arch/arm/mach-zynq/u-boot.lds
> index 3b7c9d515f8b..3c5008b57392 100644
> --- a/arch/arm/mach-zynq/u-boot.lds
> +++ b/arch/arm/mach-zynq/u-boot.lds
> @@ -103,23 +103,15 @@ SECTIONS
> _image_binary_end = .;
>
> /*
> - * Compiler-generated __bss_start and __bss_end, see arch/arm/lib/bss.c
> - * __bss_base and __bss_limit are for linker only (overlay ordering)
> + * These sections occupy the same memory, but their lifetimes do
> + * not overlap: U-Boot initializes .bss only after applying dynamic
> + * relocations and therefore after it doesn't need .rel.dyn any more.
> */
> -
> - .bss_start __rel_dyn_start (OVERLAY) : {
> - KEEP(*(.__bss_start));
> - __bss_base = .;
> - }
> -
> - .bss __bss_base (OVERLAY) : {
> + .bss ADDR(.rel.dyn) (OVERLAY): {
> + __bss_start = .;
> *(.bss*)
> - . = ALIGN(8);
> - __bss_limit = .;
> - }
> -
> - .bss_end __bss_limit (OVERLAY) : {
> - KEEP(*(.__bss_end));
> + . = ALIGN(8);
> + __bss_end = .;
> }
>
> /*
next prev parent reply other threads:[~2024-03-13 22:58 UTC|newest]
Thread overview: 15+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-03-13 16:23 [PATCH v3 0/7] Clean up arm linker scripts Ilias Apalodimas
2024-03-13 16:23 ` [PATCH v3 1/7] arm: baltos: remove custom linker script Ilias Apalodimas
2024-03-13 16:23 ` [PATCH v3 2/7] arm: clean up v7 and v8 linker scripts for bss_start/end Ilias Apalodimas
2024-03-13 20:19 ` Richard Henderson
2024-03-13 21:43 ` Ilias Apalodimas
2024-03-13 22:43 ` Richard Henderson
2024-03-14 7:59 ` Ilias Apalodimas
2024-03-13 22:57 ` Sam Edwards [this message]
2024-03-14 0:40 ` Tom Rini
2024-03-13 16:23 ` [PATCH v3 3/7] arm: fix __efi_runtime_rel_start/end definitions Ilias Apalodimas
2024-03-13 16:23 ` [PATCH v3 4/7] arm: clean up v7 and v8 linker scripts for __rel_dyn_start/end Ilias Apalodimas
2024-03-13 16:23 ` [PATCH v3 5/7] arm: fix __efi_runtime_start/end definitions Ilias Apalodimas
2024-03-13 16:23 ` [PATCH v3 6/7] arm: move image_copy_start/end to linker symbols Ilias Apalodimas
2024-03-13 16:23 ` [PATCH v3 7/7] arm: remove redundant section alignments Ilias Apalodimas
2024-03-13 20:21 ` Richard Henderson
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=7a6ebdc1-835b-4527-8885-a650242bf295@gmail.com \
--to=cfsworks@gmail.com \
--cc=BMC-SW@aspeedtech.com \
--cc=bmeng@tinylab.org \
--cc=caleb.connolly@linaro.org \
--cc=chiawei_wang@aspeedtech.com \
--cc=ilias.apalodimas@linaro.org \
--cc=joel@jms.id.au \
--cc=kever.yang@rock-chips.com \
--cc=michal.simek@amd.com \
--cc=philipp.tomsich@vrull.eu \
--cc=richard.henderson@linaro.org \
--cc=ryan_chen@aspeedtech.com \
--cc=sjg@chromium.org \
--cc=sumit.garg@linaro.org \
--cc=trini@konsulko.com \
--cc=u-boot@lists.denx.de \
--cc=xypron.glpk@gmx.de \
--cc=yangshiji66@outlook.com \
--cc=yegorslists@googlemail.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.