From f9493a15ea9cfb63a815c00c23142369ec09d8ce Mon Sep 17 00:00:00 2001 From: "H.J. Lu" Date: Tue, 17 Dec 2024 18:41:45 +0800 Subject: [PATCH] Hide all malloc functions from compiler [BZ #32366] Since -1 isn't a power of two, compiler may reject it, hide memalign from Clang 19 which issues an error: tst-memalign.c:86:31: error: requested alignment is not a power of 2 [-Werror,-Wnon-power-of-two-alignment] 86 | p = memalign (-1, pagesize); | ^~ tst-memalign.c:86:31: error: requested alignment must be 4294967296 bytes or smaller; maximum alignment assumed [-Werror,-Wbuiltin-assume-aligned-alignment] 86 | p = memalign (-1, pagesize); | ^~ Update tst-malloc-aux.h to hide all malloc functions and include it in all malloc tests to prevent compiler from optimizing out any malloc functions. Tested with Clang 19.1.5 and GCC 15 20241206 for BZ #32366. Signed-off-by: H.J. Lu Reviewed-by: Sam James --- malloc/tst-mallinfo2.c | 2 ++ malloc/tst-malloc-aux.h | 23 +++++++++++++++++++---- malloc/tst-malloc-backtrace.c | 2 ++ malloc/tst-memalign.c | 2 ++ malloc/tst-safe-linking.c | 2 ++ malloc/tst-valloc.c | 2 ++ 6 files changed, 29 insertions(+), 4 deletions(-) diff --git a/malloc/tst-mallinfo2.c b/malloc/tst-mallinfo2.c index 2c02f5f700..f072b9f24b 100644 --- a/malloc/tst-mallinfo2.c +++ b/malloc/tst-mallinfo2.c @@ -23,6 +23,8 @@ #include #include +#include "tst-malloc-aux.h" + /* This is not specifically needed for the test, but (1) does something to the data so gcc doesn't optimize it away, and (2) may help when developing future tests. */ diff --git a/malloc/tst-malloc-aux.h b/malloc/tst-malloc-aux.h index 54908b4a24..3e1b61ce34 100644 --- a/malloc/tst-malloc-aux.h +++ b/malloc/tst-malloc-aux.h @@ -22,20 +22,35 @@ #include #include +#include -static void *(*volatile aligned_alloc_indirect)(size_t, size_t) = aligned_alloc; -static void *(*volatile calloc_indirect)(size_t, size_t) = calloc; -static void *(*volatile malloc_indirect)(size_t) = malloc; -static void *(*volatile realloc_indirect)(void*, size_t) = realloc; +static __typeof (aligned_alloc) * volatile aligned_alloc_indirect + = aligned_alloc; +static __typeof (calloc) * volatile calloc_indirect = calloc; +static __typeof (malloc) * volatile malloc_indirect = malloc; +static __typeof (memalign) * volatile memalign_indirect = memalign; +static __typeof (posix_memalign) * volatile posix_memalign_indirect + = posix_memalign; +static __typeof (pvalloc) * volatile pvalloc_indirect = pvalloc; +static __typeof (realloc) * volatile realloc_indirect = realloc; +static __typeof (valloc) * volatile valloc_indirect = valloc; #undef aligned_alloc #undef calloc #undef malloc +#undef memalign +#undef posix_memalign +#undef pvalloc #undef realloc +#undef valloc #define aligned_alloc aligned_alloc_indirect #define calloc calloc_indirect #define malloc malloc_indirect +#define memalign memalign_indirect +#define posix_memalign posix_memalign_indirect +#define pvalloc pvalloc_indirect #define realloc realloc_indirect +#define valloc valloc_indirect #endif /* TST_MALLOC_AUX_H */ diff --git a/malloc/tst-malloc-backtrace.c b/malloc/tst-malloc-backtrace.c index c7b1d65e5c..65fa91f6fd 100644 --- a/malloc/tst-malloc-backtrace.c +++ b/malloc/tst-malloc-backtrace.c @@ -22,6 +22,8 @@ #include #include +#include "tst-malloc-aux.h" + #define SIZE 4096 /* Wrap free with a function to prevent gcc from optimizing it out. */ diff --git a/malloc/tst-memalign.c b/malloc/tst-memalign.c index 563f6413d2..ac9770d3f9 100644 --- a/malloc/tst-memalign.c +++ b/malloc/tst-memalign.c @@ -23,6 +23,8 @@ #include #include +#include "tst-malloc-aux.h" + static int errors = 0; static void diff --git a/malloc/tst-safe-linking.c b/malloc/tst-safe-linking.c index 5302575ad1..59d45d0da5 100644 --- a/malloc/tst-safe-linking.c +++ b/malloc/tst-safe-linking.c @@ -26,6 +26,8 @@ #include #include +#include "tst-malloc-aux.h" + /* Run CALLBACK and check that the data on standard error equals EXPECTED. */ static void diff --git a/malloc/tst-valloc.c b/malloc/tst-valloc.c index 9bab8c6470..0243d3dfd4 100644 --- a/malloc/tst-valloc.c +++ b/malloc/tst-valloc.c @@ -23,6 +23,8 @@ #include #include +#include "tst-malloc-aux.h" + static int errors = 0; static void