summaryrefslogtreecommitdiff
path: root/include
diff options
context:
space:
mode:
authorSimon Glass <sjg@chromium.org>2014-11-10 17:16:43 -0700
committerSimon Glass <sjg@chromium.org>2014-11-21 08:12:28 +0100
commitc9356be30741b5192c79038fa4f8a2ac5b5f35c1 (patch)
treeb3d960f35531fa2dde0f5beeb650e8b63048e771 /include
parent9dacbb277255c432047f6df8fe21505b9c8cf485 (diff)
downloadu-boot-imx-c9356be30741b5192c79038fa4f8a2ac5b5f35c1.zip
u-boot-imx-c9356be30741b5192c79038fa4f8a2ac5b5f35c1.tar.gz
u-boot-imx-c9356be30741b5192c79038fa4f8a2ac5b5f35c1.tar.bz2
dm: Split the simple malloc() implementation into its own file
The simple malloc() implementation is used when memory is tight. It provides a simple buffer with an incrementing pointer. At present the implementation is inside dlmalloc. Move it into its own file so that it is easier to find. Rather than using relocation as a signal that the full malloc() is available, add a special GD_FLG_FULL_MALLOC_INIT flag. This signals that the simple malloc() should no longer be used. In some cases, such as SPL, even the code space used by the full malloc() is wasteful. Add a CONFIG_SYS_MALLOC_SIMPLE option to provide only the simple malloc. In this case the full malloc is not available at all. It saves about 1KB of code space and about 0.5KB of data on Thumb 2. Acked-by: Tom Rini <trini@ti.com> Signed-off-by: Simon Glass <sjg@chromium.org>
Diffstat (limited to 'include')
-rw-r--r--include/asm-generic/global_data.h1
-rw-r--r--include/malloc.h60
2 files changed, 38 insertions, 23 deletions
diff --git a/include/asm-generic/global_data.h b/include/asm-generic/global_data.h
index 74df210..5e5dc37 100644
--- a/include/asm-generic/global_data.h
+++ b/include/asm-generic/global_data.h
@@ -107,5 +107,6 @@ typedef struct global_data {
#define GD_FLG_DISABLE_CONSOLE 0x00040 /* Disable console (in & out) */
#define GD_FLG_ENV_READY 0x00080 /* Env. imported into hash table */
#define GD_FLG_SERIAL_READY 0x00100 /* Pre-reloc serial console ready */
+#define GD_FLG_FULL_MALLOC_INIT 0x00200 /* Full malloc() is ready */
#endif /* __ASM_GENERIC_GBL_DATA_H */
diff --git a/include/malloc.h b/include/malloc.h
index c33f3b4..5df6348 100644
--- a/include/malloc.h
+++ b/include/malloc.h
@@ -872,33 +872,46 @@ extern Void_t* sbrk();
#else
-#ifdef USE_DL_PREFIX
-#define cALLOc dlcalloc
-#define fREe dlfree
-#define mALLOc dlmalloc
-#define mEMALIGn dlmemalign
-#define rEALLOc dlrealloc
-#define vALLOc dlvalloc
-#define pvALLOc dlpvalloc
-#define mALLINFo dlmallinfo
-#define mALLOPt dlmallopt
-#else /* USE_DL_PREFIX */
-#define cALLOc calloc
-#define fREe free
-#define mALLOc malloc
-#define mEMALIGn memalign
-#define rEALLOc realloc
-#define vALLOc valloc
-#define pvALLOc pvalloc
-#define mALLINFo mallinfo
-#define mALLOPt mallopt
-#endif /* USE_DL_PREFIX */
+#ifdef CONFIG_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
+
+# ifdef USE_DL_PREFIX
+# define cALLOc dlcalloc
+# define fREe dlfree
+# define mALLOc dlmalloc
+# define mEMALIGn dlmemalign
+# define rEALLOc dlrealloc
+# define vALLOc dlvalloc
+# define pvALLOc dlpvalloc
+# define mALLINFo dlmallinfo
+# define mALLOPt dlmallopt
+# else /* USE_DL_PREFIX */
+# define cALLOc calloc
+# define fREe free
+# define mALLOc malloc
+# define mEMALIGn memalign
+# define rEALLOc realloc
+# define vALLOc valloc
+# define pvALLOc pvalloc
+# define mALLINFo mallinfo
+# define mALLOPt mallopt
+# endif /* USE_DL_PREFIX */
#endif
/* Public routines */
-#if __STD_C
+/* Simple versions which can be used when space is tight */
+void *malloc_simple(size_t size);
+
+# if __STD_C
Void_t* mALLOc(size_t);
void fREe(Void_t*);
@@ -913,7 +926,7 @@ size_t malloc_usable_size(Void_t*);
void malloc_stats(void);
int mALLOPt(int, int);
struct mallinfo mALLINFo(void);
-#else
+# else
Void_t* mALLOc();
void fREe();
Void_t* rEALLOc();
@@ -927,6 +940,7 @@ size_t malloc_usable_size();
void malloc_stats();
int mALLOPt();
struct mallinfo mALLINFo();
+# endif
#endif
/*