From patchwork Wed Feb 19 19:39:27 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Simon Goldschmidt X-Patchwork-Id: 236598 List-Id: U-Boot discussion From: simon.k.r.goldschmidt at gmail.com (Simon Goldschmidt) Date: Wed, 19 Feb 2020 20:39:27 +0100 Subject: [PATCH 1/8] malloc: implement USE_DL_PREFIX via inline functions In-Reply-To: <20200219193934.28456-1-simon.k.r.goldschmidt@gmail.com> References: <20200219193934.28456-1-simon.k.r.goldschmidt@gmail.com> Message-ID: <20200219193934.28456-2-simon.k.r.goldschmidt@gmail.com> Commit cfda60f99ae2 ("sandbox: Use a prefix for all allocation functions") introduced preprocessor macros for malloc/free etc. This is bad practice as it essentially makes 'free' a reserved keyword and resulted in quite a bit of renaming to avoid that reserved keyword. A better solution is to define the allocation functions as 'static inline'. As a side effect, exports.h must not export malloc/free for sandbox. Signed-off-by: Simon Goldschmidt Reviewed-by: Simon Glass --- A side-effect is that exports.h may not declare malloc/free. I'm not really sure if this is correct, but for sandbox, it should probably be ok? include/_exports.h | 2 ++ include/exports.h | 2 ++ include/malloc.h | 44 +++++++++++++++++++++++++++++--------------- 3 files changed, 33 insertions(+), 15 deletions(-) diff --git a/include/_exports.h b/include/_exports.h index 0dee05f077..acfbf97c17 100644 --- a/include/_exports.h +++ b/include/_exports.h @@ -22,9 +22,11 @@ EXPORT_FUNC(dummy, void, install_hdlr, void) EXPORT_FUNC(dummy, void, free_hdlr, void) #endif +#ifndef CONFIG_SANDBOX EXPORT_FUNC(malloc, void *, malloc, size_t) #if !CONFIG_IS_ENABLED(SYS_MALLOC_SIMPLE) EXPORT_FUNC(free, void, free, void *) +#endif #endif EXPORT_FUNC(udelay, void, udelay, unsigned long) EXPORT_FUNC(get_timer, unsigned long, get_timer, unsigned long) diff --git a/include/exports.h b/include/exports.h index cbd16fc518..5d161824c8 100644 --- a/include/exports.h +++ b/include/exports.h @@ -25,10 +25,12 @@ void puts(const char*); int printf(const char* fmt, ...); void install_hdlr(int, interrupt_handler_t, void*); void free_hdlr(int); +#ifndef CONFIG_SANDBOX void *malloc(size_t); #if !CONFIG_IS_ENABLED(SYS_MALLOC_SIMPLE) void free(void*); #endif +#endif void __udelay(unsigned long); unsigned long get_timer(unsigned long); int vprintf(const char *, va_list); diff --git a/include/malloc.h b/include/malloc.h index f66c2e8617..50d4873b08 100644 --- a/include/malloc.h +++ b/include/malloc.h @@ -897,21 +897,6 @@ void malloc_simple_info(void); # define pvALLOc dlpvalloc # define mALLINFo dlmallinfo # define mALLOPt dlmallopt - -/* Ensure that U-Boot actually uses these too */ -#define calloc dlcalloc -#define free(ptr) dlfree(ptr) -#define malloc(x) dlmalloc(x) -#define memalign dlmemalign -#define realloc dlrealloc -#define valloc dlvalloc -#define pvalloc dlpvalloc -#define mallinfo() dlmallinfo() -#define mallopt dlmallopt -#define malloc_trim dlmalloc_trim -#define malloc_usable_size dlmalloc_usable_size -#define malloc_stats dlmalloc_stats - # else /* USE_DL_PREFIX */ # define cALLOc calloc # define fREe free @@ -966,6 +951,35 @@ void malloc_stats(); int mALLOPt(); struct mallinfo mALLINFo(); # endif + +# ifdef USE_DL_PREFIX +/* Ensure that U-Boot actually uses the redefined functions: */ +static inline void *calloc(size_t n, size_t elem_size) +{ + return dlcalloc(n, elem_size); +} + +static inline void free(void *ptr) { dlfree(ptr); } +static inline void *malloc(size_t bytes) { return dlmalloc(bytes); } +static inline void *memalign(size_t alignment, size_t bytes) +{ + return dlmemalign(alignment, bytes); +} + +static inline void *realloc(void *oldmem, size_t bytes) +{ + return dlrealloc(oldmem, bytes); +} + +static inline void *valloc(size_t bytes) { return dlvalloc(bytes); } +static inline void *pvalloc(size_t bytes) { return dlpvalloc(bytes); } +static inline struct mallinfo mallinfo(void) { return dlmallinfo(); } +static inline int mallopt(int param_number, int value) +{ + return dlmallopt(param_number, value); +} +# endif + #endif #pragma GCC visibility pop