aligned_alloc: conform to C17
Subsystems (3)
PATCH v2 1/1 aligned_alloc: conform to C17
Changes from v1:
* Fixed malloc-debug
* alignment of zero is invalid
* fixed ABI tables
References:
https://patchwork.sourceware.org/project/glibc/patch/[email protected]/
https://sourceware.org/bugzilla/show_bug.cgi?id=20137
https://sourceware.org/pipermail/libc-alpha/2023-February/145858.html
The memory.texi portion matches Martin's proposed patch.
man page portion, quoted to avoid CI/CD issues (I can send an official patch separately after the glibc patch is applied):
Quoted 6 lines
man3/posix_memalign.3 +0
-0@@ -91,9 +91,8 @@ The function is the same as
man3/posix_memalign.3 The function · line 98
Quoted 10 lines
man3/posix_memalign.3 +2
-3.BR memalign (), except for the added restriction that -.I size -should be a multiple of -.IR alignment . +.I alignment +must be a power of two. .PP The obsolete function .BR valloc ()
From 86923303acfee3b24ced574917b9340e29843557 Mon Sep 17 00:00:00 2001
From: DJ Delorie <[email protected]>
Date: Thu, 16 Mar 2023 01:33:41 -0400
Subject: aligned_alloc: conform to C17
This patch adds the strict checking for power-of-two alignments in aligned_alloc(), and updates the manual accordingly.
malloc/Versions +3 -0
@@ -67,6 +67,9 @@ libc { GLIBC_2.33 { mallinfo2; } + GLIBC_2.38 { + __libc_aligned_alloc; + } GLIBC_PRIVATE { # Internal startup hook for libpthread. __libc_malloc_pthread_startup;
malloc/malloc-debug.c +21 -9
@@ -268,7 +268,8 @@ __debug_realloc (void *oldmem, size_t bytes) strong_alias (__debug_realloc, realloc)static void * -_debug_mid_memalign (size_t alignment,size_t bytes,const void *address) +_debug_mid_memalign (size_t alignment,size_t bytes,const void *address, +int check_alignment) {void *(*hook) (size_t ,size_t ,const void *) =atomic_forced_read (__memalign_hook);
@@ -281,9 +282,15 @@ _debug_mid_memalign (size_t alignment, size_t bytes, const void *address)if ((!__is_malloc_debug_enabled (MALLOC_MCHECK_HOOK ) || !memalign_mcheck_before (alignment, &bytes, &victim))) { - victim = (__is_malloc_debug_enabled (MALLOC_CHECK_HOOK ) - ?memalign_check (alignment, bytes) - :__libc_memalign (alignment, bytes)); +if (check_alignment && !powerof2 (alignment)) + { +__set_errno (EINVAL ); + victim =NULL ; + } +else + victim = (__is_malloc_debug_enabled (MALLOC_CHECK_HOOK ) + ?memalign_check (alignment, bytes) + :__libc_memalign (alignment, bytes)); }if (__is_malloc_debug_enabled (MALLOC_MCHECK_HOOK ) && victim !=NULL ) victim =memalign_mcheck_after (victim, alignment, orig_bytes);
@@ -296,10 +303,15 @@ _debug_mid_memalign (size_t alignment, size_t bytes, const void *address)static void *__debug_memalign (size_t alignment,size_t bytes) { -return _debug_mid_memalign (alignment, bytes,RETURN_ADDRESS (0 )); +return _debug_mid_memalign (alignment, bytes,RETURN_ADDRESS (0 ),0 ); } strong_alias (__debug_memalign, memalign) -strong_alias (__debug_memalign, aligned_alloc) +static void * +__debug_aligned_alloc (size_t alignment,size_t bytes) +{ +return _debug_mid_memalign (alignment, bytes,RETURN_ADDRESS (0 ),1 ); +} +strong_alias (__debug_aligned_alloc, aligned_alloc)static void *__debug_pvalloc (size_t bytes)
@@ -319,7 +331,7 @@ __debug_pvalloc (size_t bytes) } rounded_bytes = rounded_bytes & -(pagesize -1 ); -return _debug_mid_memalign (pagesize, rounded_bytes,RETURN_ADDRESS (0 )); +return _debug_mid_memalign (pagesize, rounded_bytes,RETURN_ADDRESS (0 ),0 ); }strong_alias (__debug_pvalloc, pvalloc)
@@ -329,7 +341,7 @@ __debug_valloc (size_t bytes)if (!pagesize) pagesize =sysconf (_SC_PAGESIZE); -return _debug_mid_memalign (pagesize, bytes,RETURN_ADDRESS (0 )); +return _debug_mid_memalign (pagesize, bytes,RETURN_ADDRESS (0 ),0 ); }strong_alias (__debug_valloc, valloc)
@@ -343,7 +355,7 @@ __debug_posix_memalign (void **memptr, size_t alignment, size_t bytes) || alignment == 0)return EINVAL ; - *memptr =_debug_mid_memalign (alignment, bytes,RETURN_ADDRESS (0 )); + *memptr =_debug_mid_memalign (alignment, bytes,RETURN_ADDRESS (0 ),0 );if (*memptr ==NULL )return ENOMEM ;
malloc/malloc.c +25 -3
@@ -656,6 +656,9 @@ libc_hidden_proto (__libc_realloc)void *__libc_memalign (size_t ,size_t );libc_hidden_proto (__libc_memalign) +void * __libc_aligned_alloc (size_t alignment, size_t bytes); +libc_hidden_proto (__libc_aligned_alloc) +/* valloc(size_t n); Equivalent to memalign(pagesize, n), where pagesize is the page
@@ -3509,6 +3512,27 @@ __libc_memalign (size_t alignment, size_t bytes)void *address =RETURN_ADDRESS (0 );return _mid_memalign (alignment, bytes, address); } +libc_hidden_def (__libc_memalign) + +/* For ISO C11. */ +void * +__libc_aligned_alloc (size_t alignment,size_t bytes) +{ +if (!__malloc_initialized) +ptmalloc_init (); + +/* Similar to memalign, but ISO C17 requires an error for invalid +alignments. Valid alignments are non-negative powers of two. */ +if (!powerof2 (alignment) || alignment ==0 ) + { +__set_errno (EINVAL ); +return 0 ; + } + +void *address =RETURN_ADDRESS (0 ); +return _mid_memalign (alignment, bytes, address); +} +libc_hidden_def (__libc_aligned_alloc) static void *_mid_memalign (size_t alignment,size_t bytes,void *address)
@@ -3567,9 +3591,6 @@ _mid_memalign (size_t alignment, size_t bytes, void *address) ar_ptr == arena_for_chunk (mem2chunk (p)));return tag_new_usable (p); } -/* For ISO C11. */ -weak_alias (__libc_memalign, aligned_alloc) -libc_hidden_def (__libc_memalign)void *__libc_valloc (size_t bytes)
@@ -5903,6 +5924,7 @@ weak_alias (__libc_mallinfo, mallinfo) strong_alias (__libc_mallinfo2, __mallinfo2) weak_alias (__libc_mallinfo2, mallinfo2) strong_alias (__libc_mallopt, __mallopt) weak_alias (__libc_mallopt, mallopt) +weak_alias (__libc_aligned_alloc, aligned_alloc) weak_alias (__malloc_stats, malloc_stats) weak_alias (__malloc_usable_size, malloc_usable_size)
manual/memory.texi +1 -1
@@ -995,7 +995,7 @@ power of two than that, use @code{aligned_alloc} or @code{posix_memalign}. @c Alias to memalign. The @code{aligned_alloc} function allocates a block of @var{size} bytes whose address is a multiple of @var{alignment}. The @var{alignment} must be a -power of two and @var{size} must be a multiple of @var{alignment}. +power of two. The @code{aligned_alloc} function returns a null pointer on error and sets @code{errno} to one of the following values:
sysdeps/generic/libc.abilist +1 -0
@@ -1 +1,2 @@ GLIBC_2.36 pidfd_getfd F +GLIBC_2.38 __libc_aligned_alloc F
sysdeps/mach/hurd/i386/libc.abilist +1 -0
@@ -2326,6 +2326,7 @@ GLIBC_2.38 __isoc23_wcstoull F GLIBC_2.38 __isoc23_wcstoull_l F GLIBC_2.38 __isoc23_wcstoumax F GLIBC_2.38 __isoc23_wscanf F +GLIBC_2.38 __libc_aligned_alloc F GLIBC_2.4 __confstr_chk F GLIBC_2.4 __fgets_chk F GLIBC_2.4 __fgets_unlocked_chk F
sysdeps/unix/sysv/linux/aarch64/libc.abilist +1 -0
@@ -2665,3 +2665,4 @@ GLIBC_2.38 __isoc23_wcstoull F GLIBC_2.38 __isoc23_wcstoull_l F GLIBC_2.38 __isoc23_wcstoumax F GLIBC_2.38 __isoc23_wscanf F +GLIBC_2.38 __libc_aligned_alloc F
sysdeps/unix/sysv/linux/alpha/libc.abilist +1 -0
@@ -2762,6 +2762,7 @@ GLIBC_2.38 __isoc23_wcstoull F GLIBC_2.38 __isoc23_wcstoull_l F GLIBC_2.38 __isoc23_wcstoumax F GLIBC_2.38 __isoc23_wscanf F +GLIBC_2.38 __libc_aligned_alloc F GLIBC_2.38 __nldbl___isoc23_fscanf F GLIBC_2.38 __nldbl___isoc23_fwscanf F GLIBC_2.38 __nldbl___isoc23_scanf F
sysdeps/unix/sysv/linux/arc/libc.abilist +1 -0
@@ -2426,3 +2426,4 @@ GLIBC_2.38 __isoc23_wcstoull F GLIBC_2.38 __isoc23_wcstoull_l F GLIBC_2.38 __isoc23_wcstoumax F GLIBC_2.38 __isoc23_wscanf F +GLIBC_2.38 __libc_aligned_alloc F
sysdeps/unix/sysv/linux/arm/be/libc.abilist +1 -0
@@ -546,6 +546,7 @@ GLIBC_2.38 __isoc23_wcstoull F GLIBC_2.38 __isoc23_wcstoull_l F GLIBC_2.38 __isoc23_wcstoumax F GLIBC_2.38 __isoc23_wscanf F +GLIBC_2.38 __libc_aligned_alloc F GLIBC_2.4 _Exit F GLIBC_2.4 _IO_2_1_stderr_ D 0xa0 GLIBC_2.4 _IO_2_1_stdin_ D 0xa0
sysdeps/unix/sysv/linux/arm/le/libc.abilist +1 -0
@@ -543,6 +543,7 @@ GLIBC_2.38 __isoc23_wcstoull F GLIBC_2.38 __isoc23_wcstoull_l F GLIBC_2.38 __isoc23_wcstoumax F GLIBC_2.38 __isoc23_wscanf F +GLIBC_2.38 __libc_aligned_alloc F GLIBC_2.4 _Exit F GLIBC_2.4 _IO_2_1_stderr_ D 0xa0 GLIBC_2.4 _IO_2_1_stdin_ D 0xa0
sysdeps/unix/sysv/linux/csky/libc.abilist +1 -0
@@ -2702,3 +2702,4 @@ GLIBC_2.38 __isoc23_wcstoull F GLIBC_2.38 __isoc23_wcstoull_l F GLIBC_2.38 __isoc23_wcstoumax F GLIBC_2.38 __isoc23_wscanf F +GLIBC_2.38 __libc_aligned_alloc F
sysdeps/unix/sysv/linux/hppa/libc.abilist +1 -0
@@ -2651,6 +2651,7 @@ GLIBC_2.38 __isoc23_wcstoull F GLIBC_2.38 __isoc23_wcstoull_l F GLIBC_2.38 __isoc23_wcstoumax F GLIBC_2.38 __isoc23_wscanf F +GLIBC_2.38 __libc_aligned_alloc F GLIBC_2.4 __confstr_chk F GLIBC_2.4 __fgets_chk F GLIBC_2.4 __fgets_unlocked_chk F
sysdeps/unix/sysv/linux/i386/libc.abilist +1 -0
@@ -2835,6 +2835,7 @@ GLIBC_2.38 __isoc23_wcstoull F GLIBC_2.38 __isoc23_wcstoull_l F GLIBC_2.38 __isoc23_wcstoumax F GLIBC_2.38 __isoc23_wscanf F +GLIBC_2.38 __libc_aligned_alloc F GLIBC_2.4 __confstr_chk F GLIBC_2.4 __fgets_chk F GLIBC_2.4 __fgets_unlocked_chk F
sysdeps/unix/sysv/linux/ia64/libc.abilist +1 -0
@@ -2600,6 +2600,7 @@ GLIBC_2.38 __isoc23_wcstoull F GLIBC_2.38 __isoc23_wcstoull_l F GLIBC_2.38 __isoc23_wcstoumax F GLIBC_2.38 __isoc23_wscanf F +GLIBC_2.38 __libc_aligned_alloc F GLIBC_2.4 __confstr_chk F GLIBC_2.4 __fgets_chk F GLIBC_2.4 __fgets_unlocked_chk F
sysdeps/unix/sysv/linux/loongarch/lp64/libc.abilist +1 -0
@@ -2186,3 +2186,4 @@ GLIBC_2.38 __isoc23_wcstoull F GLIBC_2.38 __isoc23_wcstoull_l F GLIBC_2.38 __isoc23_wcstoumax F GLIBC_2.38 __isoc23_wscanf F +GLIBC_2.38 __libc_aligned_alloc F
sysdeps/unix/sysv/linux/m68k/coldfire/libc.abilist +1 -0
@@ -547,6 +547,7 @@ GLIBC_2.38 __isoc23_wcstoull F GLIBC_2.38 __isoc23_wcstoull_l F GLIBC_2.38 __isoc23_wcstoumax F GLIBC_2.38 __isoc23_wscanf F +GLIBC_2.38 __libc_aligned_alloc F GLIBC_2.4 _Exit F GLIBC_2.4 _IO_2_1_stderr_ D 0x98 GLIBC_2.4 _IO_2_1_stdin_ D 0x98
sysdeps/unix/sysv/linux/m68k/m680x0/libc.abilist +1 -0
@@ -2778,6 +2778,7 @@ GLIBC_2.38 __isoc23_wcstoull F GLIBC_2.38 __isoc23_wcstoull_l F GLIBC_2.38 __isoc23_wcstoumax F GLIBC_2.38 __isoc23_wscanf F +GLIBC_2.38 __libc_aligned_alloc F GLIBC_2.4 __confstr_chk F GLIBC_2.4 __fgets_chk F GLIBC_2.4 __fgets_unlocked_chk F
sysdeps/unix/sysv/linux/microblaze/be/libc.abilist +1 -0
@@ -2751,3 +2751,4 @@ GLIBC_2.38 __isoc23_wcstoull F GLIBC_2.38 __isoc23_wcstoull_l F GLIBC_2.38 __isoc23_wcstoumax F GLIBC_2.38 __isoc23_wscanf F +GLIBC_2.38 __libc_aligned_alloc F
sysdeps/unix/sysv/linux/microblaze/le/libc.abilist +1 -0
@@ -2748,3 +2748,4 @@ GLIBC_2.38 __isoc23_wcstoull F GLIBC_2.38 __isoc23_wcstoull_l F GLIBC_2.38 __isoc23_wcstoumax F GLIBC_2.38 __isoc23_wscanf F +GLIBC_2.38 __libc_aligned_alloc F
sysdeps/unix/sysv/linux/mips/mips32/fpu/libc.abilist +1 -0
@@ -2743,6 +2743,7 @@ GLIBC_2.38 __isoc23_wcstoull F GLIBC_2.38 __isoc23_wcstoull_l F GLIBC_2.38 __isoc23_wcstoumax F GLIBC_2.38 __isoc23_wscanf F +GLIBC_2.38 __libc_aligned_alloc F GLIBC_2.4 __confstr_chk F GLIBC_2.4 __fgets_chk F GLIBC_2.4 __fgets_unlocked_chk F
sysdeps/unix/sysv/linux/mips/mips32/nofpu/libc.abilist +1 -0
@@ -2741,6 +2741,7 @@ GLIBC_2.38 __isoc23_wcstoull F GLIBC_2.38 __isoc23_wcstoull_l F GLIBC_2.38 __isoc23_wcstoumax F GLIBC_2.38 __isoc23_wscanf F +GLIBC_2.38 __libc_aligned_alloc F GLIBC_2.4 __confstr_chk F GLIBC_2.4 __fgets_chk F GLIBC_2.4 __fgets_unlocked_chk F
sysdeps/unix/sysv/linux/mips/mips64/n32/libc.abilist +1 -0
@@ -2749,6 +2749,7 @@ GLIBC_2.38 __isoc23_wcstoull F GLIBC_2.38 __isoc23_wcstoull_l F GLIBC_2.38 __isoc23_wcstoumax F GLIBC_2.38 __isoc23_wscanf F +GLIBC_2.38 __libc_aligned_alloc F GLIBC_2.4 __confstr_chk F GLIBC_2.4 __fgets_chk F GLIBC_2.4 __fgets_unlocked_chk F
sysdeps/unix/sysv/linux/mips/mips64/n64/libc.abilist +1 -0
@@ -2651,6 +2651,7 @@ GLIBC_2.38 __isoc23_wcstoull F GLIBC_2.38 __isoc23_wcstoull_l F GLIBC_2.38 __isoc23_wcstoumax F GLIBC_2.38 __isoc23_wscanf F +GLIBC_2.38 __libc_aligned_alloc F GLIBC_2.4 __confstr_chk F GLIBC_2.4 __fgets_chk F GLIBC_2.4 __fgets_unlocked_chk F
sysdeps/unix/sysv/linux/nios2/libc.abilist +1 -0
@@ -2790,3 +2790,4 @@ GLIBC_2.38 __isoc23_wcstoull F GLIBC_2.38 __isoc23_wcstoull_l F GLIBC_2.38 __isoc23_wcstoumax F GLIBC_2.38 __isoc23_wscanf F +GLIBC_2.38 __libc_aligned_alloc F
sysdeps/unix/sysv/linux/or1k/libc.abilist +1 -0
@@ -2172,3 +2172,4 @@ GLIBC_2.38 __isoc23_wcstoull F GLIBC_2.38 __isoc23_wcstoull_l F GLIBC_2.38 __isoc23_wcstoumax F GLIBC_2.38 __isoc23_wscanf F +GLIBC_2.38 __libc_aligned_alloc F
sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/libc.abilist +1 -0
@@ -2805,6 +2805,7 @@ GLIBC_2.38 __isoc23_wcstoull F GLIBC_2.38 __isoc23_wcstoull_l F GLIBC_2.38 __isoc23_wcstoumax F GLIBC_2.38 __isoc23_wscanf F +GLIBC_2.38 __libc_aligned_alloc F GLIBC_2.38 __nldbl___isoc23_fscanf F GLIBC_2.38 __nldbl___isoc23_fwscanf F GLIBC_2.38 __nldbl___isoc23_scanf F
sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/libc.abilist +1 -0
@@ -2838,6 +2838,7 @@ GLIBC_2.38 __isoc23_wcstoull F GLIBC_2.38 __isoc23_wcstoull_l F GLIBC_2.38 __isoc23_wcstoumax F GLIBC_2.38 __isoc23_wscanf F +GLIBC_2.38 __libc_aligned_alloc F GLIBC_2.38 __nldbl___isoc23_fscanf F GLIBC_2.38 __nldbl___isoc23_fwscanf F GLIBC_2.38 __nldbl___isoc23_scanf F
sysdeps/unix/sysv/linux/powerpc/powerpc64/be/libc.abilist +1 -0
@@ -2559,6 +2559,7 @@ GLIBC_2.38 __isoc23_wcstoull F GLIBC_2.38 __isoc23_wcstoull_l F GLIBC_2.38 __isoc23_wcstoumax F GLIBC_2.38 __isoc23_wscanf F +GLIBC_2.38 __libc_aligned_alloc F GLIBC_2.38 __nldbl___isoc23_fscanf F GLIBC_2.38 __nldbl___isoc23_fwscanf F GLIBC_2.38 __nldbl___isoc23_scanf F
sysdeps/unix/sysv/linux/powerpc/powerpc64/le/libc.abilist +1 -0
@@ -2873,6 +2873,7 @@ GLIBC_2.38 __isoc23_wcstoull_l F GLIBC_2.38 __isoc23_wcstoumax F GLIBC_2.38 __isoc23_wscanf F GLIBC_2.38 __isoc23_wscanfieee128 F +GLIBC_2.38 __libc_aligned_alloc F GLIBC_2.38 __nldbl___isoc23_fscanf F GLIBC_2.38 __nldbl___isoc23_fwscanf F GLIBC_2.38 __nldbl___isoc23_scanf F
sysdeps/unix/sysv/linux/riscv/rv32/libc.abilist +1 -0
@@ -2428,3 +2428,4 @@ GLIBC_2.38 __isoc23_wcstoull F GLIBC_2.38 __isoc23_wcstoull_l F GLIBC_2.38 __isoc23_wcstoumax F GLIBC_2.38 __isoc23_wscanf F +GLIBC_2.38 __libc_aligned_alloc F
sysdeps/unix/sysv/linux/riscv/rv64/libc.abilist +1 -0
@@ -2628,3 +2628,4 @@ GLIBC_2.38 __isoc23_wcstoull F GLIBC_2.38 __isoc23_wcstoull_l F GLIBC_2.38 __isoc23_wcstoumax F GLIBC_2.38 __isoc23_wscanf F +GLIBC_2.38 __libc_aligned_alloc F
sysdeps/unix/sysv/linux/s390/s390-32/libc.abilist +1 -0
@@ -2803,6 +2803,7 @@ GLIBC_2.38 __isoc23_wcstoull F GLIBC_2.38 __isoc23_wcstoull_l F GLIBC_2.38 __isoc23_wcstoumax F GLIBC_2.38 __isoc23_wscanf F +GLIBC_2.38 __libc_aligned_alloc F GLIBC_2.38 __nldbl___isoc23_fscanf F GLIBC_2.38 __nldbl___isoc23_fwscanf F GLIBC_2.38 __nldbl___isoc23_scanf F
sysdeps/unix/sysv/linux/s390/s390-64/libc.abilist +1 -0
@@ -2596,6 +2596,7 @@ GLIBC_2.38 __isoc23_wcstoull F GLIBC_2.38 __isoc23_wcstoull_l F GLIBC_2.38 __isoc23_wcstoumax F GLIBC_2.38 __isoc23_wscanf F +GLIBC_2.38 __libc_aligned_alloc F GLIBC_2.38 __nldbl___isoc23_fscanf F GLIBC_2.38 __nldbl___isoc23_fwscanf F GLIBC_2.38 __nldbl___isoc23_scanf F
sysdeps/unix/sysv/linux/sh/be/libc.abilist +1 -0
@@ -2658,6 +2658,7 @@ GLIBC_2.38 __isoc23_wcstoull F GLIBC_2.38 __isoc23_wcstoull_l F GLIBC_2.38 __isoc23_wcstoumax F GLIBC_2.38 __isoc23_wscanf F +GLIBC_2.38 __libc_aligned_alloc F GLIBC_2.4 __confstr_chk F GLIBC_2.4 __fgets_chk F GLIBC_2.4 __fgets_unlocked_chk F
sysdeps/unix/sysv/linux/sh/le/libc.abilist +1 -0
@@ -2655,6 +2655,7 @@ GLIBC_2.38 __isoc23_wcstoull F GLIBC_2.38 __isoc23_wcstoull_l F GLIBC_2.38 __isoc23_wcstoumax F GLIBC_2.38 __isoc23_wscanf F +GLIBC_2.38 __libc_aligned_alloc F GLIBC_2.4 __confstr_chk F GLIBC_2.4 __fgets_chk F GLIBC_2.4 __fgets_unlocked_chk F
sysdeps/unix/sysv/linux/sparc/sparc32/libc.abilist +1 -0
@@ -2798,6 +2798,7 @@ GLIBC_2.38 __isoc23_wcstoull F GLIBC_2.38 __isoc23_wcstoull_l F GLIBC_2.38 __isoc23_wcstoumax F GLIBC_2.38 __isoc23_wscanf F +GLIBC_2.38 __libc_aligned_alloc F GLIBC_2.38 __nldbl___isoc23_fscanf F GLIBC_2.38 __nldbl___isoc23_fwscanf F GLIBC_2.38 __nldbl___isoc23_scanf F
sysdeps/unix/sysv/linux/sparc/sparc64/libc.abilist +1 -0
@@ -2623,6 +2623,7 @@ GLIBC_2.38 __isoc23_wcstoull F GLIBC_2.38 __isoc23_wcstoull_l F GLIBC_2.38 __isoc23_wcstoumax F GLIBC_2.38 __isoc23_wscanf F +GLIBC_2.38 __libc_aligned_alloc F GLIBC_2.4 __confstr_chk F GLIBC_2.4 __fgets_chk F GLIBC_2.4 __fgets_unlocked_chk F
sysdeps/unix/sysv/linux/x86_64/64/libc.abilist +1 -0
@@ -2574,6 +2574,7 @@ GLIBC_2.38 __isoc23_wcstoull F GLIBC_2.38 __isoc23_wcstoull_l F GLIBC_2.38 __isoc23_wcstoumax F GLIBC_2.38 __isoc23_wscanf F +GLIBC_2.38 __libc_aligned_alloc F GLIBC_2.4 __confstr_chk F GLIBC_2.4 __fgets_chk F GLIBC_2.4 __fgets_unlocked_chk F
sysdeps/unix/sysv/linux/x86_64/x32/libc.abilist +1 -0
@@ -2680,3 +2680,4 @@ GLIBC_2.38 __isoc23_wcstoull F GLIBC_2.38 __isoc23_wcstoull_l F GLIBC_2.38 __isoc23_wcstoumax F GLIBC_2.38 __isoc23_wscanf F +GLIBC_2.38 __libc_aligned_alloc F
Hi DJ
Quoted 11 lines · DJ Delorie via Libc-alpha
Changes from v1:
* Fixed malloc-debug
* alignment of zero is invalid
* fixed ABI tablesReferences:
https://patchwork.sourceware.org/project/glibc/patch/[email protected]/
https://sourceware.org/bugzilla/show_bug.cgi?id=20137
https://sourceware.org/pipermail/libc-alpha/2023-February/145858.html
Quoted 4 lines
The memory.texi portion matches Martin's proposed patch.
man page portion, quoted to avoid CI/CD issues (I can send an official patch separately after the glibc patch is applied):
Please :) Thanks!
BTW, I guess C11 was equivalent to C17 in this regard, or was this changed in C17?
Cheers,
Alex
Quoted 17 lines
Quoted 17 lines
man3/posix_memalign.3 +2
-3@@ -91,9 +91,8 @@ The function is the same as .BR memalign (), except for the added restriction that -.I size -should be a multiple of -.IR alignment . +.I alignment +must be a power of two. .PP The obsolete function .BR valloc ()
Quoted 2 lines · Alejandro Colomar
BTW, I guess C11 was equivalent to C17 in this regard, or was this changed in C17?
C17 seems to be a "bugfix" for C11. In this case, one of the requirements for aligned_alloc() in C11 was, well, silly. It was removed in C17.
Quoted 7 lines · DJ Delorie
Quoted 2 lines · Alejandro Colomar
BTW, I guess C11 was equivalent to C17 in this regard, or was this changed in C17?
C17 seems to be a "bugfix" for C11. In this case, one of the requirements for
aligned_alloc()in C11 was, well, silly. It was removed in C17.
Ahh nice, I knew C17 was a bugfix, but never really knew any of the bugs it fixed. Now I know one. :)
And yet it seems that the wording is still a bit buggy with that "nonnegative integral power of two" thingy. :p
Cheers,
Alex
Signature · 2 lines
<http://www.alejandro-colomar.es/> GPG key fingerprint: A9348594CE31283A826FBDD8D57633D441E25BB5