]> git.ipfire.org Git - thirdparty/haproxy.git/commitdiff
MINOR: debug: make the mem_stats section aligned to void*
authorWilly Tarreau <w@1wt.eu>
Tue, 9 Aug 2022 06:09:24 +0000 (08:09 +0200)
committerWilly Tarreau <w@1wt.eu>
Tue, 9 Aug 2022 06:09:24 +0000 (08:09 +0200)
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.

include/haproxy/bug.h
include/haproxy/pool.h

index e6303fd3cba70322e810e41fa5c4b8cab20ad99d..fbf1d488ec1a92b60894a4d5604786849595bf40 100644 (file)
@@ -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,                          \
        };                                                              \
index 3640ad1123e5108ef7b886c746ed658918963e38..a818cc42b134e02127451a52d3cc10d16074ed96 100644 (file)
@@ -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,                         \
        };                                                              \