[U-Boot] [PATCH 2/4] arm: make __image_copy_{start, end} compiler-generated

Benoît Thébaudeau
2013-05-11T00:25:02Z

Hi Albert,

On Friday, May 10, 2013 11:56:50 PM, Albert ARIBAUD wrote:
> Signed-off-by: Albert ARIBAUD <albert.u.boot@aribaud.net>
> ---
> arch/arm/cpu/arm1136/start.S | 7 +++----
> arch/arm/cpu/arm1136/u-boot-spl.lds | 3 ++-
> arch/arm/cpu/arm720t/start.S | 11 +++++++----
> arch/arm/cpu/arm920t/ep93xx/u-boot.lds | 6 +++++-
> arch/arm/cpu/arm926ejs/start.S | 7 +++----
> arch/arm/cpu/armv7/am33xx/u-boot-spl.lds | 2 --
> arch/arm/cpu/armv7/omap-common/u-boot-spl.lds | 2 --
> arch/arm/cpu/armv7/socfpga/u-boot-spl.lds | 1 -
> arch/arm/cpu/armv7/start.S | 6 ++----
> arch/arm/cpu/ixp/u-boot.lds | 6 +++++-
> arch/arm/cpu/u-boot-spl.lds | 3 +--
> arch/arm/cpu/u-boot.lds | 7 +++++--
> arch/arm/lib/sections.c | 4 +++-
> 13 files changed, 36 insertions(+), 29 deletions(-)
>
> diff --git a/arch/arm/cpu/arm1136/start.S b/arch/arm/cpu/arm1136/start.S
> index ccea2d5..ab8fd56 100644
> --- a/arch/arm/cpu/arm1136/start.S
> +++ b/arch/arm/cpu/arm1136/start.S
> @@ -104,10 +104,6 @@ _TEXT_BASE:
> _bss_start_ofs:
> .word __bss_start - _start
>
> -.globl _image_copy_end_ofs

Wasn't _image_copy_end_ofs used outside of start.S? Same question for all the
start.S files.

> -_image_copy_end_ofs:
> - .word __image_copy_end - _start
> -
> .globl _bss_end_ofs
> _bss_end_ofs:
> .word __bss_end - _start
> @@ -239,6 +235,9 @@ relocate_done:
>
> bx lr
>
> +_image_copy_end_ofs:
> + .word __image_copy_end - _start
> +
> #ifndef CONFIG_SPL_BUILD
>
> _rel_dyn_start_ofs:
> diff --git a/arch/arm/cpu/arm1136/u-boot-spl.lds
> b/arch/arm/cpu/arm1136/u-boot-spl.lds
> index 8296e5d..04fc881 100644
> --- a/arch/arm/cpu/arm1136/u-boot-spl.lds
> +++ b/arch/arm/cpu/arm1136/u-boot-spl.lds
> @@ -37,7 +37,6 @@ SECTIONS
> {
> .text :
> {
> - __start = .;
> arch/arm/cpu/arm1136/start.o (.text*)
> *(.text*)
> } >.sram
> @@ -48,7 +47,9 @@ SECTIONS
> . = ALIGN(4);
> .data : { *(SORT_BY_ALIGNMENT(.data*)) } >.sram
> . = ALIGN(4);
> +
> __image_copy_end = .;

Why aren't all linker scripts treated equally?

Here, start.S is still used, so '*(.__image_copy_end)' and the related stuff
should be like what you did for arch/arm/cpu/u-boot.lds below. Or am I missing
something?

Same question for several other linker scripts below.

> +
> _end = .;
>
> .bss :
[...]
> diff --git a/arch/arm/cpu/u-boot.lds b/arch/arm/cpu/u-boot.lds
> index d9bbee3..5b43621 100644
> --- a/arch/arm/cpu/u-boot.lds
> +++ b/arch/arm/cpu/u-boot.lds
> @@ -33,7 +33,7 @@ SECTIONS
> . = ALIGN(4);
> .text :
> {
> - __image_copy_start = .;
> + *(.__image_copy_start)

Are there any users of __image_copy_start?

> CPUDIR/start.o (.text*)
> *(.text*)
> }
> @@ -57,7 +57,10 @@ SECTIONS
>
> . = ALIGN(4);
>
> - __image_copy_end = .;
> + .image_copy_end :
> + {
> + *(.__image_copy_end);
> + }
>
> .rel.dyn : {
> __rel_dyn_start = .;
> diff --git a/arch/arm/lib/sections.c b/arch/arm/lib/sections.c
> index 99eda59..80a0c38 100644
> --- a/arch/arm/lib/sections.c
> +++ b/arch/arm/lib/sections.c
> @@ -21,7 +21,7 @@
> */
>
> /**
> - * These two symbols are declared in a C file so that the linker
> + * The following symbols are declared in a C file so that the linker
> * uses R_ARM_RELATIVE relocation, rather than the R_ARM_ABS32 one
> * it would use if the symbols were defined in the linker file.
> * Using only R_ARM_RELATIVE relocation ensures that references to
> @@ -37,3 +37,5 @@
>
> char __bss_start[0] __attribute__((used, section(".__bss_start")));
> char __bss_end[0] __attribute__((used, section(".__bss_end")));
> +char __image_copy_start[0] __attribute__((used,
> section(".__image_copy_start")));

Ditto.

> +char __image_copy_end[0] __attribute__((used,
> section(".__image_copy_end")));

Best regards,
Beno?t