[U-Boot] [PATCH 3/7] malloc_simple: Add Kconfig option for using only malloc_simple in the SPL

Simon Glass sjg at chromium.org
Tue Sep 22 06:00:18 CEST 2015


Hi Hans,

On 13 September 2015 at 09:42, Hans de Goede <hdegoede at redhat.com> wrote:
> common/dlmalloc.c is quite big, both in .text and .data usage, therefor
> on some boards the SPL is build to use only malloc_simple.c and not the
> dlmalloc.c code. This is done in various include/configs/foo.h with the
> following construct:
>

Was there a '#' at the start of this missing line?

> This commit introduces a SPL_MALLOC_SIMPLE Kconfig bool which allows
> selecting this functionality through Kconfig instead.
>
> Signed-off-by: Hans de Goede <hdegoede at redhat.com>
> ---
>  Kconfig                | 10 ++++++++++
>  common/malloc_simple.c |  3 ++-
>  include/_exports.h     |  3 ++-
>  include/exports.h      |  3 ++-
>  include/malloc.h       |  3 ++-
>  5 files changed, 18 insertions(+), 4 deletions(-)
>
> diff --git a/Kconfig b/Kconfig
> index 05a34f7..0ae4fab 100644
> --- a/Kconfig
> +++ b/Kconfig
> @@ -114,6 +114,16 @@ config SPL
>         help
>           If you want to build SPL as well as the normal image, say Y.
>
> +config SPL_MALLOC_SIMPLE

If you made it SPL_SYS_MALLOC_SIMPLE...

> +       bool
> +       depends on SPL
> +       prompt "Only use malloc_simple functions in the spl"
> +       help
> +         Say Y here to only use the *_simple malloc functions from
> +         malloc_simple.c, rather then using the versions from dlmalloc.c
> +         this will make the SPL binary smaller at the cost of more heap
> +         usage as the *_simple malloc functions do not re-use free-ed mem.
> +
>  config SPL_STACK_R
>         depends on SPL
>         bool "Enable SDRAM location for SPL stack"
> diff --git a/common/malloc_simple.c b/common/malloc_simple.c
> index c745863..e9c1eaa 100644
> --- a/common/malloc_simple.c
> +++ b/common/malloc_simple.c
> @@ -40,7 +40,8 @@ void *memalign_simple(size_t align, size_t bytes)
>         return ptr;
>  }
>
> -#ifdef CONFIG_SYS_MALLOC_SIMPLE
> +#if (defined CONFIG_SPL_BUILD && defined CONFIG_SPL_MALLOC_SIMPLE) || \
> +    (defined CONFIG_SYS_MALLOC_SIMPLE)

then I think this could become:

#if CONFIG_IS_ENABLED(SYS_MALLOC_SIMPLE)

>  void *calloc(size_t nmemb, size_t elem_size)
>  {
>         size_t size = nmemb * elem_size;
> diff --git a/include/_exports.h b/include/_exports.h
> index 74a882a..f811c5d 100644
> --- a/include/_exports.h
> +++ b/include/_exports.h
> @@ -23,7 +23,8 @@
>         EXPORT_FUNC(dummy, void, free_hdlr, void)
>  #endif
>         EXPORT_FUNC(malloc, void *, malloc, size_t)
> -#ifndef CONFIG_SYS_MALLOC_SIMPLE
> +#if !(defined CONFIG_SPL_BUILD && defined CONFIG_SPL_MALLOC_SIMPLE) && \
> +    !(defined CONFIG_SYS_MALLOC_SIMPLE)
>         EXPORT_FUNC(free, void, free, void *)
>  #endif
>         EXPORT_FUNC(udelay, void, udelay, unsigned long)
> diff --git a/include/exports.h b/include/exports.h
> index a3e0469..8171b31 100644
> --- a/include/exports.h
> +++ b/include/exports.h
> @@ -19,7 +19,8 @@ int printf(const char* fmt, ...);
>  void install_hdlr(int, interrupt_handler_t, void*);
>  void free_hdlr(int);
>  void *malloc(size_t);
> -#ifndef CONFIG_SYS_MALLOC_SIMPLE
> +#if !(defined CONFIG_SPL_BUILD && defined CONFIG_SPL_MALLOC_SIMPLE) && \
> +    !(defined CONFIG_SYS_MALLOC_SIMPLE)
>  void free(void*);
>  #endif
>  void __udelay(unsigned long);
> diff --git a/include/malloc.h b/include/malloc.h
> index f4da9e6..e5592fc 100644
> --- a/include/malloc.h
> +++ b/include/malloc.h
> @@ -872,7 +872,8 @@ extern Void_t*     sbrk();
>
>  #else
>
> -#ifdef CONFIG_SYS_MALLOC_SIMPLE
> +#if (defined CONFIG_SPL_BUILD && defined CONFIG_SPL_MALLOC_SIMPLE) || \
> +    (defined CONFIG_SYS_MALLOC_SIMPLE)
>  #define malloc malloc_simple
>  #define realloc realloc_simple
>  #define memalign memalign_simple
> --
> 2.4.3
>

Regards,
Simon


More information about the U-Boot mailing list