Fix board init code to respect the C runtime environment
board_init_f_mem() alters the C runtime environment's stack it is actually already using. This is not a valid behaviour within a C runtime environment. Split board_init_f_mem into C functions which do not alter their own stack and always behave properly with respect to their C runtime environment. Signed-off-by: Albert ARIBAUD <albert.u.boot@aribaud.net> Acked-by: Thomas Chou <thomas@wytron.com.tw>
This commit is contained in:
@@ -106,14 +106,18 @@ _reloc:
|
||||
stw r0, 4(sp)
|
||||
mov fp, sp
|
||||
|
||||
/* Allocate and zero GD, update SP */
|
||||
/* Allocate and initialize reserved area, update SP */
|
||||
mov r4, sp
|
||||
movhi r2, %hi(board_init_f_mem@h)
|
||||
ori r2, r2, %lo(board_init_f_mem@h)
|
||||
movhi r2, %hi(board_init_f_alloc_reserve@h)
|
||||
ori r2, r2, %lo(board_init_f_alloc_reserve@h)
|
||||
callr r2
|
||||
mov sp, r2
|
||||
mov r4, sp
|
||||
movhi r2, %hi(board_init_f_init_reserve@h)
|
||||
ori r2, r2, %lo(board_init_f_init_reserve@h)
|
||||
callr r2
|
||||
|
||||
/* Update stack- and frame-pointers */
|
||||
mov sp, r2
|
||||
/* Update frame-pointer */
|
||||
mov fp, sp
|
||||
|
||||
/* Call board_init_f -- never returns */
|
||||
|
||||
Reference in New Issue
Block a user