[U-Boot-Users] A bug fix to lib_ppc/board.c
tony liu
tliu at salira.com
Fri Feb 1 13:29:13 CET 2008
Hi,
This is the original definition:
#if defined(CFG_ENV_IS_EMBEDDED)
#define TOTAL_MALLOC_LEN CFG_MALLOC_LEN
#elif ( ((CFG_ENV_ADDR+CFG_ENV_SIZE) < CFG_MONITOR_BASE) ||
(CFG_ENV_ADDR >= (CFG_MONITOR_BASE + CFG_MONITOR_LEN)) )
|| \
defined(CFG_ENV_IS_IN_NVRAM)
#define TOTAL_MALLOC_LEN (CFG_MALLOC_LEN + CFG_ENV_SIZE)
#else
#define TOTAL_MALLOC_LEN CFG_MALLOC_LEN
#endif
While if your CFG_ENV_ADDR+CFG_ENV_SIZE is just equal with
CFG_MONITOR_BASE and CFG_MALLOC_LEN is smaller than CFG_ENV_SIZE.
Invalid pointer will be set to env_ptr in env_relocate () functions.
Later operations to the environment will always to be performed to this
invalid pointer address. And this might cause some abnormals in system
level. In my testing board, the interrupts' enabling will trigger system
hang-up under such abnormal situations.
The correct definition to fix this problem is:
#if defined(CFG_ENV_IS_EMBEDDED)
#define TOTAL_MALLOC_LEN CFG_MALLOC_LEN
#elif ( ((CFG_ENV_ADDR+CFG_ENV_SIZE) <= CFG_MONITOR_BASE) ||
(CFG_ENV_ADDR >= (CFG_MONITOR_BASE + CFG_MONITOR_LEN)) )
|| \
defined(CFG_ENV_IS_IN_NVRAM)
#define TOTAL_MALLOC_LEN (CFG_MALLOC_LEN + CFG_ENV_SIZE)
#else
#define TOTAL_MALLOC_LEN CFG_MALLOC_LEN
#endif
Regards,
Tony
More information about the U-Boot
mailing list