
Dear Wolfgang,
Am Montag, 9. August 2010, 00:18:19 schrieb Wolfgang Denk:
In message <1279701826-20083-1-git-send-email-alexander.stein@systec-
electronic.com> you wrote:
Signed-off-by: Alexander Stein alexander.stein@systec-electronic.com
common/image.c | 11 ++++++++--- 1 files changed, 8 insertions(+), 3 deletions(-)
Why would this be needed? Do you have an error scenario?
IIRC the problem arose when i downloaded my image to 0x20000000 (SD-RAM) using TFTP and my Linux kernel entry point was at 0x20008000. So when CONFIG_HW_WATCHDOG is defined u-boot starts copying from the beginning thus overriding the source. Finally i got decompression errors upon Linux kernel start. Without CONFIG_HW_WATCHDOG memmove_wd is simply memmove which handled this cased correctly.
if (to <= from)
{
memmove (to, from, tail);
to += tail;
from += tail;
} else {
memmove (to + len - tail, from + len - tail, tail);
In which way is this supposed to allow overlapping memory areas?
With this change u-boot starts to copy from the end to the beginning thus preventing overriding the source. This change was adopted from memmove (lib/string.c) which handles this case correctly.
Best regards, Alexander