We used to have following alignments: 32-bit CPU 64-bit CPU dummy 8 bytes 8 bytes dlmalloc 8 bytes 16 bytes tlsf 4 bytes 8 bytes With recent change to TLSF, we now always have at least 8 bytes as alignment. To make this clearer, define a new CONFIG_MALLOC_ALIGNMENT and either use it as the alignment (as done for dummy) or add static asserts to ensure we have at least this alignment. Signed-off-by: Ahmad Fatoum <a.fatoum@xxxxxxxxxxxxxx> --- common/Kconfig | 5 +++++ common/dlmalloc.c | 3 +++ common/dummy_malloc.c | 2 +- common/tlsf.c | 2 ++ 4 files changed, 11 insertions(+), 1 deletion(-) diff --git a/common/Kconfig b/common/Kconfig index afa591cb76ff..15c648de5d79 100644 --- a/common/Kconfig +++ b/common/Kconfig @@ -277,6 +277,11 @@ config MALLOC_SIZE hex default 0x400000 prompt "malloc area size" + +config MALLOC_ALIGNMENT + hex + default 8 + endmenu config BROKEN diff --git a/common/dlmalloc.c b/common/dlmalloc.c index ae10c9ae30dd..16ea3cafb624 100644 --- a/common/dlmalloc.c +++ b/common/dlmalloc.c @@ -3,6 +3,7 @@ #include <malloc.h> #include <string.h> #include <memory.h> +#include <linux/build_bug.h> #include <stdio.h> #include <module.h> @@ -884,6 +885,8 @@ static mbinptr av_[NAV * 2 + 2] = { /* Other static bookkeeping data */ +static_assert(MALLOC_ALIGNMENT >= CONFIG_MALLOC_ALIGNMENT); + /* variables holding tunable values */ #ifndef __BAREBOX__ static unsigned long trim_threshold = DEFAULT_TRIM_THRESHOLD; diff --git a/common/dummy_malloc.c b/common/dummy_malloc.c index d99b5059cf91..7a96afec76e0 100644 --- a/common/dummy_malloc.c +++ b/common/dummy_malloc.c @@ -23,7 +23,7 @@ void *memalign(size_t alignment, size_t bytes) void *malloc(size_t size) { - return memalign(8, size); + return memalign(CONFIG_MALLOC_ALIGNMENT, size); } void free(void *ptr) diff --git a/common/tlsf.c b/common/tlsf.c index 692dabbdedd9..ba2ed367c0b9 100644 --- a/common/tlsf.c +++ b/common/tlsf.c @@ -96,6 +96,8 @@ tlsf_static_assert(sizeof(unsigned int) * CHAR_BIT >= SL_INDEX_COUNT); /* Ensure we've properly tuned our sizes. */ tlsf_static_assert(ALIGN_SIZE == SMALL_BLOCK_SIZE / SL_INDEX_COUNT); +tlsf_static_assert(ALIGN_SIZE >= CONFIG_MALLOC_ALIGNMENT); + /* ** Data structures and associated constants. */ -- 2.39.2