Re: [PATCH 1/1] Revert "malloc: aarch64: Add ifuncs for malloc functions"
Adhemerval Zanella Netto <[email protected]>
| Newsgroups | gmane.comp.lib.glibc.alpha |
|---|---|
| Organization | Linaro |
| Message-ID | <[email protected]> |
On 01/07/26 11:09, Yury Khrustalev wrote: > Due to issue in GDB and Valgrind that incorrectly call malloc > ifunc resolver as the malloc function, we have to revert this > change. > > GDB BZ: https://sourceware.org/bugzilla/show_bug.cgi?id=34330 > Valgrind bug: https://bugs.kde.org/show_bug.cgi?id=522497 > > This reverts commit 9ed3576e61f7a87eb83d512531566f5e5d6bb032. LGTM, thanks. I don't have a strong opinion whether we should push this change on this release and focus on fix this on gdb; or revert it and work a gdb fix. Reviewed-by: Adhemerval Zanella <[email protected]> > --- > malloc/malloc-internal.h | 2 - > malloc/malloc.c | 155 ++++++++++++++++++--- > sysdeps/aarch64/multiarch/Makefile | 10 +- > sysdeps/aarch64/multiarch/malloc-ifuncs.c | 77 ----------- > sysdeps/aarch64/multiarch/malloc-ifuncs.h | 24 ---- > sysdeps/generic/malloc-api.h | 161 ---------------------- > sysdeps/generic/malloc-ifuncs.h | 36 ----- > 7 files changed, 135 insertions(+), 330 deletions(-) > delete mode 100644 sysdeps/aarch64/multiarch/malloc-ifuncs.c > delete mode 100644 sysdeps/aarch64/multiarch/malloc-ifuncs.h > delete mode 100644 sysdeps/generic/malloc-api.h > delete mode 100644 sysdeps/generic/malloc-ifuncs.h > > diff --git a/malloc/malloc-internal.h b/malloc/malloc-internal.h > index 29bc3734c6..a6340bfd88 100644 > --- a/malloc/malloc-internal.h > +++ b/malloc/malloc-internal.h > @@ -24,8 +24,6 @@ > #include <malloc-size.h> > #include <hugepages.h> > #include <calloc-clear-memory.h> > -#include <malloc-api.h> > -#include <malloc-ifuncs.h> > > /* Called in the parent process before a fork. */ > void __malloc_fork_lock_parent (void) attribute_hidden; > diff --git a/malloc/malloc.c b/malloc/malloc.c > index c39d60b509..258f203f1e 100644 > --- a/malloc/malloc.c > +++ b/malloc/malloc.c > @@ -459,10 +459,101 @@ static int extra_mmap_prot = 0; > /* ---------- description of public routines ------------ */ > > #if IS_IN (libc) > +/* > + malloc(size_t n) > + Returns a pointer to a newly allocated chunk of at least n bytes, or null > + if no space is available. Additionally, on failure, errno is > + set to ENOMEM on ANSI C systems. > + > + If n is zero, malloc returns a minimum-sized chunk. (The minimum > + size is 16 bytes on most 32bit systems, and 24 or 32 bytes on 64bit > + systems.) On most systems, size_t is an unsigned type, so calls > + with negative arguments are interpreted as requests for huge amounts > + of space, which will often fail. The maximum supported value of n > + differs across systems, but is in all cases less than the maximum > + representable value of a size_t. > +*/ > +void *__libc_malloc (size_t); > +libc_hidden_proto (__libc_malloc) > > static void *__libc_calloc2 (size_t); > static void *__libc_malloc2 (size_t); > > +/* > + free(void* p) > + Releases the chunk of memory pointed to by p, that had been previously > + allocated using malloc or a related routine such as realloc. > + It has no effect if p is null. It can have arbitrary (i.e., bad!) > + effects if p has already been freed. > + > + Unless disabled (using mallopt), freeing very large spaces will > + when possible, automatically trigger operations that give > + back unused memory to the system, thus reducing program footprint. > +*/ > +void __libc_free(void*); > +libc_hidden_proto (__libc_free) > + > +/* > + calloc(size_t n_elements, size_t element_size); > + Returns a pointer to n_elements * element_size bytes, with all locations > + set to zero. > +*/ > +void* __libc_calloc(size_t, size_t); > + > +/* > + realloc(void* p, size_t n) > + Returns a pointer to a chunk of size n that contains the same data > + as does chunk p up to the minimum of (n, p's size) bytes, or null > + if no space is available. > + > + The returned pointer may or may not be the same as p. The algorithm > + prefers extending p when possible, otherwise it employs the > + equivalent of a malloc-copy-free sequence. > + > + If p is null, realloc is equivalent to malloc. > + > + If space is not available, realloc returns null, errno is set (if on > + ANSI) and p is NOT freed. > + > + if n is for fewer bytes than already held by p, the newly unused > + space is lopped off and freed if possible. Unless the #define > + REALLOC_ZERO_BYTES_FREES is set, realloc with a size argument of > + zero (re)allocates a minimum-sized chunk. > + > + Large chunks that were internally obtained via mmap will always be > + grown using malloc-copy-free sequences unless the system supports > + MREMAP (currently only linux). > + > + The old unix realloc convention of allowing the last-free'd chunk > + to be used as an argument to realloc is not supported. > +*/ > +void* __libc_realloc(void*, size_t); > +libc_hidden_proto (__libc_realloc) > + > +/* > + memalign(size_t alignment, size_t n); > + Returns a pointer to a newly allocated chunk of n bytes, aligned > + in accord with the alignment argument. > + > + The alignment argument should be a power of two. If the argument is > + not a power of two, the nearest greater power is used. > + 8-byte alignment is guaranteed by normal malloc calls, so don't > + bother calling memalign with an argument of 8 or less. > + > + Overreliance on memalign is a sure way to fragment space. > +*/ > +void* __libc_memalign(size_t, size_t); > +libc_hidden_proto (__libc_memalign) > + > +/* > + valloc(size_t n); > + Equivalent to memalign(pagesize, n), where pagesize is the page > + size of the system. If the pagesize is unknown, 4096 is used. > +*/ > +void* __libc_valloc(size_t); > + > + > + > /* > mallinfo() > Returns (by copy) a struct containing various summary statistics: > @@ -487,6 +578,14 @@ libc_hidden_proto (__libc_mallinfo2) > > struct mallinfo __libc_mallinfo(void); > > + > +/* > + pvalloc(size_t n); > + Equivalent to valloc(minimum-page-that-holds(n)), that is, > + round up n to nearest pagesize. > + */ > +void* __libc_pvalloc(size_t); > + > /* > malloc_trim(size_t pad); > > @@ -513,6 +612,23 @@ struct mallinfo __libc_mallinfo(void); > */ > int __malloc_trim(size_t); > > +/* > + malloc_usable_size(void* p); > + > + Returns the number of bytes you can actually use in > + an allocated chunk, which may be more than you requested (although > + often not) due to alignment and minimum size constraints. > + You can use this many bytes without worrying about > + overwriting other allocated objects. This is not a particularly great > + programming practice. malloc_usable_size can be more useful in > + debugging and assertions, for example: > + > + p = malloc(n); > + assert(malloc_usable_size(p) >= 256); > + > +*/ > +size_t __malloc_usable_size(void*); > + > /* > malloc_stats(); > Prints on stderr the amount of space obtained from the system (both > @@ -535,6 +651,12 @@ int __malloc_trim(size_t); > */ > void __malloc_stats(void); > > +/* > + posix_memalign(void **memptr, size_t alignment, size_t size); > + > + POSIX wrapper like memalign(), checking for validity of size. > +*/ > +int __posix_memalign(void **, size_t, size_t); > #endif /* IS_IN (libc) */ > > /* > @@ -3190,8 +3312,10 @@ __libc_memalign (size_t alignment, size_t bytes) > } > libc_hidden_def (__libc_memalign) > > +/* For ISO C17. */ > void * > -__aligned_alloc (size_t alignment, size_t bytes) > +weak_function > +aligned_alloc (size_t alignment, size_t bytes) > { > /* Starting with ISO C17 the standard requires an error for alignments > that are not supported. Only integral powers of 2 are valid. */ > @@ -3203,10 +3327,11 @@ __aligned_alloc (size_t alignment, size_t bytes) > > return _mid_memalign (alignment, bytes); > } > -libc_hidden_def (__aligned_alloc) > > +/* For ISO C23. */ > void > -__free_sized (void *ptr, __attribute_maybe_unused__ size_t size) > +weak_function > +free_sized (void *ptr, __attribute_maybe_unused__ size_t size) > { > /* We do not perform validation that size is the same as the original > requested size at this time. We leave that to the sanitizers. We > @@ -3215,10 +3340,11 @@ __free_sized (void *ptr, __attribute_maybe_unused__ size_t size) > > free (ptr); > } > -libc_hidden_def (__free_sized) > > +/* For ISO C23. */ > void > -__free_aligned_sized (void *ptr, __attribute_maybe_unused__ size_t alignment, > +weak_function > +free_aligned_sized (void *ptr, __attribute_maybe_unused__ size_t alignment, > __attribute_maybe_unused__ size_t size) > { > /* We do not perform validation that size and alignment is the same as > @@ -3228,7 +3354,6 @@ __free_aligned_sized (void *ptr, __attribute_maybe_unused__ size_t alignment, > > free (ptr); > } > -libc_hidden_def (__free_aligned_sized) > > static void * > _mid_memalign (size_t alignment, size_t bytes) > @@ -3277,7 +3402,6 @@ __libc_valloc (size_t bytes) > { > return _mid_memalign (GLRO (dl_pagesize), bytes); > } > -libc_hidden_def (__libc_valloc) > > void * > __libc_pvalloc (size_t bytes) > @@ -3295,7 +3419,6 @@ __libc_pvalloc (size_t bytes) > > return _mid_memalign (pagesize, rounded_bytes & -pagesize); > } > -libc_hidden_def (__libc_pvalloc) > > static void * __attribute_noinline__ > __libc_calloc2 (size_t sz) > @@ -3417,7 +3540,6 @@ __libc_calloc (size_t n, size_t elem_size) > #endif > return __libc_calloc2 (bytes); > } > -libc_hidden_def (__libc_calloc) > #endif /* IS_IN (libc) */ > > /* > @@ -4410,7 +4532,6 @@ __malloc_usable_size (void *m) > return 0; > return musable (m); > } > -libc_hidden_def (__malloc_usable_size) > #endif /* IS_IN (libc) */ > > /* > @@ -4984,7 +5105,6 @@ __posix_memalign (void **memptr, size_t alignment, size_t size) > *memptr = mem; > return 0; > } > -libc_hidden_def (__posix_memalign) > #endif /* IS_IN (libc) */ > > > @@ -5147,9 +5267,6 @@ __malloc_info (int options, FILE *fp) > } > > #if IS_IN (libc) > - > -/* See sysdeps/generic/malloc-ifuncs.h for details. */ > -# if !USE_MULTIARCH_MALLOC > strong_alias (__libc_malloc, malloc) > strong_alias (__libc_realloc, realloc) > strong_alias (__libc_free, free) > @@ -5159,10 +5276,6 @@ weak_alias (__posix_memalign, posix_memalign) > weak_alias (__libc_valloc, valloc) > weak_alias (__libc_pvalloc, pvalloc) > weak_alias (__malloc_usable_size, malloc_usable_size) > -weak_alias (__aligned_alloc, aligned_alloc) > -weak_alias (__free_sized, free_sized) > -weak_alias (__free_aligned_sized, free_aligned_sized) > -#endif /* !USE_MULTIARCH_MALLOC */ > > weak_alias (__malloc_info, malloc_info) > weak_alias (__libc_mallinfo, mallinfo) > @@ -5172,11 +5285,9 @@ weak_alias (__malloc_stats, malloc_stats) > weak_alias (__malloc_trim, malloc_trim) > #endif /* IS_IN (libc) */ > > -#if !USE_MULTIARCH_MALLOC > -# if SHLIB_COMPAT (libc, GLIBC_2_0, GLIBC_2_26) > +#if SHLIB_COMPAT (libc, GLIBC_2_0, GLIBC_2_26) > compat_symbol (libc, __libc_free, cfree, GLIBC_2_0); > -# endif > -#endif /* !USE_MULTIARCH_MALLOC */ > +#endif > > /* ------------------------------------------------------------ > History: > diff --git a/sysdeps/aarch64/multiarch/Makefile b/sysdeps/aarch64/multiarch/Makefile > index a8a03a0491..38952655b1 100644 > --- a/sysdeps/aarch64/multiarch/Makefile > +++ b/sysdeps/aarch64/multiarch/Makefile > @@ -18,11 +18,5 @@ sysdep_routines += \ > memset_zva64 \ > strlen_asimd \ > strlen_generic \ > - # sysdep_routines > -endif # ifeq ($(subdir),string) > - > -ifeq ($(subdir),malloc) > -sysdep_routines += \ > - malloc-ifuncs \ > - # sysdep_routines > -endif # ifeq ($(subdir),malloc) > +# sysdep_routines > +endif > diff --git a/sysdeps/aarch64/multiarch/malloc-ifuncs.c b/sysdeps/aarch64/multiarch/malloc-ifuncs.c > deleted file mode 100644 > index 648fb617de..0000000000 > --- a/sysdeps/aarch64/multiarch/malloc-ifuncs.c > +++ /dev/null > @@ -1,77 +0,0 @@ > -/* Code for ifunc resolvers for malloc: aarch64 version. > - Copyright (C) 2026 Free Software Foundation, Inc. > - This file is part of the GNU C Library. > - > - The GNU C Library is free software; you can redistribute it and/or > - modify it under the terms of the GNU Lesser General Public > - License as published by the Free Software Foundation; either > - version 2.1 of the License, or (at your option) any later version. > - > - The GNU C Library is distributed in the hope that it will be useful, > - but WITHOUT ANY WARRANTY; without even the implied warranty of > - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU > - Lesser General Public License for more details. > - > - You should have received a copy of the GNU Lesser General Public > - License along with the GNU C Library; if not, see > - <https://www.gnu.org/licenses/>. */ > - > -#if IS_IN (libc) > - > -#include <init-arch.h> > -#include <malloc-api.h> > -#include <shlib-compat.h> > - > -libc_ifunc_hidden (__libc_malloc, __libc_malloc_redirect, > - __libc_malloc) > -strong_alias (__libc_malloc_redirect, malloc) > - > -libc_ifunc_hidden (__libc_calloc, __libc_calloc_redirect, > - __libc_calloc) > -weak_alias (__libc_calloc_redirect, calloc) > - > -libc_ifunc_hidden (__libc_memalign, __libc_memalign_redirect, > - __libc_memalign) > -weak_alias (__libc_memalign_redirect, memalign) > - > -libc_ifunc_hidden (__libc_valloc, __libc_valloc_redirect, > - __libc_valloc) > -weak_alias (__libc_valloc_redirect, valloc) > - > -libc_ifunc_hidden (__libc_pvalloc, __libc_pvalloc_redirect, > - __libc_pvalloc) > -weak_alias (__libc_pvalloc_redirect, pvalloc) > - > -libc_ifunc_hidden (__libc_realloc, __libc_realloc_redirect, > - __libc_realloc) > -strong_alias (__libc_realloc_redirect, realloc) > - > -libc_ifunc_hidden (__libc_free, __libc_free_redirect, > - __libc_free) > -strong_alias (__libc_free_redirect, free) > - > -libc_ifunc_hidden (__malloc_usable_size, __malloc_usable_size_redirect, > - __malloc_usable_size) > -weak_alias (__malloc_usable_size_redirect, malloc_usable_size) > - > -libc_ifunc_hidden (__posix_memalign, __posix_memalign_redirect, > - __posix_memalign) > -weak_alias (__posix_memalign_redirect, posix_memalign) > - > -libc_ifunc_hidden (__aligned_alloc, __aligned_alloc_redirect, > - __aligned_alloc) > -weak_alias (__aligned_alloc_redirect, aligned_alloc) > - > -libc_ifunc_hidden (__free_sized, __free_sized_redirect, > - __free_sized) > -weak_alias (__free_sized_redirect, free_sized) > - > -libc_ifunc_hidden (__free_aligned_sized, __free_aligned_sized_redirect, > - __free_aligned_sized) > -weak_alias (__free_aligned_sized_redirect, free_aligned_sized) > - > -#endif /* IS_IN (libc) */ > - > -#if SHLIB_COMPAT (libc, GLIBC_2_0, GLIBC_2_26) > -compat_symbol (libc, __libc_free_redirect, cfree, GLIBC_2_0); > -#endif > diff --git a/sysdeps/aarch64/multiarch/malloc-ifuncs.h b/sysdeps/aarch64/multiarch/malloc-ifuncs.h > deleted file mode 100644 > index 572c2f229e..0000000000 > --- a/sysdeps/aarch64/multiarch/malloc-ifuncs.h > +++ /dev/null > @@ -1,24 +0,0 @@ > -/* Definitions for ifunc resolvers for malloc: aarch64 version. > - Copyright (C) 2026 Free Software Foundation, Inc. > - This file is part of the GNU C Library. > - > - The GNU C Library is free software; you can redistribute it and/or > - modify it under the terms of the GNU Lesser General Public > - License as published by the Free Software Foundation; either > - version 2.1 of the License, or (at your option) any later version. > - > - The GNU C Library is distributed in the hope that it will be useful, > - but WITHOUT ANY WARRANTY; without even the implied warranty of > - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU > - Lesser General Public License for more details. > - > - You should have received a copy of the GNU Lesser General Public > - License along with the GNU C Library; if not, see > - <https://www.gnu.org/licenses/>. */ > - > -#ifndef _AARCH64_MALLOC_IFUNCS_H > -#define _AARCH64_MALLOC_IFUNCS_H > - > -#define USE_MULTIARCH_MALLOC 1 > - > -#endif /* _AARCH64_MALLOC_IFUNCS_H */ > diff --git a/sysdeps/generic/malloc-api.h b/sysdeps/generic/malloc-api.h > deleted file mode 100644 > index 2a243cc4af..0000000000 > --- a/sysdeps/generic/malloc-api.h > +++ /dev/null > @@ -1,161 +0,0 @@ > -/* Malloc API functions. > - Copyright (C) 2026 Free Software Foundation, Inc. > - This file is part of the GNU C Library. > - > - The GNU C Library is free software; you can redistribute it and/or > - modify it under the terms of the GNU Lesser General Public License as > - published by the Free Software Foundation; either version 2.1 of the > - License, or (at your option) any later version. > - > - The GNU C Library is distributed in the hope that it will be useful, > - but WITHOUT ANY WARRANTY; without even the implied warranty of > - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU > - Lesser General Public License for more details. > - > - You should have received a copy of the GNU Lesser General Public > - License along with the GNU C Library; see the file COPYING.LIB. If > - not, see <https://www.gnu.org/licenses/>. */ > - > -#ifndef _MALLOC_API_H > -#define _MALLOC_API_H > - > -#include <stddef.h> > -#include <libc-symbols.h> > - > -/* > - malloc(size_t n) > - Returns a pointer to a newly allocated chunk of at least n bytes, or null > - if no space is available. Additionally, on failure, errno is > - set to ENOMEM on ANSI C systems. > - > - If n is zero, malloc returns a minimum-sized chunk. (The minimum > - size is 16 bytes on most 32bit systems, and 24 or 32 bytes on 64bit > - systems.) On most systems, size_t is an unsigned type, so calls > - with negative arguments are interpreted as requests for huge amounts > - of space, which will often fail. The maximum supported value of n > - differs across systems, but is in all cases less than the maximum > - representable value of a size_t. > -*/ > -void *__libc_malloc (size_t); > -libc_hidden_proto (__libc_malloc) > - > -/* > - calloc(size_t n_elements, size_t element_size); > - Returns a pointer to n_elements * element_size bytes, with all locations > - set to zero. > -*/ > -void *__libc_calloc (size_t, size_t); > -libc_hidden_proto (__libc_calloc) > - > -/* > - memalign(size_t alignment, size_t n); > - Returns a pointer to a newly allocated chunk of n bytes, aligned > - in accord with the alignment argument. > - > - The alignment argument should be a power of two. If the argument is > - not a power of two, the nearest greater power is used. > - 8-byte alignment is guaranteed by normal malloc calls, so don't > - bother calling memalign with an argument of 8 or less. > - > - Overreliance on memalign is a sure way to fragment space. > -*/ > -void *__libc_memalign (size_t, size_t); > -libc_hidden_proto (__libc_memalign) > - > -/* > - valloc(size_t n); > - Equivalent to memalign(pagesize, n), where pagesize is the page > - size of the system. If the pagesize is unknown, 4096 is used. > -*/ > -void *__libc_valloc (size_t); > -libc_hidden_proto (__libc_valloc) > - > -/* > - pvalloc(size_t n); > - Equivalent to valloc(minimum-page-that-holds(n)), that is, > - round up n to nearest pagesize. > - */ > -void *__libc_pvalloc (size_t); > -libc_hidden_proto (__libc_pvalloc) > - > -/* > - realloc(void* p, size_t n) > - Returns a pointer to a chunk of size n that contains the same data > - as does chunk p up to the minimum of (n, p's size) bytes, or null > - if no space is available. > - > - The returned pointer may or may not be the same as p. The algorithm > - prefers extending p when possible, otherwise it employs the > - equivalent of a malloc-copy-free sequence. > - > - If p is null, realloc is equivalent to malloc. > - > - If space is not available, realloc returns null, errno is set (if on > - ANSI) and p is NOT freed. > - > - if n is for fewer bytes than already held by p, the newly unused > - space is lopped off and freed if possible. Unless the #define > - REALLOC_ZERO_BYTES_FREES is set, realloc with a size argument of > - zero (re)allocates a minimum-sized chunk. > - > - Large chunks that were internally obtained via mmap will always be > - grown using malloc-copy-free sequences unless the system supports > - MREMAP (currently only linux). > - > - The old unix realloc convention of allowing the last-free'd chunk > - to be used as an argument to realloc is not supported. > -*/ > -void *__libc_realloc (void *, size_t); > -libc_hidden_proto (__libc_realloc) > - > -/* > - free(void* p) > - Releases the chunk of memory pointed to by p, that had been previously > - allocated using malloc or a related routine such as realloc. > - It has no effect if p is null. It can have arbitrary (i.e., bad!) > - effects if p has already been freed. > - > - Unless disabled (using mallopt), freeing very large spaces will > - when possible, automatically trigger operations that give > - back unused memory to the system, thus reducing program footprint. > -*/ > -void __libc_free (void *); > -libc_hidden_proto (__libc_free) > - > -/* > - malloc_usable_size(void* p); > - > - Returns the number of bytes you can actually use in > - an allocated chunk, which may be more than you requested (although > - often not) due to alignment and minimum size constraints. > - You can use this many bytes without worrying about > - overwriting other allocated objects. This is not a particularly great > - programming practice. malloc_usable_size can be more useful in > - debugging and assertions, for example: > - > - p = malloc(n); > - assert(malloc_usable_size(p) >= 256); > - > -*/ > -size_t __malloc_usable_size (void *); > -libc_hidden_proto (__malloc_usable_size) > - > -/* > - posix_memalign(void **memptr, size_t alignment, size_t size); > - > - POSIX wrapper like memalign(), checking for validity of size. > -*/ > -int __posix_memalign (void **, size_t, size_t); > -libc_hidden_proto (__posix_memalign) > - > -/* For ISO C17. */ > -void *__aligned_alloc (size_t, size_t); > -libc_hidden_proto (__aligned_alloc) > - > -/* For ISO C23. */ > -void __free_sized (void *, size_t); > -libc_hidden_proto (__free_sized) > -void __free_aligned_sized (void *, size_t, size_t); > -libc_hidden_proto (__free_aligned_sized) > - > -#endif /* _MALLOC_API_H */ > diff --git a/sysdeps/generic/malloc-ifuncs.h b/sysdeps/generic/malloc-ifuncs.h > deleted file mode 100644 > index 8fe88af95e..0000000000 > --- a/sysdeps/generic/malloc-ifuncs.h > +++ /dev/null > @@ -1,36 +0,0 @@ > -/* Definitions for ifunc resolvers for malloc: generic version. > - Copyright (C) 2026 Free Software Foundation, Inc. > - This file is part of the GNU C Library. > - > - The GNU C Library is free software; you can redistribute it and/or > - modify it under the terms of the GNU Lesser General Public > - License as published by the Free Software Foundation; either > - version 2.1 of the License, or (at your option) any later version. > - > - The GNU C Library is distributed in the hope that it will be useful, > - but WITHOUT ANY WARRANTY; without even the implied warranty of > - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU > - Lesser General Public License for more details. > - > - You should have received a copy of the GNU Lesser General Public > - License along with the GNU C Library; if not, see > - <https://www.gnu.org/licenses/>. */ > - > -#ifndef _GENERIC_MALLOC_IFUNCS_H > -#define _GENERIC_MALLOC_IFUNCS_H > - > -/* Targets that support GNU ifuncs should define this macro > - if they provide ifuncs for malloc functions. > - > - When USE_MULTIARCH_MALLOC is defined as 1, the following > - functions should be implemented via ifuncs: > - > - malloc, calloc, free, realloc > - memalign, valloc, pvalloc > - posix_memalign > - malloc_usable_size > - aligned_alloc, free_sized, free_aligned_sized > -*/ > -#define USE_MULTIARCH_MALLOC 0 > - > -#endif /* _GENERIC_MALLOC_IFUNCS_H */