
(WARNING: many potentially dumb questions coming this weekend as i try to put together a u-boot tutorial for some upcoming presentations. please be patient ... )
i had a much longer question about the config option SYS_MALLOC_SIMPLE until i noticed that it doesn't seem to be defined in a Kconfig file:
$ grep -rw SYS_MALLOC_SIMPLE * common/malloc_simple.c:#if CONFIG_IS_ENABLED(SYS_MALLOC_SIMPLE) include/exports.h:#if !CONFIG_IS_ENABLED(SYS_MALLOC_SIMPLE) include/_exports.h:#if !CONFIG_IS_ENABLED(SYS_MALLOC_SIMPLE) include/malloc.h:#if CONFIG_IS_ENABLED(SYS_MALLOC_SIMPLE) $
that appears to be the extent of that symbol in the entire u-boot source tree, which is obviously different from:
$ grep -rw SPL_SYS_MALLOC_SIMPLE * arch/arm/Kconfig: select SPL_SYS_MALLOC_SIMPLE if SUPPORT_SPL arch/arm/mach-rockchip/Kconfig:config SPL_SYS_MALLOC_SIMPLE Kconfig:config SPL_SYS_MALLOC_SIMPLE Kconfig: depends on SPL_STACK_R && SPL_SYS_MALLOC_SIMPLE $
the top-level Kconfig file mentions only the latter:
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.
the header file include/malloc.h proceeds to test the *former*:
#if CONFIG_IS_ENABLED(SYS_MALLOC_SIMPLE) #define malloc malloc_simple #define realloc realloc_simple #define memalign memalign_simple static inline void free(void *ptr) {} void *calloc(size_t nmemb, size_t size); void *memalign_simple(size_t alignment, size_t bytes); void *realloc_simple(void *ptr, size_t size); #else ... snip ...
but (oddly?) common/Makefile includes the conditional compilation:
ifdef CONFIG_SYS_MALLOC_F_LEN (?????) obj-y += malloc_simple.o endif
and to top things off, the source file common/malloc_simple.c contains:
void *malloc_simple(size_t bytes) { ... }
void *memalign_simple(size_t align, size_t bytes) { ... }
#if CONFIG_IS_ENABLED(SYS_MALLOC_SIMPLE) void *calloc(size_t nmemb, size_t elem_size) { ... } #endif
at this point, i'm a bit confused as to how all of this malloc_simple stuff hangs together and what the valid Kconfig configurations are.
rday