Hi,

On 22-09-15 06:00, Simon Glass wrote:
Hi Hans,

On 13 September 2015 at 09:42, Hans de Goede <hdego...@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?

Yep, I keep falling over git commit eating up any lines starting with
a # when quoting code snippets in commit messages...

I will fix this and send a v2.

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

Signed-off-by: Hans de Goede <hdego...@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)

I think you're right, good one. I'll give this a spin and
if it works include the change in V2.

  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


Regards,

Hans
_______________________________________________
U-Boot mailing list
U-Boot@lists.denx.de
http://lists.denx.de/mailman/listinfo/u-boot

Reply via email to