Message ID | 1442158965-29962-4-git-send-email-hdegoede@redhat.com |
---|---|
State | Accepted |
Delegated to: | Hans de Goede |
Headers | show |
Hi Hans, On 13 September 2015 at 09:42, Hans de Goede <hdegoede@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@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
Hi, On 22-09-15 06:00, Simon Glass wrote: > Hi Hans, > > On 13 September 2015 at 09:42, Hans de Goede <hdegoede@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 <hdegoede@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
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 + 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) 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
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: 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> --- 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(-)