
Hello,
Am 30.10.2010 15:36, schrieb Albert ARIBAUD:
The code is moved upwards, but that code still uses the data at d. This results another problem: Some parts in the code are assuming that d is cleared (set to zero in start.S). But what start.S does it to clear the new location (z in the picture below).
Wait a minute. No parts of the code assume BSS is *cleared*, or at least no pat of the should *should ever* assume that. BSS is not "zeroed data", it is "uninitialized data".
Thats true for normal C, but I assume that is not true for u-boot.
This reminds me on some problems I've had long long time ago, with switching from debug to optimized code using vc++. I don't know if it is still true (>10a ago), but in those days, vc++ had preset all not initialized data with zero when optimization was turned off.
If the code in u-boot would not assume that bss is zero, I don't understand why clear_bss in start.S exists.
Regards,
Alexander