arm: make __image_copy_{start, end} compiler-generated

This change is only done where needed: some linker
scripts may contain __image_copy_{start,end} yet
remain unchanged.

Also, __image_copy_end needs its own section; putting
it in relocation sections changes their flags and makes
relocation break.

Signed-off-by: Albert ARIBAUD <albert.u.boot@aribaud.net>
Tested-by: Lubomir Popov <lpopov@mm-sol.com>
Tested-by: Jeroen Hofstee <jeroen@myspectrum.nl>
Reviewed-by: Benoît Thébaudeau <benoit.thebaudeau@advansee.com>
master
Albert ARIBAUD 12 years ago
parent df84502edf
commit d026dec875
  1. 6
      arch/arm/cpu/arm920t/ep93xx/u-boot.lds
  2. 6
      arch/arm/cpu/ixp/u-boot.lds
  3. 7
      arch/arm/cpu/u-boot.lds
  4. 7
      arch/arm/lib/relocate.S
  5. 2
      arch/arm/lib/sections.c
  6. 6
      board/actux1/u-boot.lds
  7. 6
      board/actux2/u-boot.lds
  8. 6
      board/actux3/u-boot.lds
  9. 6
      board/dvlhost/u-boot.lds
  10. 6
      board/freescale/mx31ads/u-boot.lds

@ -31,6 +31,7 @@ SECTIONS
. = ALIGN(4);
.text :
{
*(.__image_copy_start)
arch/arm/cpu/arm920t/start.o (.text*)
/* the EP93xx expects to find the pattern 'CRUS' at 0x1000 */
. = 0x1000;
@ -56,7 +57,10 @@ SECTIONS
. = ALIGN(4);
__image_copy_end = .;
.image_copy_end :
{
*(.__image_copy_end)
}
__bss_start = .;
.bss : { *(.bss*) }

@ -31,6 +31,7 @@ SECTIONS
. = ALIGN(4);
.text :
{
*(.__image_copy_start)
arch/arm/cpu/ixp/start.o(.text*)
*(.text*)
}
@ -54,7 +55,10 @@ SECTIONS
. = ALIGN(4);
__image_copy_end = .;
.image_copy_end :
{
*(.__image_copy_end)
}
.rel.dyn : {
__rel_dyn_start = .;

@ -33,7 +33,7 @@ SECTIONS
. = ALIGN(4);
.text :
{
__image_copy_start = .;
*(.__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 = .;

@ -39,13 +39,12 @@
ENTRY(relocate_code)
mov r6, r0 /* save addr of destination */
ldr r0, =_start /* r0 <- SRC &_start */
ldr r0, =__image_copy_start /* r0 <- SRC &__image_copy_start */
subs r9, r6, r0 /* r9 <- relocation offset */
beq relocate_done /* skip relocation */
mov r1, r6 /* r1 <- scratch for copy loop */
adr r7, relocate_code /* r7 <- SRC &relocate_code */
ldr r3, _image_copy_end_ofs /* r3 <- __image_copy_end local ofs */
add r2, r7, r3 /* r2 <- SRC &__image_copy_end */
ldr r2, =__image_copy_end /* r2 <- SRC &__image_copy_end */
copy_loop:
ldmia r0!, {r10-r11} /* copy from source address [r0] */
@ -89,8 +88,6 @@ relocate_done:
bx lr
#endif
_image_copy_end_ofs:
.word __image_copy_end - relocate_code
_rel_dyn_start_ofs:
.word __rel_dyn_start - relocate_code
_rel_dyn_end_ofs:

@ -37,3 +37,5 @@
char __bss_start[0] __attribute__((section(".__bss_start")));
char __bss_end[0] __attribute__((section(".__bss_end")));
char __image_copy_start[0] __attribute__((section(".__image_copy_start")));
char __image_copy_end[0] __attribute__((section(".__image_copy_end")));

@ -30,6 +30,7 @@ SECTIONS
. = ALIGN (4);
.text : {
*(.__image_copy_start)
arch/arm/cpu/ixp/start.o(.text*)
net/libnet.o(.text*)
board/actux1/libactux1.o(.text*)
@ -62,7 +63,10 @@ SECTIONS
. = ALIGN (4);
__image_copy_end = .;
.image_copy_end :
{
*(.__image_copy_end)
}
.rel.dyn : {
__rel_dyn_start = .;

@ -30,6 +30,7 @@ SECTIONS
. = ALIGN (4);
.text : {
*(.__image_copy_start)
arch/arm/cpu/ixp/start.o(.text*)
net/libnet.o(.text*)
board/actux2/libactux2.o(.text*)
@ -62,7 +63,10 @@ SECTIONS
. = ALIGN (4);
__image_copy_end = .;
.image_copy_end :
{
*(.__image_copy_end)
}
.rel.dyn : {
__rel_dyn_start = .;

@ -30,6 +30,7 @@ SECTIONS
. = ALIGN (4);
.text : {
*(.__image_copy_start)
arch/arm/cpu/ixp/start.o(.text*)
net/libnet.o(.text*)
board/actux3/libactux3.o(.text*)
@ -62,7 +63,10 @@ SECTIONS
. = ALIGN (4);
__image_copy_end = .;
.image_copy_end :
{
*(.__image_copy_end)
}
.rel.dyn : {
__rel_dyn_start = .;

@ -30,6 +30,7 @@ SECTIONS
. = ALIGN (4);
.text : {
*(.__image_copy_start)
arch/arm/cpu/ixp/start.o(.text*)
net/libnet.o(.text*)
board/dvlhost/libdvlhost.o(.text*)
@ -62,7 +63,10 @@ SECTIONS
. = ALIGN (4);
__image_copy_end = .;
.image_copy_end :
{
*(.__image_copy_end)
}
.rel.dyn : {
__rel_dyn_start = .;

@ -34,6 +34,7 @@ SECTIONS
. = ALIGN(4);
.text :
{
*(.__image_copy_start)
/* WARNING - the following is hand-optimized to fit within */
/* the sector layout of our flash chips! XXX FIXME XXX */
@ -65,7 +66,10 @@ SECTIONS
. = ALIGN(4);
__image_copy_end = .;
.image_copy_end :
{
*(.__image_copy_end)
}
.rel.dyn : {
__rel_dyn_start = .;

Loading…
Cancel
Save