sh: Set gd->malloc_base if MALLOC_F_LEN is set
authorMarek Vasut <marek.vasut+renesas@gmail.com>
Sat, 9 May 2020 20:02:50 +0000 (22:02 +0200)
committerMarek Vasut <marek.vasut+renesas@gmail.com>
Sun, 2 Aug 2020 17:58:26 +0000 (19:58 +0200)
The gd->malloc_base must be set before the C runtime if the MALLOC_F_LEN
is non-zero, otherwise we hit assertion in dlmalloc.c initf_malloc(). So
set it.

Signed-off-by: Marek Vasut <marek.vasut+renesas@gmail.com>
Cc: Nobuhiro Iwamatsu <iwamatsu@nigauri.org>
arch/sh/lib/start.S

index f9f26d3..ddb9aa9 100644 (file)
@@ -53,7 +53,10 @@ _start:
 
        mov.l   ._gd_init, r13          /* global data */
        mov.l   ._stack_init, r15       /* stack */
-
+#if CONFIG_VAL(SYS_MALLOC_F_LEN)
+       mov.l   ._gd_malloc_base, r14
+       mov.l   r15, @r14
+#endif
        mov.l   ._sh_generic_init, r0
        jsr     @r0
        mov     #0, r4
@@ -70,5 +73,8 @@ loop:
 ._bss_start:           .long   bss_start
 ._bss_end:             .long   bss_end
 ._gd_init:             .long   (_start - GENERATED_GBL_DATA_SIZE)
+#if CONFIG_VAL(SYS_MALLOC_F_LEN)
+._gd_malloc_base:      .long   (_start - GENERATED_GBL_DATA_SIZE + GD_MALLOC_BASE)
+#endif
 ._stack_init:          .long   (_start - GENERATED_GBL_DATA_SIZE - CONFIG_SYS_MALLOC_LEN - 16)
 ._sh_generic_init:     .long   board_init_f