From a510a776a0795358e4415d59e6fd0b164e0e5d38 Mon Sep 17 00:00:00 2001 From: Till Straumann Date: Thu, 22 May 2008 23:33:11 +0000 Subject: 2008-05-22 Till Straumann * shared/startup/linkcmds, shared/startup/zerobss.c: introduced '__bss_end'; assuming that __rtems_end coincides with the end of .bss for the purpose of zeroing .bss is very dangerous. --- c/src/lib/libbsp/powerpc/ChangeLog | 7 +++++++ c/src/lib/libbsp/powerpc/shared/startup/linkcmds | 1 + c/src/lib/libbsp/powerpc/shared/startup/zerobss.c | 4 ++-- 3 files changed, 10 insertions(+), 2 deletions(-) (limited to 'c/src') diff --git a/c/src/lib/libbsp/powerpc/ChangeLog b/c/src/lib/libbsp/powerpc/ChangeLog index 34a3055f9c..8b4c853dae 100644 --- a/c/src/lib/libbsp/powerpc/ChangeLog +++ b/c/src/lib/libbsp/powerpc/ChangeLog @@ -1,3 +1,10 @@ +2008-05-22 Till Straumann + + * shared/startup/linkcmds, shared/startup/zerobss.c: + introduced '__bss_end'; assuming that __rtems_end + coincides with the end of .bss for the purpose of + zeroing .bss is very dangerous. + 2008-05-22 Joel Sherrill * shared/console/console.c: Fix typo. diff --git a/c/src/lib/libbsp/powerpc/shared/startup/linkcmds b/c/src/lib/libbsp/powerpc/shared/startup/linkcmds index 8df3c12b99..2f0335afe8 100644 --- a/c/src/lib/libbsp/powerpc/shared/startup/linkcmds +++ b/c/src/lib/libbsp/powerpc/shared/startup/linkcmds @@ -221,6 +221,7 @@ _SDA_BASE_ = __SDATA_START__ + 0x8000; *(.bss .bss* .gnu.linkonce.b*) *(COMMON) . = ALIGN(16); + PROVIDE (__bss_end = .); } > CODE . = ALIGN(16); _end = . ; diff --git a/c/src/lib/libbsp/powerpc/shared/startup/zerobss.c b/c/src/lib/libbsp/powerpc/shared/startup/zerobss.c index d1c62384f2..a8303f1a64 100644 --- a/c/src/lib/libbsp/powerpc/shared/startup/zerobss.c +++ b/c/src/lib/libbsp/powerpc/shared/startup/zerobss.c @@ -21,8 +21,8 @@ void zero_bss() /* prevent these from being accessed in the short data areas */ extern unsigned long __bss_start[], __SBSS_START__[], __SBSS_END__[]; extern unsigned long __SBSS2_START__[], __SBSS2_END__[]; - extern unsigned long __rtems_end[]; + extern unsigned long __bss_end[]; memset(__SBSS_START__, 0, ((unsigned) __SBSS_END__) - ((unsigned)__SBSS_START__)); memset(__SBSS2_START__, 0, ((unsigned) __SBSS2_END__) - ((unsigned)__SBSS2_START__)); - memset(__bss_start, 0, ((unsigned) __rtems_end) - ((unsigned)__bss_start)); + memset(__bss_start, 0, ((unsigned) __bss_end) - ((unsigned)__bss_start)); } -- cgit v1.2.3