diff options
author | H.J. Lu <hjl.tools@gmail.com> | 2024-12-17 18:41:45 +0800 |
---|---|---|
committer | H.J. Lu <hjl.tools@gmail.com> | 2024-12-17 20:51:08 +0800 |
commit | f9493a15ea9cfb63a815c00c23142369ec09d8ce (patch) | |
tree | a52b33877ef03bb3343a999bb7930383dc37e3e8 | |
parent | bd0ea9ff7e8d5f7d54112dfa96d541c3c60e36ae (diff) | |
download | glibc-f9493a15ea9cfb63a815c00c23142369ec09d8ce.zip glibc-f9493a15ea9cfb63a815c00c23142369ec09d8ce.tar.gz glibc-f9493a15ea9cfb63a815c00c23142369ec09d8ce.tar.bz2 |
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 <hjl.tools@gmail.com>
Reviewed-by: Sam James <sam@gentoo.org>
-rw-r--r-- | malloc/tst-mallinfo2.c | 2 | ||||
-rw-r--r-- | malloc/tst-malloc-aux.h | 25 | ||||
-rw-r--r-- | malloc/tst-malloc-backtrace.c | 2 | ||||
-rw-r--r-- | malloc/tst-memalign.c | 2 | ||||
-rw-r--r-- | malloc/tst-safe-linking.c | 2 | ||||
-rw-r--r-- | malloc/tst-valloc.c | 2 |
6 files changed, 30 insertions, 5 deletions
diff --git a/malloc/tst-mallinfo2.c b/malloc/tst-mallinfo2.c index 2c02f5f..f072b9f 100644 --- a/malloc/tst-mallinfo2.c +++ b/malloc/tst-mallinfo2.c @@ -23,6 +23,8 @@ #include <stdlib.h> #include <support/check.h> +#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 54908b4..3e1b61c 100644 --- a/malloc/tst-malloc-aux.h +++ b/malloc/tst-malloc-aux.h @@ -22,20 +22,35 @@ #include <stddef.h> #include <stdlib.h> - -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; +#include <malloc.h> + +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 c7b1d65..65fa91f 100644 --- a/malloc/tst-malloc-backtrace.c +++ b/malloc/tst-malloc-backtrace.c @@ -22,6 +22,8 @@ #include <support/support.h> #include <libc-diag.h> +#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 563f641..ac9770d 100644 --- a/malloc/tst-memalign.c +++ b/malloc/tst-memalign.c @@ -23,6 +23,8 @@ #include <unistd.h> #include <libc-diag.h> +#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 5302575..59d45d0 100644 --- a/malloc/tst-safe-linking.c +++ b/malloc/tst-safe-linking.c @@ -26,6 +26,8 @@ #include <support/capture_subprocess.h> #include <support/check.h> +#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 9bab8c6..0243d3d 100644 --- a/malloc/tst-valloc.c +++ b/malloc/tst-valloc.c @@ -23,6 +23,8 @@ #include <unistd.h> #include <libc-diag.h> +#include "tst-malloc-aux.h" + static int errors = 0; static void |