[{"id":3681188,"web_url":"http://patchwork.ozlabs.org/comment/3681188/","msgid":"<aekinurc3ld1IA9g@devuan>","list_archive_url":null,"date":"2026-04-22T19:34:21","subject":"Re: [PATCH 0/3] Add [v]aprintf(3)","submitter":{"id":86795,"url":"http://patchwork.ozlabs.org/api/people/86795/","name":"Alejandro Colomar","email":"alx@kernel.org"},"content":"> Subject: Re: [PATCH 0/3] Add [v]aprintf(3)\n\nI forgot to include v5 in the subject.  :)\n\nOn 2026-04-22T20:37:51+0200, Alejandro Colomar wrote:\n> Hi!\n> \n> Sorry for the delay; Easter and other stuff got in the way.\n> \n> In v5:\n> \n> -  I've updated .abilist files, and the remaining Versions files under\n>    sysdeps/.\n> -  I've also added tests for the _chk implementations.\n> -  And fixed some incorrect brace in a Versions file.\n> -  While writing the tests for the _chk versions, I realized a typo in\n>    existing code, so I've fixed it in patch 3/3.\n> \n> I've tested this with make && make check.  That seems to pass.\n> \n> \t$ diff -u ../.tmp.master/tests.sum tests.sum \n> \t--- ../.tmp.master/tests.sum\t2026-04-22 20:31:29.671899499 +0200\n> \t+++ tests.sum\t2026-04-22 18:51:34.647754287 +0200\n> \t@@ -1936,6 +1936,7 @@\n> \t PASS: libio/test-fputs-unbuffered-full\n> \t PASS: libio/test-fputws-unbuffered-full\n> \t PASS: libio/test-freopen\n> \t+PASS: libio/tst-aprintf\n> \t PASS: libio/tst-asprintf-null\n> \t PASS: libio/tst-atime\n> \t PASS: libio/tst-bz22415\n> \n> If there's anything else I'd need to test please let me know (and how).\n> \n> See range-diff below for the exact changes compared to v4.  I think this\n> is ready (thus, now PATCH instead of RFC).\n> \n> \n> Have a lovely day!\n> Alex\n> \n> \n> Alejandro Colomar (3):\n>   Add [v]aprintf(3)\n>   manual/: Prefer aprintf(3) over asprintf(3)\n>   sysdeps/ieee754/ldbl-128ibm-compat/test-printf-chk-ldbl-compat.c: Fix\n>     typo\n> \n>  debug/Makefile                                |  4 ++\n>  debug/Versions                                |  3 +\n>  debug/aprintf_chk.c                           | 51 ++++++++++++++++\n>  debug/vaprintf_chk.c                          | 39 ++++++++++++\n>  include/stdio.h                               |  8 +++\n>  libio/Makefile                                |  4 +-\n>  libio/Versions                                |  3 +\n>  libio/bits/stdio-ldbl.h                       |  5 ++\n>  libio/bits/stdio2-decl.h                      |  8 +++\n>  libio/bits/stdio2.h                           | 42 +++++++++++++\n>  libio/stdio.h                                 | 13 ++++\n>  libio/tst-aprintf.c                           | 57 ++++++++++++++++++\n>  libio/vaprintf.c                              | 39 ++++++++++++\n>  manual/examples/rprintf.c                     |  4 +-\n>  manual/stdio.texi                             | 30 +++++++++-\n>  manual/string.texi                            |  2 +-\n>  stdio-common/Makefile                         |  2 +\n>  stdio-common/Versions                         |  3 +\n>  stdio-common/aprintf.c                        | 40 +++++++++++++\n>  sysdeps/ieee754/ldbl-128ibm-compat/Makefile   |  8 ++-\n>  sysdeps/ieee754/ldbl-128ibm-compat/Versions   |  6 ++\n>  .../ldbl-128ibm-compat/ieee128-aprintf.c      | 36 +++++++++++\n>  .../ldbl-128ibm-compat/ieee128-aprintf_chk.c  | 40 +++++++++++++\n>  .../ldbl-128ibm-compat/ieee128-vaprintf.c     | 29 +++++++++\n>  .../ldbl-128ibm-compat/ieee128-vaprintf_chk.c | 31 ++++++++++\n>  .../test-printf-chk-ldbl-compat.c             | 33 ++++++++++-\n>  .../test-printf-ldbl-compat.c                 | 31 +++++++++-\n>  sysdeps/ieee754/ldbl-opt/Makefile             |  6 ++\n>  sysdeps/ieee754/ldbl-opt/Versions             | 10 ++++\n>  sysdeps/ieee754/ldbl-opt/nldbl-aprintf.c      | 17 ++++++\n>  sysdeps/ieee754/ldbl-opt/nldbl-aprintf_chk.c  | 15 +++++\n>  sysdeps/ieee754/ldbl-opt/nldbl-compat.c       | 59 +++++++++++++++++++\n>  sysdeps/ieee754/ldbl-opt/nldbl-compat.h       |  5 ++\n>  sysdeps/ieee754/ldbl-opt/nldbl-vaprintf.c     |  9 +++\n>  sysdeps/ieee754/ldbl-opt/nldbl-vaprintf_chk.c |  8 +++\n>  sysdeps/mach/hurd/i386/libc.abilist           |  5 ++\n>  sysdeps/mach/hurd/x86_64/libc.abilist         |  5 ++\n>  sysdeps/unix/sysv/linux/aarch64/libc.abilist  |  5 ++\n>  sysdeps/unix/sysv/linux/alpha/libc.abilist    |  5 ++\n>  sysdeps/unix/sysv/linux/arc/libc.abilist      |  5 ++\n>  sysdeps/unix/sysv/linux/arm/be/libc.abilist   |  5 ++\n>  sysdeps/unix/sysv/linux/arm/le/libc.abilist   |  5 ++\n>  sysdeps/unix/sysv/linux/csky/libc.abilist     |  5 ++\n>  sysdeps/unix/sysv/linux/hppa/libc.abilist     |  5 ++\n>  sysdeps/unix/sysv/linux/i386/libc.abilist     |  5 ++\n>  .../sysv/linux/loongarch/lp64/libc.abilist    |  5 ++\n>  .../sysv/linux/m68k/coldfire/libc.abilist     |  5 ++\n>  .../unix/sysv/linux/m68k/m680x0/libc.abilist  |  5 ++\n>  .../sysv/linux/microblaze/be/libc.abilist     |  5 ++\n>  .../sysv/linux/microblaze/le/libc.abilist     |  5 ++\n>  .../sysv/linux/mips/mips32/fpu/libc.abilist   |  5 ++\n>  .../sysv/linux/mips/mips32/nofpu/libc.abilist |  5 ++\n>  .../sysv/linux/mips/mips64/n32/libc.abilist   |  5 ++\n>  .../sysv/linux/mips/mips64/n64/libc.abilist   |  5 ++\n>  sysdeps/unix/sysv/linux/or1k/libc.abilist     |  5 ++\n>  .../linux/powerpc/powerpc32/fpu/libc.abilist  |  5 ++\n>  .../powerpc/powerpc32/nofpu/libc.abilist      |  5 ++\n>  .../linux/powerpc/powerpc64/be/libc.abilist   |  5 ++\n>  .../linux/powerpc/powerpc64/le/libc.abilist   |  5 ++\n>  .../unix/sysv/linux/riscv/rv32/libc.abilist   |  5 ++\n>  .../unix/sysv/linux/riscv/rv64/libc.abilist   |  5 ++\n>  .../unix/sysv/linux/s390/s390-32/libc.abilist |  5 ++\n>  .../unix/sysv/linux/s390/s390-64/libc.abilist |  5 ++\n>  sysdeps/unix/sysv/linux/sh/be/libc.abilist    |  5 ++\n>  sysdeps/unix/sysv/linux/sh/le/libc.abilist    |  5 ++\n>  .../sysv/linux/sparc/sparc32/libc.abilist     |  5 ++\n>  .../sysv/linux/sparc/sparc64/libc.abilist     |  5 ++\n>  .../unix/sysv/linux/x86_64/64/libc.abilist    |  5 ++\n>  .../unix/sysv/linux/x86_64/x32/libc.abilist   |  5 ++\n>  69 files changed, 858 insertions(+), 12 deletions(-)\n>  create mode 100644 debug/aprintf_chk.c\n>  create mode 100644 debug/vaprintf_chk.c\n>  create mode 100644 libio/tst-aprintf.c\n>  create mode 100644 libio/vaprintf.c\n>  create mode 100644 stdio-common/aprintf.c\n>  create mode 100644 sysdeps/ieee754/ldbl-128ibm-compat/ieee128-aprintf.c\n>  create mode 100644 sysdeps/ieee754/ldbl-128ibm-compat/ieee128-aprintf_chk.c\n>  create mode 100644 sysdeps/ieee754/ldbl-128ibm-compat/ieee128-vaprintf.c\n>  create mode 100644 sysdeps/ieee754/ldbl-128ibm-compat/ieee128-vaprintf_chk.c\n>  create mode 100644 sysdeps/ieee754/ldbl-opt/nldbl-aprintf.c\n>  create mode 100644 sysdeps/ieee754/ldbl-opt/nldbl-aprintf_chk.c\n>  create mode 100644 sysdeps/ieee754/ldbl-opt/nldbl-vaprintf.c\n>  create mode 100644 sysdeps/ieee754/ldbl-opt/nldbl-vaprintf_chk.c\n> \n> Range-diff:\n> 1:  f927e1d9 ! 1:  4c17f2c5 Add [v]aprintf(3)\n>     @@ stdio-common/Makefile: routines := \\\n>      \n>       ## stdio-common/Versions ##\n>      @@ stdio-common/Versions: libc {\n>     -     __isoc23_vfscanf;\n>           __isoc23_sscanf;\n>           __isoc23_vsscanf;\n>     +   }\n>      +  GLIBC_2.44 {\n>      +    aprintf;\n>     -   }\n>     ++  }\n>         GLIBC_PRIVATE {\n>           # global variables\n>     +     _itoa_lower_digits;\n>      \n>       ## stdio-common/aprintf.c (new) ##\n>      @@\n>     @@ sysdeps/ieee754/ldbl-128ibm-compat/Makefile: routines_no_fortify += \\\n>         ieee128-vdprintf \\\n>         ieee128-vfprintf \\\n>      \n>     + ## sysdeps/ieee754/ldbl-128ibm-compat/Versions ##\n>     +@@ sysdeps/ieee754/ldbl-128ibm-compat/Versions: libc {\n>     +     __isoc23_vswscanfieee128;\n>     +     __isoc23_vwscanfieee128;\n>     +   }\n>     ++  GLIBC_2.44 {\n>     ++    __aprintfieee128;\n>     ++    __vaprintfieee128;\n>     ++    __aprintf_chkieee128;\n>     ++    __vaprintf_chkieee128;\n>     ++  }\n>     + }\n>     +\n>       ## sysdeps/ieee754/ldbl-128ibm-compat/ieee128-aprintf.c (new) ##\n>      @@\n>      +/* Wrapper for aprintf.  IEEE128 version.\n>     @@ sysdeps/ieee754/ldbl-128ibm-compat/ieee128-vaprintf_chk.c (new)\n>      +}\n>      +strong_alias (___ieee128___vaprintf_chk, __vaprintf_chkieee128)\n>      \n>     + ## sysdeps/ieee754/ldbl-128ibm-compat/test-printf-chk-ldbl-compat.c ##\n>     +@@\n>     + static void\n>     + do_test_call_varg (FILE *stream, const char *format, ...)\n>     + {\n>     +-  char *buffer = NULL;\n>     ++  char *buffer;\n>     +   char string[128];\n>     +   int res;\n>     +   va_list args;\n>     + \n>     ++  printf (\"%20s\", \"__vaprintf_chk: \");\n>     ++  va_start (args, format);\n>     ++  buffer = __vaprintf_chk (1, format, args);\n>     ++  va_end (args);\n>     ++  if (buffer == NULL)\n>     ++    printf (\"Error using vaprintf\\n\");\n>     ++  else\n>     ++    printf (\"%s\", buffer);\n>     ++  free (buffer);\n>     ++  printf (\"\\n\");\n>     ++\n>     +   printf (\"%20s\", \"__vasprintf_chk: \");\n>     ++  buffer = NULL;\n>     +   va_start (args, format);\n>     +   res = __vasprintf_chk (&buffer, 1, format, args);\n>     +   va_end (args);\n>     +@@ sysdeps/ieee754/ldbl-128ibm-compat/test-printf-chk-ldbl-compat.c: static void\n>     + do_test_call_rarg (FILE *stream, const char *format, long double ld,\n>     + \t\t   double d)\n>     + {\n>     +-  char *buffer = NULL;\n>     ++  char *buffer;\n>     +   char string[128];\n>     +   int res;\n>     + \n>     ++  printf (\"%20s\", \"__aprintf_chk: \");\n>     ++  buffer = __aprintf_chk (1, format, ld, d);\n>     ++  if (buffer == NULL)\n>     ++    printf (\"Error using aprintf\\n\");\n>     ++  else\n>     ++    printf (\"%s\", buffer);\n>     ++  free (buffer);\n>     ++  printf (\"\\n\");\n>     ++\n>     +   printf (\"%20s\", \"__asprintf_chk: \");\n>     ++  buffer = NULL;\n>     +   res = __asprintf_chk (&buffer, 1, format, ld, d);\n>     +   if (res == -1)\n>     +     printf (\"Error using vasprintf\\n\");\n>     +@@ sysdeps/ieee754/ldbl-128ibm-compat/test-printf-chk-ldbl-compat.c: do_test (void)\n>     + \n>     +   /* Compare against the expected output.  */\n>     +   const char *expected =\n>     ++    \"     __aprintf_chk: -1.0000000000, -1.0000000000\\n\"\n>     +     \"    __asprintf_chk: -1.0000000000, -1.0000000000\\n\"\n>     +     \"     __dprintf_chk: -1.0000000000, -1.0000000000\\n\"\n>     +     \"     __fprintf_chk: -1.0000000000, -1.0000000000\\n\"\n>     +     \"      __printf_chk: -1.0000000000, -1.0000000000\\n\"\n>     +     \"    __snprintf_chk: -1.0000000000, -1.0000000000\\n\"\n>     +     \"     __sprintf_chk: -1.0000000000, -1.0000000000\\n\"\n>     ++    \"    __vaprintf_chk: -1.0000000000, -1.0000000000\\n\"\n>     +     \"   __vasprintf_chk: -1.0000000000, -1.0000000000\\n\"\n>     +     \"    __vdprintf_chk: -1.0000000000, -1.0000000000\\n\"\n>     +     \"    __vfprintf_chk: -1.0000000000, -1.0000000000\\n\"\n>     +     \"     __vprintf_chk: -1.0000000000, -1.0000000000\\n\"\n>     +     \"   __vsnprintf_chk: -1.0000000000, -1.0000000000\\n\"\n>     +     \"    __vsprintf_chk: -1.0000000000, -1.0000000000\\n\"\n>     ++    \"     __aprintf_chk: -0x1.0000000000p+0, -0x1.0000000000p+0\\n\"\n>     +     \"    __asprintf_chk: -0x1.0000000000p+0, -0x1.0000000000p+0\\n\"\n>     +     \"     __dprintf_chk: -0x1.0000000000p+0, -0x1.0000000000p+0\\n\"\n>     +     \"     __fprintf_chk: -0x1.0000000000p+0, -0x1.0000000000p+0\\n\"\n>     +     \"      __printf_chk: -0x1.0000000000p+0, -0x1.0000000000p+0\\n\"\n>     +     \"    __snprintf_chk: -0x1.0000000000p+0, -0x1.0000000000p+0\\n\"\n>     +     \"     __sprintf_chk: -0x1.0000000000p+0, -0x1.0000000000p+0\\n\"\n>     ++    \"    __vaprintf_chk: -0x1.0000000000p+0, -0x1.0000000000p+0\\n\"\n>     +     \"   __vasprintf_chk: -0x1.0000000000p+0, -0x1.0000000000p+0\\n\"\n>     +     \"    __vdprintf_chk: -0x1.0000000000p+0, -0x1.0000000000p+0\\n\"\n>     +     \"    __vfprintf_chk: -0x1.0000000000p+0, -0x1.0000000000p+0\\n\"\n>     +     \"     __vprintf_chk: -0x1.0000000000p+0, -0x1.0000000000p+0\\n\"\n>     +     \"   __vsnprintf_chk: -0x1.0000000000p+0, -0x1.0000000000p+0\\n\"\n>     +     \"    __vsprintf_chk: -0x1.0000000000p+0, -0x1.0000000000p+0\\n\"\n>     ++    \"    __vaprintf_chk: 3.000000, 2.000000, 1.000000\\n\"\n>     +     \"   __vasprintf_chk: 3.000000, 2.000000, 1.000000\\n\"\n>     +     \"    __vdprintf_chk: 3.000000, 2.000000, 1.000000\\n\"\n>     +     \"    __vfprintf_chk: 3.000000, 2.000000, 1.000000\\n\"\n>     +\n>     + ## sysdeps/ieee754/ldbl-128ibm-compat/test-printf-ldbl-compat.c ##\n>     +@@\n>     + static void\n>     + do_test_call_varg (FILE *stream, const char *format, ...)\n>     + {\n>     +-  char *buffer = NULL;\n>     ++  char *buffer;\n>     +   char string[128];\n>     +   va_list args;\n>     +   int ret;\n>     + \n>     ++  printf (\"%15s\", \"vaprintf: \");\n>     ++  va_start (args, format);\n>     ++  buffer = vaprintf (format, args);\n>     ++  va_end (args);\n>     ++  if (buffer == NULL)\n>     ++    printf (\"Error using vaprintf\\n\");\n>     ++  else\n>     ++    printf (\"%s\", buffer);\n>     ++  free (buffer);\n>     ++  printf (\"\\n\");\n>     ++\n>     +   printf (\"%15s\", \"vasprintf: \");\n>     ++  buffer = NULL;\n>     +   va_start (args, format);\n>     +   ret = vasprintf (&buffer, format, args);\n>     +   va_end (args);\n>     +@@ sysdeps/ieee754/ldbl-128ibm-compat/test-printf-ldbl-compat.c: do_test_call_varg (FILE *stream, const char *format, ...)\n>     + static void\n>     + do_test_call_rarg (FILE *stream, const char *format, long double ld, double d)\n>     + {\n>     +-  char *buffer = NULL;\n>     ++  char *buffer;\n>     +   char string[128];\n>     +   int ret;\n>     + \n>     ++  printf (\"%15s\", \"aprintf: \");\n>     ++  buffer = aprintf (format, ld, d);\n>     ++  if (buffer == NULL)\n>     ++    printf (\"Error using aprintf\\n\");\n>     ++  else\n>     ++    printf (\"%s\", buffer);\n>     ++  free (buffer);\n>     ++  printf (\"\\n\");\n>     ++\n>     +   printf (\"%15s\", \"asprintf: \");\n>     ++  buffer = NULL;\n>     +   ret = asprintf (&buffer, format, ld, d);\n>     +   if (ret == -1 || buffer == NULL)\n>     +     printf (\"Error using asprintf\\n\");\n>     +@@ sysdeps/ieee754/ldbl-128ibm-compat/test-printf-ldbl-compat.c: do_test (void)\n>     + \n>     +   /* Compare against the expected output.  */\n>     +   const char *expected =\n>     ++    \"      aprintf: -1.0000000000, -1.0000000000\\n\"\n>     +     \"     asprintf: -1.0000000000, -1.0000000000\\n\"\n>     +     \"      dprintf: -1.0000000000, -1.0000000000\\n\"\n>     +     \"      fprintf: -1.0000000000, -1.0000000000\\n\"\n>     +     \"       printf: -1.0000000000, -1.0000000000\\n\"\n>     +     \"     snprintf: -1.0000000000, -1.0000000000\\n\"\n>     +     \"      sprintf: -1.0000000000, -1.0000000000\\n\"\n>     ++    \"     vaprintf: -1.0000000000, -1.0000000000\\n\"\n>     +     \"    vasprintf: -1.0000000000, -1.0000000000\\n\"\n>     +     \"     vdprintf: -1.0000000000, -1.0000000000\\n\"\n>     +     \"     vfprintf: -1.0000000000, -1.0000000000\\n\"\n>     +     \"      vprintf: -1.0000000000, -1.0000000000\\n\"\n>     +     \"    vsnprintf: -1.0000000000, -1.0000000000\\n\"\n>     +     \"     vsprintf: -1.0000000000, -1.0000000000\\n\"\n>     ++    \"      aprintf: -0x1.0000000000p+0, -0x1.0000000000p+0\\n\"\n>     +     \"     asprintf: -0x1.0000000000p+0, -0x1.0000000000p+0\\n\"\n>     +     \"      dprintf: -0x1.0000000000p+0, -0x1.0000000000p+0\\n\"\n>     +     \"      fprintf: -0x1.0000000000p+0, -0x1.0000000000p+0\\n\"\n>     +     \"       printf: -0x1.0000000000p+0, -0x1.0000000000p+0\\n\"\n>     +     \"     snprintf: -0x1.0000000000p+0, -0x1.0000000000p+0\\n\"\n>     +     \"      sprintf: -0x1.0000000000p+0, -0x1.0000000000p+0\\n\"\n>     ++    \"     vaprintf: -0x1.0000000000p+0, -0x1.0000000000p+0\\n\"\n>     +     \"    vasprintf: -0x1.0000000000p+0, -0x1.0000000000p+0\\n\"\n>     +     \"     vdprintf: -0x1.0000000000p+0, -0x1.0000000000p+0\\n\"\n>     +     \"     vfprintf: -0x1.0000000000p+0, -0x1.0000000000p+0\\n\"\n>     +     \"      vprintf: -0x1.0000000000p+0, -0x1.0000000000p+0\\n\"\n>     +     \"    vsnprintf: -0x1.0000000000p+0, -0x1.0000000000p+0\\n\"\n>     +     \"     vsprintf: -0x1.0000000000p+0, -0x1.0000000000p+0\\n\"\n>     ++    \"     vaprintf: 3.000000, 2.000000, 1.000000\\n\"\n>     +     \"    vasprintf: 3.000000, 2.000000, 1.000000\\n\"\n>     +     \"     vdprintf: 3.000000, 2.000000, 1.000000\\n\"\n>     +     \"     vfprintf: 3.000000, 2.000000, 1.000000\\n\"\n>     +\n>       ## sysdeps/ieee754/ldbl-opt/Makefile ##\n>      @@ sysdeps/ieee754/ldbl-opt/Makefile: libnldbl-calls = \\\n>         acos \\\n>     @@ sysdeps/ieee754/ldbl-opt/Makefile: routines_no_fortify += \\\n>         nldbl-vdprintf \\\n>         nldbl-vfprintf \\\n>      \n>     + ## sysdeps/ieee754/ldbl-opt/Versions ##\n>     +@@ sysdeps/ieee754/ldbl-opt/Versions: libc {\n>     +     __nldbl___isoc23_vfwscanf;\n>     +     __nldbl___isoc23_vswscanf;\n>     +   }\n>     ++  GLIBC_2.44 {\n>     ++    __aprintf;\n>     ++    aprintf;\n>     ++    vaprintf;\n>     ++    __nldbl___aprintf;\n>     ++    __nldbl_aprintf;\n>     ++    __nldbl_vaprintf;\n>     ++    __nldbl___aprintf_chk;\n>     ++    __nldbl___vaprintf_chk;\n>     ++  }\n>     + }\n>     + libm {\n>     +   NLDBL_VERSION {\n>     +\n>       ## sysdeps/ieee754/ldbl-opt/nldbl-aprintf.c (new) ##\n>      @@\n>      +#include \"nldbl-compat.h\"\n>     @@ sysdeps/ieee754/ldbl-opt/nldbl-aprintf_chk.c (new)\n>      +  return p;\n>      +}\n>      \n>     + ## sysdeps/ieee754/ldbl-opt/nldbl-compat.c ##\n>     +@@ sysdeps/ieee754/ldbl-opt/nldbl-compat.c: libc_hidden_proto (__nldbl___isoc23_vfwscanf)\n>     +    we don't need to split this into one file per function for the\n>     +    sake of statically linked programs.  */\n>     + \n>     ++int\n>     ++attribute_compat_text_section\n>     ++__nldbl___aprintf (const char *fmt, ...)\n>     ++{\n>     ++  va_list ap;\n>     ++  char *p;\n>     ++\n>     ++  va_start (ap, fmt);\n>     ++  if (__vasprintf_internal (&p, fmt, ap, PRINTF_LDBL_IS_DBL) < 0)\n>     ++    p = NULL;\n>     ++  va_end (ap);\n>     ++\n>     ++  return p;\n>     ++}\n>     ++weak_alias (__nldbl___aprintf, __nldbl_aprintf)\n>     ++\n>     + int\n>     + attribute_compat_text_section\n>     + __nldbl___asprintf (char **string_ptr, const char *fmt, ...)\n>     +@@ sysdeps/ieee754/ldbl-opt/nldbl-compat.c: __nldbl_swprintf (wchar_t *s, size_t n, const wchar_t *fmt, ...)\n>     +   return ret;\n>     + }\n>     + \n>     ++char *\n>     ++attribute_compat_text_section weak_function\n>     ++__nldbl_vaprintf (const char *fmt, va_list ap)\n>     ++{\n>     ++  char *p;\n>     ++  return __vasprintf_internal (&p, fmt, ap, PRINTF_LDBL_IS_DBL) < 0 ? NULL : p;\n>     ++}\n>     ++\n>     + int\n>     + attribute_compat_text_section weak_function\n>     + __nldbl_vasprintf (char **result_ptr, const char *fmt, va_list ap)\n>     +@@ sysdeps/ieee754/ldbl-opt/nldbl-compat.c: __nldbl___wprintf_chk (int flag, const wchar_t *fmt, ...)\n>     +   return ret;\n>     + }\n>     + \n>     ++char *\n>     ++attribute_compat_text_section\n>     ++__nldbl___vaprintf_chk (int flag, const char *fmt, va_list ap)\n>     ++{\n>     ++  char *p;\n>     ++  unsigned int mode = PRINTF_LDBL_IS_DBL;\n>     ++  if (flag > 0)\n>     ++    mode |= PRINTF_FORTIFY;\n>     ++\n>     ++  return __vasprintf_internal (&p, fmt, ap, mode) < 0 ? NULL : p;\n>     ++}\n>     ++\n>     ++char *\n>     ++attribute_compat_text_section\n>     ++__nldbl___aprintf_chk (int flag, const char *fmt, ...)\n>     ++{\n>     ++  va_list ap;\n>     ++  char *p;\n>     ++  unsigned int mode = PRINTF_LDBL_IS_DBL;\n>     ++  if (flag > 0)\n>     ++    mode |= PRINTF_FORTIFY;\n>     ++\n>     ++  va_start (ap, fmt);\n>     ++  if (__vasprintf_internal (&p, fmt, ap, mode) < 0)\n>     ++    p = NULL;\n>     ++  va_end (ap);\n>     ++\n>     ++  return p;\n>     ++}\n>     ++\n>     + int\n>     + attribute_compat_text_section\n>     + __nldbl___vasprintf_chk (char **ptr, int flag, const char *fmt, va_list ap)\n>     +@@ sysdeps/ieee754/ldbl-opt/nldbl-compat.c: compat_symbol (libc, __nldbl___fprintf_chk, __fprintf_chk, GLIBC_2_3_4);\n>     + compat_symbol (libc, __nldbl___vprintf_chk, __vprintf_chk, GLIBC_2_3_4);\n>     + compat_symbol (libc, __nldbl___vfprintf_chk, __vfprintf_chk, GLIBC_2_3_4);\n>     + #endif\n>     ++#if LONG_DOUBLE_COMPAT(libc, GLIBC_2_4_4)\n>     ++compat_symbol (libc, __nldbl_aprintf, aprintf, GLIBC_2_4_4);\n>     ++compat_symbol (libc, __nldbl_vaprintf, vaprintf, GLIBC_2_4_4);\n>     ++compat_symbol (libc, __nldbl___aprintf, __aprintf, GLIBC_2_4_4);\n>     ++#endif\n>     +\n>     + ## sysdeps/ieee754/ldbl-opt/nldbl-compat.h ##\n>     +@@ sysdeps/ieee754/ldbl-opt/nldbl-compat.h: NLDBL_DECL (_IO_vfscanf);\n>     + NLDBL_DECL (vfscanf);\n>     + NLDBL_DECL (vfwscanf);\n>     + NLDBL_DECL (obstack_vprintf);\n>     ++NLDBL_DECL (vaprintf);\n>     + NLDBL_DECL (vasprintf);\n>     + NLDBL_DECL (dprintf);\n>     + NLDBL_DECL (vdprintf);\n>     +@@ sysdeps/ieee754/ldbl-opt/nldbl-compat.h: NLDBL_DECL (vsprintf);\n>     + NLDBL_DECL (vsscanf);\n>     + NLDBL_DECL (vswprintf);\n>     + NLDBL_DECL (vswscanf);\n>     ++NLDBL_DECL (__aprintf);\n>     ++NLDBL_DECL (aprintf);\n>     + NLDBL_DECL (__asprintf);\n>     + NLDBL_DECL (asprintf);\n>     + NLDBL_DECL (__printf_fp);\n>     +@@ sysdeps/ieee754/ldbl-opt/nldbl-compat.h: extern int __nldbl___vsnprintf_chk (char *__restrict, size_t, int, size_t,\n>     + extern int __nldbl___vswprintf_chk (wchar_t *__restrict, size_t, int, size_t,\n>     + \t\t\t\t    const wchar_t *__restrict, __gnuc_va_list)\n>     +   __THROW;\n>     ++extern char *__nldbl___vaprintf_chk (int, const char *, __gnuc_va_list)\n>     ++  __THROW __attribute_malloc__;\n>     + extern int __nldbl___vasprintf_chk (char **, int, const char *, __gnuc_va_list)\n>     +   __THROW;\n>     + extern int __nldbl___vdprintf_chk (int, int, const char *, __gnuc_va_list);\n>     +\n>       ## sysdeps/ieee754/ldbl-opt/nldbl-vaprintf.c (new) ##\n>      @@\n>      +#include \"nldbl-compat.h\"\n>     @@ sysdeps/ieee754/ldbl-opt/nldbl-vaprintf_chk.c (new)\n>      +{\n>      +  return __nldbl___vaprintf_chk (flag, fmt, ap);\n>      +}\n>     +\n>     + ## sysdeps/mach/hurd/i386/libc.abilist ##\n>     +@@ sysdeps/mach/hurd/i386/libc.abilist: GLIBC_2.43 tss_delete F\n>     + GLIBC_2.43 tss_get F\n>     + GLIBC_2.43 tss_set F\n>     + GLIBC_2.43 umaxabs F\n>     ++GLIBC_2.44 __aprintf F\n>     ++GLIBC_2.44 __aprintf_chk F\n>     ++GLIBC_2.44 __vaprintf_chk F\n>     ++GLIBC_2.44 aprintf F\n>     ++GLIBC_2.44 vaprintf F\n>     + GLIBC_2.5 __readlinkat_chk F\n>     + GLIBC_2.5 inet6_opt_append F\n>     + GLIBC_2.5 inet6_opt_find F\n>     +\n>     + ## sysdeps/mach/hurd/x86_64/libc.abilist ##\n>     +@@ sysdeps/mach/hurd/x86_64/libc.abilist: GLIBC_2.43 tss_delete F\n>     + GLIBC_2.43 tss_get F\n>     + GLIBC_2.43 tss_set F\n>     + GLIBC_2.43 umaxabs F\n>     ++GLIBC_2.44 __aprintf F\n>     ++GLIBC_2.44 __aprintf_chk F\n>     ++GLIBC_2.44 __vaprintf_chk F\n>     ++GLIBC_2.44 aprintf F\n>     ++GLIBC_2.44 vaprintf F\n>     + HURD_CTHREADS_0.3 __mutex_init F\n>     + HURD_CTHREADS_0.3 __mutex_lock F\n>     + HURD_CTHREADS_0.3 __mutex_trylock F\n>     +\n>     + ## sysdeps/unix/sysv/linux/aarch64/libc.abilist ##\n>     +@@ sysdeps/unix/sysv/linux/aarch64/libc.abilist: GLIBC_2.43 memset_explicit F\n>     + GLIBC_2.43 mseal F\n>     + GLIBC_2.43 openat2 F\n>     + GLIBC_2.43 umaxabs F\n>     ++GLIBC_2.44 __aprintf F\n>     ++GLIBC_2.44 __aprintf_chk F\n>     ++GLIBC_2.44 __vaprintf_chk F\n>     ++GLIBC_2.44 aprintf F\n>     ++GLIBC_2.44 vaprintf F\n>     +\n>     + ## sysdeps/unix/sysv/linux/alpha/libc.abilist ##\n>     +@@ sysdeps/unix/sysv/linux/alpha/libc.abilist: GLIBC_2.43 memset_explicit F\n>     + GLIBC_2.43 mseal F\n>     + GLIBC_2.43 openat2 F\n>     + GLIBC_2.43 umaxabs F\n>     ++GLIBC_2.44 __aprintf F\n>     ++GLIBC_2.44 __aprintf_chk F\n>     ++GLIBC_2.44 __vaprintf_chk F\n>     ++GLIBC_2.44 aprintf F\n>     ++GLIBC_2.44 vaprintf F\n>     + GLIBC_2.5 __readlinkat_chk F\n>     + GLIBC_2.5 inet6_opt_append F\n>     + GLIBC_2.5 inet6_opt_find F\n>     +\n>     + ## sysdeps/unix/sysv/linux/arc/libc.abilist ##\n>     +@@ sysdeps/unix/sysv/linux/arc/libc.abilist: GLIBC_2.43 memset_explicit F\n>     + GLIBC_2.43 mseal F\n>     + GLIBC_2.43 openat2 F\n>     + GLIBC_2.43 umaxabs F\n>     ++GLIBC_2.44 __aprintf F\n>     ++GLIBC_2.44 __aprintf_chk F\n>     ++GLIBC_2.44 __vaprintf_chk F\n>     ++GLIBC_2.44 aprintf F\n>     ++GLIBC_2.44 vaprintf F\n>     +\n>     + ## sysdeps/unix/sysv/linux/arm/be/libc.abilist ##\n>     +@@ sysdeps/unix/sysv/linux/arm/be/libc.abilist: GLIBC_2.43 memset_explicit F\n>     + GLIBC_2.43 mseal F\n>     + GLIBC_2.43 openat2 F\n>     + GLIBC_2.43 umaxabs F\n>     ++GLIBC_2.44 __aprintf F\n>     ++GLIBC_2.44 __aprintf_chk F\n>     ++GLIBC_2.44 __vaprintf_chk F\n>     ++GLIBC_2.44 aprintf F\n>     ++GLIBC_2.44 vaprintf F\n>     + GLIBC_2.5 __readlinkat_chk F\n>     + GLIBC_2.5 inet6_opt_append F\n>     + GLIBC_2.5 inet6_opt_find F\n>     +\n>     + ## sysdeps/unix/sysv/linux/arm/le/libc.abilist ##\n>     +@@ sysdeps/unix/sysv/linux/arm/le/libc.abilist: GLIBC_2.43 memset_explicit F\n>     + GLIBC_2.43 mseal F\n>     + GLIBC_2.43 openat2 F\n>     + GLIBC_2.43 umaxabs F\n>     ++GLIBC_2.44 __aprintf F\n>     ++GLIBC_2.44 __aprintf_chk F\n>     ++GLIBC_2.44 __vaprintf_chk F\n>     ++GLIBC_2.44 aprintf F\n>     ++GLIBC_2.44 vaprintf F\n>     + GLIBC_2.5 __readlinkat_chk F\n>     + GLIBC_2.5 inet6_opt_append F\n>     + GLIBC_2.5 inet6_opt_find F\n>     +\n>     + ## sysdeps/unix/sysv/linux/csky/libc.abilist ##\n>     +@@ sysdeps/unix/sysv/linux/csky/libc.abilist: GLIBC_2.43 memset_explicit F\n>     + GLIBC_2.43 mseal F\n>     + GLIBC_2.43 openat2 F\n>     + GLIBC_2.43 umaxabs F\n>     ++GLIBC_2.44 __aprintf F\n>     ++GLIBC_2.44 __aprintf_chk F\n>     ++GLIBC_2.44 __vaprintf_chk F\n>     ++GLIBC_2.44 aprintf F\n>     ++GLIBC_2.44 vaprintf F\n>     +\n>     + ## sysdeps/unix/sysv/linux/hppa/libc.abilist ##\n>     +@@ sysdeps/unix/sysv/linux/hppa/libc.abilist: GLIBC_2.43 memset_explicit F\n>     + GLIBC_2.43 mseal F\n>     + GLIBC_2.43 openat2 F\n>     + GLIBC_2.43 umaxabs F\n>     ++GLIBC_2.44 __aprintf F\n>     ++GLIBC_2.44 __aprintf_chk F\n>     ++GLIBC_2.44 __vaprintf_chk F\n>     ++GLIBC_2.44 aprintf F\n>     ++GLIBC_2.44 vaprintf F\n>     + GLIBC_2.5 __readlinkat_chk F\n>     + GLIBC_2.5 inet6_opt_append F\n>     + GLIBC_2.5 inet6_opt_find F\n>     +\n>     + ## sysdeps/unix/sysv/linux/i386/libc.abilist ##\n>     +@@ sysdeps/unix/sysv/linux/i386/libc.abilist: GLIBC_2.43 memset_explicit F\n>     + GLIBC_2.43 mseal F\n>     + GLIBC_2.43 openat2 F\n>     + GLIBC_2.43 umaxabs F\n>     ++GLIBC_2.44 __aprintf F\n>     ++GLIBC_2.44 __aprintf_chk F\n>     ++GLIBC_2.44 __vaprintf_chk F\n>     ++GLIBC_2.44 aprintf F\n>     ++GLIBC_2.44 vaprintf F\n>     + GLIBC_2.5 __readlinkat_chk F\n>     + GLIBC_2.5 inet6_opt_append F\n>     + GLIBC_2.5 inet6_opt_find F\n>     +\n>     + ## sysdeps/unix/sysv/linux/loongarch/lp64/libc.abilist ##\n>     +@@ sysdeps/unix/sysv/linux/loongarch/lp64/libc.abilist: GLIBC_2.43 memset_explicit F\n>     + GLIBC_2.43 mseal F\n>     + GLIBC_2.43 openat2 F\n>     + GLIBC_2.43 umaxabs F\n>     ++GLIBC_2.44 __aprintf F\n>     ++GLIBC_2.44 __aprintf_chk F\n>     ++GLIBC_2.44 __vaprintf_chk F\n>     ++GLIBC_2.44 aprintf F\n>     ++GLIBC_2.44 vaprintf F\n>     +\n>     + ## sysdeps/unix/sysv/linux/m68k/coldfire/libc.abilist ##\n>     +@@ sysdeps/unix/sysv/linux/m68k/coldfire/libc.abilist: GLIBC_2.43 memset_explicit F\n>     + GLIBC_2.43 mseal F\n>     + GLIBC_2.43 openat2 F\n>     + GLIBC_2.43 umaxabs F\n>     ++GLIBC_2.44 __aprintf F\n>     ++GLIBC_2.44 __aprintf_chk F\n>     ++GLIBC_2.44 __vaprintf_chk F\n>     ++GLIBC_2.44 aprintf F\n>     ++GLIBC_2.44 vaprintf F\n>     + GLIBC_2.5 __readlinkat_chk F\n>     + GLIBC_2.5 inet6_opt_append F\n>     + GLIBC_2.5 inet6_opt_find F\n>     +\n>     + ## sysdeps/unix/sysv/linux/m68k/m680x0/libc.abilist ##\n>     +@@ sysdeps/unix/sysv/linux/m68k/m680x0/libc.abilist: GLIBC_2.43 memset_explicit F\n>     + GLIBC_2.43 mseal F\n>     + GLIBC_2.43 openat2 F\n>     + GLIBC_2.43 umaxabs F\n>     ++GLIBC_2.44 __aprintf F\n>     ++GLIBC_2.44 __aprintf_chk F\n>     ++GLIBC_2.44 __vaprintf_chk F\n>     ++GLIBC_2.44 aprintf F\n>     ++GLIBC_2.44 vaprintf F\n>     + GLIBC_2.5 __readlinkat_chk F\n>     + GLIBC_2.5 inet6_opt_append F\n>     + GLIBC_2.5 inet6_opt_find F\n>     +\n>     + ## sysdeps/unix/sysv/linux/microblaze/be/libc.abilist ##\n>     +@@ sysdeps/unix/sysv/linux/microblaze/be/libc.abilist: GLIBC_2.43 memset_explicit F\n>     + GLIBC_2.43 mseal F\n>     + GLIBC_2.43 openat2 F\n>     + GLIBC_2.43 umaxabs F\n>     ++GLIBC_2.44 __aprintf F\n>     ++GLIBC_2.44 __aprintf_chk F\n>     ++GLIBC_2.44 __vaprintf_chk F\n>     ++GLIBC_2.44 aprintf F\n>     ++GLIBC_2.44 vaprintf F\n>     +\n>     + ## sysdeps/unix/sysv/linux/microblaze/le/libc.abilist ##\n>     +@@ sysdeps/unix/sysv/linux/microblaze/le/libc.abilist: GLIBC_2.43 memset_explicit F\n>     + GLIBC_2.43 mseal F\n>     + GLIBC_2.43 openat2 F\n>     + GLIBC_2.43 umaxabs F\n>     ++GLIBC_2.44 __aprintf F\n>     ++GLIBC_2.44 __aprintf_chk F\n>     ++GLIBC_2.44 __vaprintf_chk F\n>     ++GLIBC_2.44 aprintf F\n>     ++GLIBC_2.44 vaprintf F\n>     +\n>     + ## sysdeps/unix/sysv/linux/mips/mips32/fpu/libc.abilist ##\n>     +@@ sysdeps/unix/sysv/linux/mips/mips32/fpu/libc.abilist: GLIBC_2.43 memset_explicit F\n>     + GLIBC_2.43 mseal F\n>     + GLIBC_2.43 openat2 F\n>     + GLIBC_2.43 umaxabs F\n>     ++GLIBC_2.44 __aprintf F\n>     ++GLIBC_2.44 __aprintf_chk F\n>     ++GLIBC_2.44 __vaprintf_chk F\n>     ++GLIBC_2.44 aprintf F\n>     ++GLIBC_2.44 vaprintf F\n>     + GLIBC_2.5 __readlinkat_chk F\n>     + GLIBC_2.5 inet6_opt_append F\n>     + GLIBC_2.5 inet6_opt_find F\n>     +\n>     + ## sysdeps/unix/sysv/linux/mips/mips32/nofpu/libc.abilist ##\n>     +@@ sysdeps/unix/sysv/linux/mips/mips32/nofpu/libc.abilist: GLIBC_2.43 memset_explicit F\n>     + GLIBC_2.43 mseal F\n>     + GLIBC_2.43 openat2 F\n>     + GLIBC_2.43 umaxabs F\n>     ++GLIBC_2.44 __aprintf F\n>     ++GLIBC_2.44 __aprintf_chk F\n>     ++GLIBC_2.44 __vaprintf_chk F\n>     ++GLIBC_2.44 aprintf F\n>     ++GLIBC_2.44 vaprintf F\n>     + GLIBC_2.5 __readlinkat_chk F\n>     + GLIBC_2.5 inet6_opt_append F\n>     + GLIBC_2.5 inet6_opt_find F\n>     +\n>     + ## sysdeps/unix/sysv/linux/mips/mips64/n32/libc.abilist ##\n>     +@@ sysdeps/unix/sysv/linux/mips/mips64/n32/libc.abilist: GLIBC_2.43 memset_explicit F\n>     + GLIBC_2.43 mseal F\n>     + GLIBC_2.43 openat2 F\n>     + GLIBC_2.43 umaxabs F\n>     ++GLIBC_2.44 __aprintf F\n>     ++GLIBC_2.44 __aprintf_chk F\n>     ++GLIBC_2.44 __vaprintf_chk F\n>     ++GLIBC_2.44 aprintf F\n>     ++GLIBC_2.44 vaprintf F\n>     + GLIBC_2.5 __readlinkat_chk F\n>     + GLIBC_2.5 inet6_opt_append F\n>     + GLIBC_2.5 inet6_opt_find F\n>     +\n>     + ## sysdeps/unix/sysv/linux/mips/mips64/n64/libc.abilist ##\n>     +@@ sysdeps/unix/sysv/linux/mips/mips64/n64/libc.abilist: GLIBC_2.43 memset_explicit F\n>     + GLIBC_2.43 mseal F\n>     + GLIBC_2.43 openat2 F\n>     + GLIBC_2.43 umaxabs F\n>     ++GLIBC_2.44 __aprintf F\n>     ++GLIBC_2.44 __aprintf_chk F\n>     ++GLIBC_2.44 __vaprintf_chk F\n>     ++GLIBC_2.44 aprintf F\n>     ++GLIBC_2.44 vaprintf F\n>     + GLIBC_2.5 __readlinkat_chk F\n>     + GLIBC_2.5 inet6_opt_append F\n>     + GLIBC_2.5 inet6_opt_find F\n>     +\n>     + ## sysdeps/unix/sysv/linux/or1k/libc.abilist ##\n>     +@@ sysdeps/unix/sysv/linux/or1k/libc.abilist: GLIBC_2.43 memset_explicit F\n>     + GLIBC_2.43 mseal F\n>     + GLIBC_2.43 openat2 F\n>     + GLIBC_2.43 umaxabs F\n>     ++GLIBC_2.44 __aprintf F\n>     ++GLIBC_2.44 __aprintf_chk F\n>     ++GLIBC_2.44 __vaprintf_chk F\n>     ++GLIBC_2.44 aprintf F\n>     ++GLIBC_2.44 vaprintf F\n>     +\n>     + ## sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/libc.abilist ##\n>     +@@ sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/libc.abilist: GLIBC_2.43 memset_explicit F\n>     + GLIBC_2.43 mseal F\n>     + GLIBC_2.43 openat2 F\n>     + GLIBC_2.43 umaxabs F\n>     ++GLIBC_2.44 __aprintf F\n>     ++GLIBC_2.44 __aprintf_chk F\n>     ++GLIBC_2.44 __vaprintf_chk F\n>     ++GLIBC_2.44 aprintf F\n>     ++GLIBC_2.44 vaprintf F\n>     + GLIBC_2.5 __readlinkat_chk F\n>     + GLIBC_2.5 inet6_opt_append F\n>     + GLIBC_2.5 inet6_opt_find F\n>     +\n>     + ## sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/libc.abilist ##\n>     +@@ sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/libc.abilist: GLIBC_2.43 memset_explicit F\n>     + GLIBC_2.43 mseal F\n>     + GLIBC_2.43 openat2 F\n>     + GLIBC_2.43 umaxabs F\n>     ++GLIBC_2.44 __aprintf F\n>     ++GLIBC_2.44 __aprintf_chk F\n>     ++GLIBC_2.44 __vaprintf_chk F\n>     ++GLIBC_2.44 aprintf F\n>     ++GLIBC_2.44 vaprintf F\n>     + GLIBC_2.5 __readlinkat_chk F\n>     + GLIBC_2.5 inet6_opt_append F\n>     + GLIBC_2.5 inet6_opt_find F\n>     +\n>     + ## sysdeps/unix/sysv/linux/powerpc/powerpc64/be/libc.abilist ##\n>     +@@ sysdeps/unix/sysv/linux/powerpc/powerpc64/be/libc.abilist: GLIBC_2.43 memset_explicit F\n>     + GLIBC_2.43 mseal F\n>     + GLIBC_2.43 openat2 F\n>     + GLIBC_2.43 umaxabs F\n>     ++GLIBC_2.44 __aprintf F\n>     ++GLIBC_2.44 __aprintf_chk F\n>     ++GLIBC_2.44 __vaprintf_chk F\n>     ++GLIBC_2.44 aprintf F\n>     ++GLIBC_2.44 vaprintf F\n>     + GLIBC_2.5 __readlinkat_chk F\n>     + GLIBC_2.5 inet6_opt_append F\n>     + GLIBC_2.5 inet6_opt_find F\n>     +\n>     + ## sysdeps/unix/sysv/linux/powerpc/powerpc64/le/libc.abilist ##\n>     +@@ sysdeps/unix/sysv/linux/powerpc/powerpc64/le/libc.abilist: GLIBC_2.43 memset_explicit F\n>     + GLIBC_2.43 mseal F\n>     + GLIBC_2.43 openat2 F\n>     + GLIBC_2.43 umaxabs F\n>     ++GLIBC_2.44 __aprintf F\n>     ++GLIBC_2.44 __aprintf_chk F\n>     ++GLIBC_2.44 __vaprintf_chk F\n>     ++GLIBC_2.44 aprintf F\n>     ++GLIBC_2.44 vaprintf F\n>     +\n>     + ## sysdeps/unix/sysv/linux/riscv/rv32/libc.abilist ##\n>     +@@ sysdeps/unix/sysv/linux/riscv/rv32/libc.abilist: GLIBC_2.43 memset_explicit F\n>     + GLIBC_2.43 mseal F\n>     + GLIBC_2.43 openat2 F\n>     + GLIBC_2.43 umaxabs F\n>     ++GLIBC_2.44 __aprintf F\n>     ++GLIBC_2.44 __aprintf_chk F\n>     ++GLIBC_2.44 __vaprintf_chk F\n>     ++GLIBC_2.44 aprintf F\n>     ++GLIBC_2.44 vaprintf F\n>     +\n>     + ## sysdeps/unix/sysv/linux/riscv/rv64/libc.abilist ##\n>     +@@ sysdeps/unix/sysv/linux/riscv/rv64/libc.abilist: GLIBC_2.43 memset_explicit F\n>     + GLIBC_2.43 mseal F\n>     + GLIBC_2.43 openat2 F\n>     + GLIBC_2.43 umaxabs F\n>     ++GLIBC_2.44 __aprintf F\n>     ++GLIBC_2.44 __aprintf_chk F\n>     ++GLIBC_2.44 __vaprintf_chk F\n>     ++GLIBC_2.44 aprintf F\n>     ++GLIBC_2.44 vaprintf F\n>     +\n>     + ## sysdeps/unix/sysv/linux/s390/s390-32/libc.abilist ##\n>     +@@ sysdeps/unix/sysv/linux/s390/s390-32/libc.abilist: GLIBC_2.43 memset_explicit F\n>     + GLIBC_2.43 mseal F\n>     + GLIBC_2.43 openat2 F\n>     + GLIBC_2.43 umaxabs F\n>     ++GLIBC_2.44 __aprintf F\n>     ++GLIBC_2.44 __aprintf_chk F\n>     ++GLIBC_2.44 __vaprintf_chk F\n>     ++GLIBC_2.44 aprintf F\n>     ++GLIBC_2.44 vaprintf F\n>     + GLIBC_2.5 __readlinkat_chk F\n>     + GLIBC_2.5 inet6_opt_append F\n>     + GLIBC_2.5 inet6_opt_find F\n>     +\n>     + ## sysdeps/unix/sysv/linux/s390/s390-64/libc.abilist ##\n>     +@@ sysdeps/unix/sysv/linux/s390/s390-64/libc.abilist: GLIBC_2.43 memset_explicit F\n>     + GLIBC_2.43 mseal F\n>     + GLIBC_2.43 openat2 F\n>     + GLIBC_2.43 umaxabs F\n>     ++GLIBC_2.44 __aprintf F\n>     ++GLIBC_2.44 __aprintf_chk F\n>     ++GLIBC_2.44 __vaprintf_chk F\n>     ++GLIBC_2.44 aprintf F\n>     ++GLIBC_2.44 vaprintf F\n>     + GLIBC_2.5 __readlinkat_chk F\n>     + GLIBC_2.5 inet6_opt_append F\n>     + GLIBC_2.5 inet6_opt_find F\n>     +\n>     + ## sysdeps/unix/sysv/linux/sh/be/libc.abilist ##\n>     +@@ sysdeps/unix/sysv/linux/sh/be/libc.abilist: GLIBC_2.43 memset_explicit F\n>     + GLIBC_2.43 mseal F\n>     + GLIBC_2.43 openat2 F\n>     + GLIBC_2.43 umaxabs F\n>     ++GLIBC_2.44 __aprintf F\n>     ++GLIBC_2.44 __aprintf_chk F\n>     ++GLIBC_2.44 __vaprintf_chk F\n>     ++GLIBC_2.44 aprintf F\n>     ++GLIBC_2.44 vaprintf F\n>     + GLIBC_2.5 __readlinkat_chk F\n>     + GLIBC_2.5 inet6_opt_append F\n>     + GLIBC_2.5 inet6_opt_find F\n>     +\n>     + ## sysdeps/unix/sysv/linux/sh/le/libc.abilist ##\n>     +@@ sysdeps/unix/sysv/linux/sh/le/libc.abilist: GLIBC_2.43 memset_explicit F\n>     + GLIBC_2.43 mseal F\n>     + GLIBC_2.43 openat2 F\n>     + GLIBC_2.43 umaxabs F\n>     ++GLIBC_2.44 __aprintf F\n>     ++GLIBC_2.44 __aprintf_chk F\n>     ++GLIBC_2.44 __vaprintf_chk F\n>     ++GLIBC_2.44 aprintf F\n>     ++GLIBC_2.44 vaprintf F\n>     + GLIBC_2.5 __readlinkat_chk F\n>     + GLIBC_2.5 inet6_opt_append F\n>     + GLIBC_2.5 inet6_opt_find F\n>     +\n>     + ## sysdeps/unix/sysv/linux/sparc/sparc32/libc.abilist ##\n>     +@@ sysdeps/unix/sysv/linux/sparc/sparc32/libc.abilist: GLIBC_2.43 memset_explicit F\n>     + GLIBC_2.43 mseal F\n>     + GLIBC_2.43 openat2 F\n>     + GLIBC_2.43 umaxabs F\n>     ++GLIBC_2.44 __aprintf F\n>     ++GLIBC_2.44 __aprintf_chk F\n>     ++GLIBC_2.44 __vaprintf_chk F\n>     ++GLIBC_2.44 aprintf F\n>     ++GLIBC_2.44 vaprintf F\n>     + GLIBC_2.5 __readlinkat_chk F\n>     + GLIBC_2.5 inet6_opt_append F\n>     + GLIBC_2.5 inet6_opt_find F\n>     +\n>     + ## sysdeps/unix/sysv/linux/sparc/sparc64/libc.abilist ##\n>     +@@ sysdeps/unix/sysv/linux/sparc/sparc64/libc.abilist: GLIBC_2.43 memset_explicit F\n>     + GLIBC_2.43 mseal F\n>     + GLIBC_2.43 openat2 F\n>     + GLIBC_2.43 umaxabs F\n>     ++GLIBC_2.44 __aprintf F\n>     ++GLIBC_2.44 __aprintf_chk F\n>     ++GLIBC_2.44 __vaprintf_chk F\n>     ++GLIBC_2.44 aprintf F\n>     ++GLIBC_2.44 vaprintf F\n>     + GLIBC_2.5 __readlinkat_chk F\n>     + GLIBC_2.5 inet6_opt_append F\n>     + GLIBC_2.5 inet6_opt_find F\n>     +\n>     + ## sysdeps/unix/sysv/linux/x86_64/64/libc.abilist ##\n>     +@@ sysdeps/unix/sysv/linux/x86_64/64/libc.abilist: GLIBC_2.43 memset_explicit F\n>     + GLIBC_2.43 mseal F\n>     + GLIBC_2.43 openat2 F\n>     + GLIBC_2.43 umaxabs F\n>     ++GLIBC_2.44 __aprintf F\n>     ++GLIBC_2.44 __aprintf_chk F\n>     ++GLIBC_2.44 __vaprintf_chk F\n>     ++GLIBC_2.44 aprintf F\n>     ++GLIBC_2.44 vaprintf F\n>     + GLIBC_2.5 __readlinkat_chk F\n>     + GLIBC_2.5 inet6_opt_append F\n>     + GLIBC_2.5 inet6_opt_find F\n>     +\n>     + ## sysdeps/unix/sysv/linux/x86_64/x32/libc.abilist ##\n>     +@@ sysdeps/unix/sysv/linux/x86_64/x32/libc.abilist: GLIBC_2.43 memset_explicit F\n>     + GLIBC_2.43 mseal F\n>     + GLIBC_2.43 openat2 F\n>     + GLIBC_2.43 umaxabs F\n>     ++GLIBC_2.44 __aprintf F\n>     ++GLIBC_2.44 __aprintf_chk F\n>     ++GLIBC_2.44 __vaprintf_chk F\n>     ++GLIBC_2.44 aprintf F\n>     ++GLIBC_2.44 vaprintf F\n> 2:  f1dca5c0 = 2:  7ad30709 manual/: Prefer aprintf(3) over asprintf(3)\n> -:  -------- > 3:  22c4ae3f sysdeps/ieee754/ldbl-128ibm-compat/test-printf-chk-ldbl-compat.c: Fix typo\n> -- \n> 2.53.0\n>","headers":{"Return-Path":"<libc-alpha-bounces~incoming=patchwork.ozlabs.org@sourceware.org>","X-Original-To":["incoming@patchwork.ozlabs.org","libc-alpha@sourceware.org"],"Delivered-To":["patchwork-incoming@legolas.ozlabs.org","libc-alpha@sourceware.org"],"Authentication-Results":["legolas.ozlabs.org;\n\tdkim=pass (2048-bit key;\n unprotected) header.d=kernel.org header.i=@kernel.org header.a=rsa-sha256\n header.s=k20201202 header.b=D9SKmWcI;\n\tdkim-atps=neutral","legolas.ozlabs.org;\n spf=pass (sender SPF authorized) smtp.mailfrom=sourceware.org\n (client-ip=2620:52:6:3111::32; helo=vm01.sourceware.org;\n envelope-from=libc-alpha-bounces~incoming=patchwork.ozlabs.org@sourceware.org;\n receiver=patchwork.ozlabs.org)","sourceware.org;\n\tdkim=pass (2048-bit key,\n unprotected) header.d=kernel.org header.i=@kernel.org header.a=rsa-sha256\n header.s=k20201202 header.b=D9SKmWcI","sourceware.org; dmarc=pass (p=quarantine dis=none)\n header.from=kernel.org","sourceware.org; spf=pass smtp.mailfrom=kernel.org","server2.sourceware.org;\n arc=none smtp.remote-ip=172.105.4.254"],"Received":["from vm01.sourceware.org (vm01.sourceware.org\n [IPv6:2620:52:6:3111::32])\n\t(using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)\n\t key-exchange x25519 server-signature ECDSA (secp384r1) server-digest SHA384)\n\t(No client certificate requested)\n\tby legolas.ozlabs.org (Postfix) with ESMTPS id 4g1ClT5Lpfz1yDD\n\tfor <incoming@patchwork.ozlabs.org>; Thu, 23 Apr 2026 07:58:13 +1000 (AEST)","from vm01.sourceware.org (localhost [127.0.0.1])\n\tby sourceware.org (Postfix) with ESMTP id C2F9E4C65E8A\n\tfor <incoming@patchwork.ozlabs.org>; Wed, 22 Apr 2026 21:58:11 +0000 (GMT)","from tor.source.kernel.org (tor.source.kernel.org [172.105.4.254])\n by sourceware.org (Postfix) with ESMTPS id 08E7D44CF0D6\n for <libc-alpha@sourceware.org>; Wed, 22 Apr 2026 19:34:27 +0000 (GMT)","from smtp.kernel.org (transwarp.subspace.kernel.org [100.75.92.58])\n by tor.source.kernel.org (Postfix) with ESMTP id EEC7C61863;\n Wed, 22 Apr 2026 19:34:25 +0000 (UTC)","by smtp.kernel.org (Postfix) with ESMTPSA id 96035C19425;\n Wed, 22 Apr 2026 19:34:23 +0000 (UTC)"],"DKIM-Filter":["OpenDKIM Filter v2.11.0 sourceware.org C2F9E4C65E8A","OpenDKIM Filter v2.11.0 sourceware.org 08E7D44CF0D6"],"DMARC-Filter":"OpenDMARC Filter v1.4.2 sourceware.org 08E7D44CF0D6","ARC-Filter":"OpenARC Filter v1.0.0 sourceware.org 08E7D44CF0D6","ARC-Seal":"i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1776886467; cv=none;\n b=EYl7X/rZrUTWkoX2s/A+nty+7Qtzc1ScwteRw7znU5vCbb3+HxUx87Vwzr2fQlKLwr+GxvUcZUSNQjc0ic89DHwFAciXva82i+GfNflqCHtUsEJAz+tgzvtaT6KgRdDXZp4qwyNoCwOcuMytOGGnzlByMOSZ1ZHxPGb3T6WX/Lw=","ARC-Message-Signature":"i=1; a=rsa-sha256; d=sourceware.org; s=key;\n t=1776886467; c=relaxed/simple;\n bh=RGpkvTYEu16+dyxrszTKLM4ZUZuEwgN9vHLmOtA7Adw=;\n h=DKIM-Signature:Date:From:To:Subject:Message-ID:MIME-Version;\n b=jjJnMV3vk3UyHttxCD/odGv+2otQAPrX5aQE2FrAksyqw6tkOYLADqaqTWstmge7eNe/HOJyNZSRA/kU2FbKiwvPg12gJUmZ6AQ8fRobHnKq1r4hkcPmARxoTdgIUHayL+ZOmmzJ1J4AFJnEj1SmrFKn5G3YBt7XBjtIAXuTmog=","ARC-Authentication-Results":"i=1; server2.sourceware.org","DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org;\n s=k20201202; t=1776886465;\n bh=RGpkvTYEu16+dyxrszTKLM4ZUZuEwgN9vHLmOtA7Adw=;\n h=Date:From:To:Cc:Subject:References:In-Reply-To:From;\n b=D9SKmWcI6I6rETaCVsfWgtHw6Em41B3alfKfiHwNp8BxrV9x9C05AVD9+VBu84qIJ\n rcF1CTF7FxdLr/TiRu5nkcxUt5txyC5gc51+hPrpUhROcpfhzChjjWB3ATJsANML5K\n m1+QD5O6S09eTUiUdIdSPlPfpugcmesTp9DFFS5/XH/UZTNp5nHPe+/d7xm3FIvo3e\n ddd0iqk13Hgg1qnvTfyE32MWSxCsjnQg7hjCsYvcx5knqO5pqlt+H7JCPmuKHQcpEm\n WrVN7EfXDQv4qbavDxPf9/a7VqyfQnuMwzL2U5YYq9rqqDrw0lJguIac5rubt1+8P1\n lvVI4msv4lOSA==","Date":"Wed, 22 Apr 2026 21:34:21 +0200","From":"Alejandro Colomar <alx@kernel.org>","To":"libc-alpha@sourceware.org","Cc":"Joseph Myers <josmyers@redhat.com>, Paul Eggert <eggert@cs.ucla.edu>,\n Adhemerval Zanella Netto <adhemerval.zanella@linaro.org>,\n Florian Weimer <fweimer@redhat.com>,\n \"Dmitry V. Levin\" <ldv@altlinux.org>, Archie Cobbs <archie.cobbs@gmail.com>,\n Solar Designer <solar@openwall.com>, Sam James <sam@gentoo.org>","Subject":"Re: [PATCH 0/3] Add [v]aprintf(3)","Message-ID":"<aekinurc3ld1IA9g@devuan>","References":"<abSVWeS3nHmkZSKn@devuan>\n <cover.1776882798.git.alx@kernel.org>","MIME-Version":"1.0","Content-Type":"multipart/signed; micalg=pgp-sha512;\n protocol=\"application/pgp-signature\"; boundary=\"net3nq2pbattsyix\"","Content-Disposition":"inline","In-Reply-To":"<cover.1776882798.git.alx@kernel.org>","X-BeenThere":"libc-alpha@sourceware.org","X-Mailman-Version":"2.1.30","Precedence":"list","List-Id":"Libc-alpha mailing list <libc-alpha.sourceware.org>","List-Unsubscribe":"<https://sourceware.org/mailman/options/libc-alpha>,\n <mailto:libc-alpha-request@sourceware.org?subject=unsubscribe>","List-Archive":"<https://sourceware.org/pipermail/libc-alpha/>","List-Post":"<mailto:libc-alpha@sourceware.org>","List-Help":"<mailto:libc-alpha-request@sourceware.org?subject=help>","List-Subscribe":"<https://sourceware.org/mailman/listinfo/libc-alpha>,\n <mailto:libc-alpha-request@sourceware.org?subject=subscribe>","Errors-To":"libc-alpha-bounces~incoming=patchwork.ozlabs.org@sourceware.org"}}]