From: Willy Tarreau Date: Tue, 9 Aug 2022 06:09:24 +0000 (+0200) Subject: MINOR: debug: make the mem_stats section aligned to void* X-Git-Tag: v2.7-dev4~76 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=4bc37086b8c46991692c6ac368762722ee3c87c6;p=thirdparty%2Fhaproxy.git MINOR: debug: make the mem_stats section aligned to void* Not specifying the alignment will let the linker choose it, and it turns out that it will not necessarily be the same size as the one chosen for struct mem_stats, as can be seen if any new fields are added there. Let's enforce an alignment to void* both for the section and for the structure. --- diff --git a/include/haproxy/bug.h b/include/haproxy/bug.h index e6303fd3cb..fbf1d488ec 100644 --- a/include/haproxy/bug.h +++ b/include/haproxy/bug.h @@ -245,12 +245,12 @@ struct mem_stats { const char *file; int line; int type; -}; +} __attribute__((aligned(sizeof(void*)))); #undef calloc #define calloc(x,y) ({ \ size_t __x = (x); size_t __y = (y); \ - static struct mem_stats _ __attribute__((used,__section__("mem_stats"))) = { \ + static struct mem_stats _ __attribute__((used,__section__("mem_stats"),__aligned__(sizeof(void*)))) = { \ .file = __FILE__, .line = __LINE__, \ .type = MEM_STATS_TYPE_CALLOC, \ }; \ @@ -267,7 +267,7 @@ struct mem_stats { #undef __free #define __free(x) ({ \ void *__x = (x); \ - static struct mem_stats _ __attribute__((used,__section__("mem_stats"))) = { \ + static struct mem_stats _ __attribute__((used,__section__("mem_stats"),__aligned__(sizeof(void*)))) = { \ .file = __FILE__, .line = __LINE__, \ .type = MEM_STATS_TYPE_FREE, \ }; \ @@ -281,7 +281,7 @@ struct mem_stats { #undef ha_free #define ha_free(x) ({ \ typeof(x) __x = (x); \ - static struct mem_stats _ __attribute__((used,__section__("mem_stats"))) = { \ + static struct mem_stats _ __attribute__((used,__section__("mem_stats"),__aligned__(sizeof(void*)))) = { \ .file = __FILE__, .line = __LINE__, \ .type = MEM_STATS_TYPE_FREE, \ }; \ @@ -299,7 +299,7 @@ struct mem_stats { #undef malloc #define malloc(x) ({ \ size_t __x = (x); \ - static struct mem_stats _ __attribute__((used,__section__("mem_stats"))) = { \ + static struct mem_stats _ __attribute__((used,__section__("mem_stats"),__aligned__(sizeof(void*)))) = { \ .file = __FILE__, .line = __LINE__, \ .type = MEM_STATS_TYPE_MALLOC, \ }; \ @@ -313,7 +313,7 @@ struct mem_stats { #undef realloc #define realloc(x,y) ({ \ void *__x = (x); size_t __y = (y); \ - static struct mem_stats _ __attribute__((used,__section__("mem_stats"))) = { \ + static struct mem_stats _ __attribute__((used,__section__("mem_stats"),__aligned__(sizeof(void*)))) = { \ .file = __FILE__, .line = __LINE__, \ .type = MEM_STATS_TYPE_REALLOC, \ }; \ @@ -327,7 +327,7 @@ struct mem_stats { #undef strdup #define strdup(x) ({ \ const char *__x = (x); size_t __y = strlen(__x); \ - static struct mem_stats _ __attribute__((used,__section__("mem_stats"))) = { \ + static struct mem_stats _ __attribute__((used,__section__("mem_stats"),__aligned__(sizeof(void*)))) = { \ .file = __FILE__, .line = __LINE__, \ .type = MEM_STATS_TYPE_STRDUP, \ }; \ diff --git a/include/haproxy/pool.h b/include/haproxy/pool.h index 3640ad1123..a818cc42b1 100644 --- a/include/haproxy/pool.h +++ b/include/haproxy/pool.h @@ -255,7 +255,7 @@ static inline void *pool_get_from_cache(struct pool_head *pool, const void *call #define pool_free(pool, ptr) ({ \ struct pool_head *__pool = (pool); \ typeof(ptr) __ptr = (ptr); \ - static struct mem_stats _ __attribute__((used,__section__("mem_stats"))) = { \ + static struct mem_stats _ __attribute__((used,__section__("mem_stats"),__aligned__(sizeof(void*)))) = { \ .file = __FILE__, .line = __LINE__, \ .type = MEM_STATS_TYPE_P_FREE, \ }; \ @@ -271,7 +271,7 @@ static inline void *pool_get_from_cache(struct pool_head *pool, const void *call #define pool_alloc(pool) ({ \ struct pool_head *__pool = (pool); \ size_t __x = __pool->size; \ - static struct mem_stats _ __attribute__((used,__section__("mem_stats"))) = { \ + static struct mem_stats _ __attribute__((used,__section__("mem_stats"),__aligned__(sizeof(void*)))) = { \ .file = __FILE__, .line = __LINE__, \ .type = MEM_STATS_TYPE_P_ALLOC, \ }; \ @@ -285,7 +285,7 @@ static inline void *pool_get_from_cache(struct pool_head *pool, const void *call #define pool_zalloc(pool) ({ \ struct pool_head *__pool = (pool); \ size_t __x = __pool->size; \ - static struct mem_stats _ __attribute__((used,__section__("mem_stats"))) = { \ + static struct mem_stats _ __attribute__((used,__section__("mem_stats"),__aligned__(sizeof(void*)))) = { \ .file = __FILE__, .line = __LINE__, \ .type = MEM_STATS_TYPE_P_ALLOC, \ }; \