Message ID | 20240304090113.1410575-5-ilias.apalodimas@linaro.org |
---|---|
State | Superseded |
Headers | show |
Series | Clean up arm linker scripts | expand |
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@linaro.org> Reviewed-by: Sam Edwards <CFSworks@gmail.com> Tested-by: Sam Edwards <CFSworks@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 :
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 :
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@linaro.org> --- 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(-)