
Adjust the code to work as on ARM, where the compiler generates the BSS symbols. This makes it easier to move the BSS memset() to C code.
Signed-off-by: Simon Glass sjg@chromium.org ---
arch/blackfin/cpu/start.S | 4 ++-- arch/blackfin/cpu/u-boot.lds | 18 ++++++++++++++++-- arch/blackfin/lib/sections.c | 2 +- 3 files changed, 19 insertions(+), 5 deletions(-)
diff --git a/arch/blackfin/cpu/start.S b/arch/blackfin/cpu/start.S index 823a1df..6265a51 100644 --- a/arch/blackfin/cpu/start.S +++ b/arch/blackfin/cpu/start.S @@ -196,8 +196,8 @@ ENTRY(_start) * takes care of clearing things for us. */ serial_early_puts("Zero BSS"); - r0.l = __bss_start; - r0.h = __bss_start; + r0.l = ___bss_start; + r0.h = ___bss_start; r1 = 0 (x); r2.l = __bss_len; r2.h = __bss_len; diff --git a/arch/blackfin/cpu/u-boot.lds b/arch/blackfin/cpu/u-boot.lds index 1c0df25..ba95bf3 100644 --- a/arch/blackfin/cpu/u-boot.lds +++ b/arch/blackfin/cpu/u-boot.lds @@ -130,6 +130,16 @@ SECTIONS __end = __data_l1_lma; __image_binary_end = __data_l1_lma;
+ /* + * Compiler-generated __bss_start and __bss_stop: + * see arch/blackfin/lib/sections.c + */ + .bss_start (NOLOAD) : + { + . = ALIGN(4); + KEEP(*(.__bss_start)); + } >ram_data + .bss : { . = ALIGN(4); @@ -139,8 +149,12 @@ SECTIONS *(COMMON) . = ALIGN(4); } >ram_data - __bss_end = .; - __bss_start = ADDR(.bss); + + .bss_stop (NOLOAD): + { + KEEP(*(.__bss_stop)); + } >ram_data + __bss_len = SIZEOF(.bss); __init_end = .; } diff --git a/arch/blackfin/lib/sections.c b/arch/blackfin/lib/sections.c index 86fc4df..a67530b 100644 --- a/arch/blackfin/lib/sections.c +++ b/arch/blackfin/lib/sections.c @@ -7,5 +7,5 @@ */
char __bss_start[0] __attribute__((section(".__bss_start"))); -char __bss_end[0] __attribute__((section(".__bss_end"))); +char __bss_stop[0] __attribute__((section(".__bss_stop"))); char __init_end[0] __attribute__((section(".__init_end")));