Hi Albert,

On 2015年11月11日 02:30, Albert ARIBAUD wrote:
board_init_f_mem() alters the C runtime environment's
stack it ls actually already using. This is not a valid
C runtime environment.

Split board_init_f_mem into C functions which do not
alter their own stack and therefore run in a valid C
runtime environment.

Signed-off-by: Albert ARIBAUD <albert.u.b...@aribaud.net>
---
For NIOS2, this patch hopefully contains all manual
fixes by Thomas.

Changes in v2:
- Fix all checkpatch issues
- Fix board_init_f_malloc prototype mismatch
- Fix board_init_[f_]xxx typo in NIOS2
- Fix aarch64 asm 'sub' syntax error

  arch/arc/lib/start.S            | 20 +++++++++++++---
  arch/arm/lib/crt0.S             | 10 ++++++--
  arch/arm/lib/crt0_64.S          | 10 ++++++--
  arch/microblaze/cpu/start.S     |  4 ++--
  arch/nios2/cpu/start.S          | 17 ++++++++++++--
  arch/powerpc/cpu/ppc4xx/start.S | 18 ++++++++++----
  arch/x86/cpu/start.S            | 10 ++++++--
  arch/x86/lib/fsp/fsp_common.c   |  4 ++--
  common/init/board_init.c        | 31 ++++++++++++++----------
  include/common.h                | 52 +++++++++++++++++++++++++----------------
  10 files changed, 125 insertions(+), 51 deletions(-)


Additional fixes,
------------------------------------------------------------------------
diff --git a/common/init/board_init.c b/common/init/board_init.c
index 8839a4a..703e6d8 100644
--- a/common/init/board_init.c
+++ b/common/init/board_init.c
@@ -46,6 +46,7 @@ void board_init_f_gd(struct global_data *gd_ptr)
        for (ptr = (int *)gd_ptr; ptr < (int *)(gd_ptr + 1); )
                *ptr++ = 0;
 #endif
+       arch_setup_gd(gd_ptr);
 }

 ulong board_init_f_malloc_size(void)
--------------------------------------------------------------------------
diff --git a/arch/nios2/cpu/start.S b/arch/nios2/cpu/start.S
index c163ce1..0adff46 100644
--- a/arch/nios2/cpu/start.S
+++ b/arch/nios2/cpu/start.S
@@ -110,7 +110,7 @@ _reloc:
        movhi   r2, %hi(board_init_f_gd_size@h)
        ori     r2, r2, %lo(board_init_f_gd_size@h)
        callr   r2
-       sub     sp, sp, r4
+       sub     sp, sp, r2
        mov     r4, sp
        movhi   r2, %hi(board_init_f_gd@h)
        ori     r2, r2, %lo(board_init_f_gd@h)
@@ -119,16 +119,12 @@ _reloc:
        movhi   r2, %hi(board_init_f_malloc_size@h)
        ori     r2, r2, %lo(board_init_f_malloc_size@h)
        callr   r2
-       sub     sp, sp, r4
+       sub     sp, sp, r2
        mov     r4, sp
        movhi   r2, %hi(board_init_f_malloc@h)
        ori     r2, r2, %lo(board_init_f_malloc@h)
        callr   r2

-       /* Update stack- and frame-pointers */
-       mov     sp, r2
-       mov     fp, sp
-
        /* Call board_init_f -- never returns */
        mov     r4, r0
        movhi   r2, %hi(board_init_f@h)
----------------------------------------------------------------------------
Otherwise,

Tested-by: Thomas Chou <tho...@wytron.com.tw>
Acked-by: Thomas Chou <tho...@wytron.com.tw>

Thanks.

Best regards,
Thomas
_______________________________________________
U-Boot mailing list
U-Boot@lists.denx.de
http://lists.denx.de/mailman/listinfo/u-boot

Reply via email to