[PATCH 4/6] arm: clean up v7 and v8 linker scripts for __rel_dyn_start/end

Sam Edwards cfsworks at gmail.com
Wed Mar 6 08:35:59 CET 2024



On 3/4/24 02:01, Ilias Apalodimas wrote:
> commit 47bd65ef057f ("arm: make __rel_dyn_{start, end} compiler-generated")
> were moving the __rel_dyn_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.
> 
> 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 [0].
> This have been fixed since 2016 [1]
> 
> [0] https://ftp.gnu.org/old-gnu/Manuals/ld-2.9.1/html_mono/ld.html#SEC13
> [1] commit 6b3b0ab89663 ("Make linker assigned symbol dynamic only for shared object")
> 
> Signed-off-by: Ilias Apalodimas <ilias.apalodimas at linaro.org>
Reviewed-by: Sam Edwards <CFSworks at gmail.com>
Tested-by: Sam Edwards <CFSworks at gmail.com> # Binary output identical

Thanks for the cleanup,
Sam

> ---
>   arch/arm/cpu/armv8/u-boot.lds | 16 +++-------------
>   arch/arm/cpu/u-boot.lds       | 14 +++-----------
>   arch/arm/lib/sections.c       |  2 --
>   arch/arm/mach-zynq/u-boot.lds | 14 +++-----------
>   4 files changed, 9 insertions(+), 37 deletions(-)
> 
> diff --git a/arch/arm/cpu/armv8/u-boot.lds b/arch/arm/cpu/armv8/u-boot.lds
> index eccb116d3cfa..e737de761a9d 100644
> --- a/arch/arm/cpu/armv8/u-boot.lds
> +++ b/arch/arm/cpu/armv8/u-boot.lds
> @@ -129,20 +129,10 @@ SECTIONS
>   		*(.__image_copy_end)
>   	}
>   
> -	. = ALIGN(8);
> -
> -	.rel_dyn_start :
> -	{
> -		*(.__rel_dyn_start)
> -	}
> -
> -	.rela.dyn : {
> +	.rela.dyn ALIGN(8) : {
> +		__rel_dyn_start = .;
>   		*(.rela*)
> -	}
> -
> -	.rel_dyn_end :
> -	{
> -		*(.__rel_dyn_end)
> +		__rel_dyn_end = .;
>   	}
>   
>   	_end = .;
> diff --git a/arch/arm/cpu/u-boot.lds b/arch/arm/cpu/u-boot.lds
> index 70e78ce46672..7c6e7891d360 100644
> --- a/arch/arm/cpu/u-boot.lds
> +++ b/arch/arm/cpu/u-boot.lds
> @@ -166,18 +166,10 @@ SECTIONS
>   		*(.__image_copy_end)
>   	}
>   
> -	.rel_dyn_start :
> -	{
> -		*(.__rel_dyn_start)
> -	}
> -
> -	.rel.dyn : {
> +	.rel.dyn ALIGN(4) : {
> +		__rel_dyn_start = .;
>   		*(.rel*)
> -	}
> -
> -	.rel_dyn_end :
> -	{
> -		*(.__rel_dyn_end)
> +		__rel_dyn_end = .;
>   	}
>   
>   	.end :
> diff --git a/arch/arm/lib/sections.c b/arch/arm/lib/sections.c
> index ddfde52163fc..1ee3dd3667ba 100644
> --- a/arch/arm/lib/sections.c
> +++ b/arch/arm/lib/sections.c
> @@ -21,8 +21,6 @@
>   
>   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");
> -char __rel_dyn_end[0] __section(".__rel_dyn_end");
>   char __secure_start[0] __section(".__secure_start");
>   char __secure_end[0] __section(".__secure_end");
>   char __secure_stack_start[0] __section(".__secure_stack_start");
> diff --git a/arch/arm/mach-zynq/u-boot.lds b/arch/arm/mach-zynq/u-boot.lds
> index 66a9e37f9198..71dea4a1f60a 100644
> --- a/arch/arm/mach-zynq/u-boot.lds
> +++ b/arch/arm/mach-zynq/u-boot.lds
> @@ -71,18 +71,10 @@ SECTIONS
>   		*(.__image_copy_end)
>   	}
>   
> -	.rel_dyn_start :
> -	{
> -		*(.__rel_dyn_start)
> -	}
> -
> -	.rel.dyn : {
> +	.rel.dyn ALIGN(8) : {
> +		__rel_dyn_start = .;
>   		*(.rel*)
> -	}
> -
> -	.rel_dyn_end :
> -	{
> -		*(.__rel_dyn_end)
> +		__rel_dyn_end = .;
>   	}
>   
>   	.end :


More information about the U-Boot mailing list