malloc_simple: Add Kconfig option for using only malloc_simple in the SPL
authorHans de Goede <hdegoede@redhat.com>
Sun, 13 Sep 2015 12:45:15 +0000 (14:45 +0200)
committerHans de Goede <hdegoede@redhat.com>
Tue, 20 Oct 2015 16:40:27 +0000 (18:40 +0200)
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:

 #ifdef CONFIG_SPL_BUILD
 #define CONFIG_SYS_MALLOC_SIMPLE
 #endif

This commit introduces a SPL_MALLOC_SIMPLE Kconfig bool which allows
selecting this functionality through Kconfig instead.

Signed-off-by: Hans de Goede <hdegoede@redhat.com>
Acked-by: Simon Glass <sjg@chromium.org>
Kconfig
common/malloc_simple.c
include/_exports.h
include/exports.h
include/malloc.h

diff --git a/Kconfig b/Kconfig
index f364a7a4d51d7fffeec8b68ff15c336ce974d0f3..b4ad610f613037a6176196af1928671868772f50 100644 (file)
--- 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_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"
index c74586376d3c61ce7c30aa927e888829ac76c174..9bf1fedd51687a8acd2fbd238ff4c5a5b417d0d5 100644 (file)
@@ -40,7 +40,7 @@ void *memalign_simple(size_t align, size_t bytes)
        return ptr;
 }
 
-#ifdef CONFIG_SYS_MALLOC_SIMPLE
+#if CONFIG_IS_ENABLED(SYS_MALLOC_SIMPLE)
 void *calloc(size_t nmemb, size_t elem_size)
 {
        size_t size = nmemb * elem_size;
index 74a882a680eea36404e1e1190c17437dc1f9a5a9..11beeb24f18327f87e5c73a30e24c4bb5c7bf1cb 100644 (file)
@@ -23,7 +23,7 @@
        EXPORT_FUNC(dummy, void, free_hdlr, void)
 #endif
        EXPORT_FUNC(malloc, void *, malloc, size_t)
-#ifndef CONFIG_SYS_MALLOC_SIMPLE
+#if !CONFIG_IS_ENABLED(SYS_MALLOC_SIMPLE)
        EXPORT_FUNC(free, void, free, void *)
 #endif
        EXPORT_FUNC(udelay, void, udelay, unsigned long)
index a3e0469d40e8d0e5cf8d51a12ff0a03d2de6b1b0..deef8fbec8cccf0ac0382b496829f05a58fd7b8d 100644 (file)
@@ -19,7 +19,7 @@ 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 !CONFIG_IS_ENABLED(SYS_MALLOC_SIMPLE)
 void free(void*);
 #endif
 void __udelay(unsigned long);
index f4da9e6dddb67e2ccb78464558caf5aa85f5ce74..f20e4d3d2a6b90a80a1f3957c93e14b121909bfe 100644 (file)
@@ -872,7 +872,7 @@ extern Void_t*     sbrk();
 
 #else
 
-#ifdef CONFIG_SYS_MALLOC_SIMPLE
+#if CONFIG_IS_ENABLED(SYS_MALLOC_SIMPLE)
 #define malloc malloc_simple
 #define realloc realloc_simple
 #define memalign memalign_simple