[RFC] posix: Export posix_spawn_file_actions_{addchdir, addfchdir} (BZ 34437)

Message ID 20260805181406.2392639-1-adhemerval.zanella@linaro.org (mailing list archive)
State New
Headers
Series [RFC] posix: Export posix_spawn_file_actions_{addchdir, addfchdir} (BZ 34437) |

Checks

Context Check Description
redhat-pt-bot/TryBot-apply_patch success Patch applied to master at the time it was sent
redhat-pt-bot/TryBot-32bit success Build for i686
linaro-tcwg-bot/tcwg_glibc_build--master-arm warning Skipped because it is an RFC
linaro-tcwg-bot/tcwg_glibc_build--master-aarch64 warning Skipped because it is an RFC

Commit Message

Adhemerval Zanella Netto Aug. 5, 2026, 6:11 p.m. UTC
  Sending as an RFC because it might be a contentious patch, and it breaks
our previous policy of not adding retroactively symbols.

--

Commit 7594b4e5a75 ("posix: Add POSIX aliases to some spawn functions")
added posix_spawn_file_actions_addchdir and
posix_spawn_file_actions_addfchdir as header redirects to the existing
_np symbols, without exporting the POSIX names from libc.so.  This
breaks configure probes that check for the symbol at link time with a
bogus prototype (such as autoconf's AC_CHECK_FUNCS, used by gnulib),
which then report the functions as missing on glibc 2.44 and replace
them.

Export both functions as real symbols, aliases of the _np variants.
The symbols are added under the GLIBC_2.44 version, even though 2.44
has already been released.  Retroactively adding symbols to a released
symbol version is against the glibc policy, but it is less disruptive
than forcing gnulib consumers to update themselves, and it keeps the
symbol version consistent with the release the interfaces were first
added.  This change is intended to be backported to the 2.44 release
branch.

The tst-spawn-chdir-posix test now links against the exported POSIX
names instead of the header redirects.

Checked on x86_64-linux-gnu.
---
 NEWS                                          |  4 +-
 posix/Versions                                |  4 ++
 posix/spawn.h                                 | 40 ++++++++-----------
 posix/spawn_faction_addchdir.c                |  8 +++-
 posix/spawn_faction_addfchdir.c               |  8 +++-
 sysdeps/mach/hurd/i386/libc.abilist           |  2 +
 sysdeps/mach/hurd/x86_64/libc.abilist         |  2 +
 sysdeps/unix/sysv/linux/aarch64/libc.abilist  |  2 +
 sysdeps/unix/sysv/linux/alpha/libc.abilist    |  2 +
 sysdeps/unix/sysv/linux/arc/libc.abilist      |  2 +
 sysdeps/unix/sysv/linux/arm/be/libc.abilist   |  2 +
 sysdeps/unix/sysv/linux/arm/le/libc.abilist   |  2 +
 sysdeps/unix/sysv/linux/csky/libc.abilist     |  2 +
 sysdeps/unix/sysv/linux/hppa/libc.abilist     |  2 +
 sysdeps/unix/sysv/linux/i386/libc.abilist     |  2 +
 .../sysv/linux/loongarch/ilp32/libc.abilist   |  2 +
 .../sysv/linux/loongarch/lp64/libc.abilist    |  2 +
 .../sysv/linux/m68k/coldfire/libc.abilist     |  2 +
 .../unix/sysv/linux/m68k/m680x0/libc.abilist  |  2 +
 .../sysv/linux/microblaze/be/libc.abilist     |  2 +
 .../sysv/linux/microblaze/le/libc.abilist     |  2 +
 .../sysv/linux/mips/mips32/fpu/libc.abilist   |  2 +
 .../sysv/linux/mips/mips32/nofpu/libc.abilist |  2 +
 .../sysv/linux/mips/mips64/n32/libc.abilist   |  2 +
 .../sysv/linux/mips/mips64/n64/libc.abilist   |  2 +
 sysdeps/unix/sysv/linux/or1k/libc.abilist     |  2 +
 .../linux/powerpc/powerpc32/fpu/libc.abilist  |  2 +
 .../powerpc/powerpc32/nofpu/libc.abilist      |  2 +
 .../linux/powerpc/powerpc64/be/libc.abilist   |  2 +
 .../linux/powerpc/powerpc64/le/libc.abilist   |  2 +
 .../unix/sysv/linux/riscv/rv32/libc.abilist   |  2 +
 .../unix/sysv/linux/riscv/rv64/libc.abilist   |  2 +
 sysdeps/unix/sysv/linux/s390/libc.abilist     |  2 +
 sysdeps/unix/sysv/linux/sh/be/libc.abilist    |  2 +
 sysdeps/unix/sysv/linux/sh/le/libc.abilist    |  2 +
 .../sysv/linux/sparc/sparc32/libc.abilist     |  2 +
 .../sysv/linux/sparc/sparc64/libc.abilist     |  2 +
 .../unix/sysv/linux/x86_64/64/libc.abilist    |  2 +
 .../unix/sysv/linux/x86_64/x32/libc.abilist   |  2 +
 39 files changed, 104 insertions(+), 28 deletions(-)
  

Comments

Bruno Haible Aug. 5, 2026, 8:15 p.m. UTC | #1
Hi Adhemerval,

Thank you for working on this.

> it breaks our previous policy of not adding retroactively symbols.

Why not version 2.44.1 ? I guess the symbol versioning mechanism must support
version numbers of the form <major>.<minor>.<subminor>, because in the past,
some symbols were assigned to versions GLIBC_2.3.3 or GLIBC_2.3.4, for
instance.

The patch looks good to me (from reviewing it; I haven't tested it).

Bruno
  
Florian Weimer Aug. 5, 2026, 8:57 p.m. UTC | #2
* Bruno Haible:

> Hi Adhemerval,
>
> Thank you for working on this.
>
>> it breaks our previous policy of not adding retroactively symbols.

And therefore this breaks versioned dependencies in most RPM-based
distributions.

> Why not version 2.44.1 ? I guess the symbol versioning mechanism must support
> version numbers of the form <major>.<minor>.<subminor>, because in the past,
> some symbols were assigned to versions GLIBC_2.3.3 or GLIBC_2.3.4, for
> instance.

We still have lots of old symbols like that.  But we don't really know
how software reacts to new symbols of that structure.

The gnulib problem occurs only after a rebuild.  An adverse reaction
to the 2.44.1 symbol structure might happen just after a glibc update,
with old applications.  Hard to tell beforehand if this is a good
trade-off.

A quick 2.45 release might be another option.

But I'm not quite convinced any of this is necessary.
  
Andreas K. Huettel Aug. 6, 2026, 2:43 a.m. UTC | #3
Am Donnerstag, 6. August 2026, 04:57:44 Chinesische Normalzeit schrieb Florian Weimer:
> * Bruno Haible:
> 
> > Hi Adhemerval,
> >
> > Thank you for working on this.
> >
> >> it breaks our previous policy of not adding retroactively symbols.
> 
> And therefore this breaks versioned dependencies in most RPM-based
> distributions.

Not being familiar with RPM packaging, would that also be the case if we release
a 2.44.1 version from the 2.44 branch immediately after backporting that commit?

> 
> > Why not version 2.44.1 ? I guess the symbol versioning mechanism must support
> > version numbers of the form <major>.<minor>.<subminor>, because in the past,
> > some symbols were assigned to versions GLIBC_2.3.3 or GLIBC_2.3.4, for
> > instance.
> 
> We still have lots of old symbols like that.  But we don't really know
> how software reacts to new symbols of that structure.
> 
> The gnulib problem occurs only after a rebuild.  An adverse reaction
> to the 2.44.1 symbol structure might happen just after a glibc update,
> with old applications.  Hard to tell beforehand if this is a good
> trade-off.
> 
> A quick 2.45 release might be another option.
> 
> But I'm not quite convinced any of this is necessary.
>
  
Florian Weimer Aug. 6, 2026, 4:30 a.m. UTC | #4
* Andreas K. Huettel:

> Am Donnerstag, 6. August 2026, 04:57:44 Chinesische Normalzeit schrieb Florian Weimer:
>> * Bruno Haible:
>> 
>> > Hi Adhemerval,
>> >
>> > Thank you for working on this.
>> >
>> >> it breaks our previous policy of not adding retroactively symbols.
>> 
>> And therefore this breaks versioned dependencies in most RPM-based
>> distributions.
>
> Not being familiar with RPM packaging, would that also be the case if we release
> a 2.44.1 version from the 2.44 branch immediately after backporting that commit?

That would result in version set dependencies on GLIBC_2.44.1, and RPM
would work correctly.
  
Andreas Schwab Aug. 6, 2026, 8:04 a.m. UTC | #5
On Aug 05 2026, Florian Weimer wrote:

> And therefore this breaks versioned dependencies in most RPM-based
> distributions.

This has nothing to do with RPM.  It is an ABI break, and an object that
references posix_spawn_file_actions_addchdir@GLIBC_2.44 will crash when
run against libc.so from the glibc 2.44 release.

>> Why not version 2.44.1 ? I guess the symbol versioning mechanism must support
>> version numbers of the form <major>.<minor>.<subminor>, because in the past,
>> some symbols were assigned to versions GLIBC_2.3.3 or GLIBC_2.3.4, for
>> instance.
>
> We still have lots of old symbols like that.  But we don't really know
> how software reacts to new symbols of that structure.

Names of version symbols are arbitrary, and are only chosen by
convention.  Nothing else depends on their particular format.
  
Andreas Schwab Aug. 6, 2026, 8:05 a.m. UTC | #6
On Aug 05 2026, Adhemerval Zanella wrote:

> Sending as an RFC because it might be a contentious patch, and it breaks
> our previous policy of not adding retroactively symbols.

No, you can't do that.
  
Adhemerval Zanella Netto Aug. 6, 2026, 11:18 a.m. UTC | #7
On 06/08/26 05:04, Andreas Schwab wrote:
> On Aug 05 2026, Florian Weimer wrote:
> 
>> And therefore this breaks versioned dependencies in most RPM-based
>> distributions.
> 
> This has nothing to do with RPM.  It is an ABI break, and an object that
> references posix_spawn_file_actions_addchdir@GLIBC_2.44 will crash when
> run against libc.so from the glibc 2.44 release.

The idea is to readily backport to 2.44, but released 2.44 glibc won't be
able to run it correctly without the backport. It is not an ideal solution,
that's why I am not sure which breakage is more disruptive, the gnulib one
or the potential ABI break.

> 
>>> Why not version 2.44.1 ? I guess the symbol versioning mechanism must support
>>> version numbers of the form <major>.<minor>.<subminor>, because in the past,
>>> some symbols were assigned to versions GLIBC_2.3.3 or GLIBC_2.3.4, for
>>> instance.
>>
>> We still have lots of old symbols like that.  But we don't really know
>> how software reacts to new symbols of that structure.
> 
> Names of version symbols are arbitrary, and are only chosen by
> convention.  Nothing else depends on their particular format.
> 

There is another issue with the current alias that I did not foresee: checking
on how to finish POSIX 2024, linking posix_spawn_file_actions_{addchdir, addfchdir}
triggers linknamespaces issues (because it pulls the *_np alias).

So I think we will eventually need another symbol, either for 2.45 or
adding namespace clean one.
  
Andreas K. Huettel Aug. 6, 2026, 12:16 p.m. UTC | #8
Am Donnerstag, 6. August 2026, 12:30:58 Chinesische Normalzeit schrieb Florian Weimer:
> * Andreas K. Huettel:
> 
> > Am Donnerstag, 6. August 2026, 04:57:44 Chinesische Normalzeit schrieb Florian Weimer:
> >> * Bruno Haible:
> >> 
> >> > Hi Adhemerval,
> >> >
> >> > Thank you for working on this.
> >> >
> >> >> it breaks our previous policy of not adding retroactively symbols.
> >> 
> >> And therefore this breaks versioned dependencies in most RPM-based
> >> distributions.
> >
> > Not being familiar with RPM packaging, would that also be the case if we release
> > a 2.44.1 version from the 2.44 branch immediately after backporting that commit?
> 
> That would result in version set dependencies on GLIBC_2.44.1, and RPM
> would work correctly.
> 

Then let's do that. I can take care of the point release.
  

Patch

diff --git a/NEWS b/NEWS
index 56c6b581df0..245fcfe6144 100644
--- a/NEWS
+++ b/NEWS
@@ -13,7 +13,9 @@  Major new features:
 
 Deprecated and removed features, and other changes affecting compatibility:
 
-  [Add deprecations, removals and changes affecting compatibility here]
+* The posix_spawn_file_actions_addchdir and posix_spawn_file_actions_addfchdir
+  functions, added in glibc 2.44 as header redirects to the _np variants, are
+  now exported from libc.so under the GLIBC_2.44 symbol version.
 
 Changes to build and runtime requirements:
 
diff --git a/posix/Versions b/posix/Versions
index 0624d24bcce..3c15dbb50cb 100644
--- a/posix/Versions
+++ b/posix/Versions
@@ -159,6 +159,10 @@  libc {
   GLIBC_2.35 {
     posix_spawn_file_actions_addtcsetpgrp_np;
   }
+  GLIBC_2.44 {
+    posix_spawn_file_actions_addchdir;
+    posix_spawn_file_actions_addfchdir;
+  }
   GLIBC_PRIVATE {
     __libc_fork; __libc_pread; __libc_pwrite;
     __nanosleep_nocancel; __pause_nocancel;
diff --git a/posix/spawn.h b/posix/spawn.h
index 0aabf5ebef0..da0cabbf42e 100644
--- a/posix/spawn.h
+++ b/posix/spawn.h
@@ -201,36 +201,30 @@  extern int posix_spawn_file_actions_adddup2 (posix_spawn_file_actions_t *
      __THROW __nonnull ((1));
 
 #ifdef __USE_XOPEN2K24XSI
-
-/* Add an action changing the directory to PATH during spawn.  This
-   affects the subsequent file actions.
-   Alias of posix_spawn_file_actions_addchdir_np.  */
-extern int __REDIRECT_NTH (posix_spawn_file_actions_addchdir,
-                            (posix_spawn_file_actions_t * __restrict __actions,
-                             const char *__restrict __path),
-                            posix_spawn_file_actions_addchdir_np);
-
-/* Add an action changing the directory to FD during spawn.  This
-   affects the subsequent file actions.  FD is not duplicated and must
-   be open when the file action is executed.
-   Alias of posix_spawn_file_actions_addfchdir_np.  */
-extern int __REDIRECT_NTH (posix_spawn_file_actions_addfchdir,
-                           (posix_spawn_file_actions_t *, int __fd),
-                           posix_spawn_file_actions_addfchdir_np);
-
-#endif /* __USE_XOPEN2K24XSI */
-
-#ifdef __USE_MISC
 /* Add an action changing the directory to PATH during spawn.  This
    affects the subsequent file actions.  */
-extern int posix_spawn_file_actions_addchdir_np (posix_spawn_file_actions_t *
-						 __restrict __actions,
-						 const char *__restrict __path)
+extern int posix_spawn_file_actions_addchdir (posix_spawn_file_actions_t *
+					      __restrict __actions,
+					      const char *__restrict __path)
      __THROW __nonnull ((1, 2));
 
 /* Add an action changing the directory to FD during spawn.  This
    affects the subsequent file actions.  FD is not duplicated and must
    be open when the file action is executed.  */
+extern int posix_spawn_file_actions_addfchdir (posix_spawn_file_actions_t *,
+					       int __fd)
+     __THROW __nonnull ((1));
+
+#endif /* __USE_XOPEN2K24XSI */
+
+#ifdef __USE_MISC
+/* Same as posix_spawn_file_actions_addchdir.  */
+extern int posix_spawn_file_actions_addchdir_np (posix_spawn_file_actions_t *
+						 __restrict __actions,
+						 const char *__restrict __path)
+     __THROW __nonnull ((1, 2));
+
+/* Same as posix_spawn_file_actions_addfchdir.  */
 extern int posix_spawn_file_actions_addfchdir_np (posix_spawn_file_actions_t *,
 						  int __fd)
      __THROW __nonnull ((1));
diff --git a/posix/spawn_faction_addchdir.c b/posix/spawn_faction_addchdir.c
index 02f8ce27ee0..8c25df2de00 100644
--- a/posix/spawn_faction_addchdir.c
+++ b/posix/spawn_faction_addchdir.c
@@ -23,8 +23,8 @@ 
 #include "spawn_int.h"
 
 int
-posix_spawn_file_actions_addchdir_np (posix_spawn_file_actions_t *file_actions,
-                                      const char *path)
+__posix_spawn_file_actions_addchdir_np (posix_spawn_file_actions_t *file_actions,
+					const char *path)
 {
   struct __spawn_action *rec;
 
@@ -51,3 +51,7 @@  posix_spawn_file_actions_addchdir_np (posix_spawn_file_actions_t *file_actions,
 
   return 0;
 }
+weak_alias (__posix_spawn_file_actions_addchdir_np,
+	    posix_spawn_file_actions_addchdir_np)
+weak_alias (__posix_spawn_file_actions_addchdir_np,
+	    posix_spawn_file_actions_addchdir)
diff --git a/posix/spawn_faction_addfchdir.c b/posix/spawn_faction_addfchdir.c
index a3df6df4896..fd94d7bccd5 100644
--- a/posix/spawn_faction_addfchdir.c
+++ b/posix/spawn_faction_addfchdir.c
@@ -23,8 +23,8 @@ 
 #include "spawn_int.h"
 
 int
-posix_spawn_file_actions_addfchdir_np (posix_spawn_file_actions_t *actions,
-                                       int fd)
+__posix_spawn_file_actions_addfchdir_np (posix_spawn_file_actions_t *actions,
+					 int fd)
 {
   struct __spawn_action *rec;
 
@@ -44,3 +44,7 @@  posix_spawn_file_actions_addfchdir_np (posix_spawn_file_actions_t *actions,
 
   return 0;
 }
+weak_alias (__posix_spawn_file_actions_addfchdir_np,
+	    posix_spawn_file_actions_addfchdir_np)
+weak_alias (__posix_spawn_file_actions_addfchdir_np,
+	    posix_spawn_file_actions_addfchdir)
diff --git a/sysdeps/mach/hurd/i386/libc.abilist b/sysdeps/mach/hurd/i386/libc.abilist
index 0166703bdb3..a22daf21179 100644
--- a/sysdeps/mach/hurd/i386/libc.abilist
+++ b/sysdeps/mach/hurd/i386/libc.abilist
@@ -2830,6 +2830,8 @@  GLIBC_2.44 mq_setattr F
 GLIBC_2.44 mq_timedreceive F
 GLIBC_2.44 mq_timedsend F
 GLIBC_2.44 mq_unlink F
+GLIBC_2.44 posix_spawn_file_actions_addchdir F
+GLIBC_2.44 posix_spawn_file_actions_addfchdir F
 GLIBC_2.44 timer_create F
 GLIBC_2.44 timer_delete F
 GLIBC_2.44 timer_getoverrun F
diff --git a/sysdeps/mach/hurd/x86_64/libc.abilist b/sysdeps/mach/hurd/x86_64/libc.abilist
index 0262a079aa8..946ce20d8f0 100644
--- a/sysdeps/mach/hurd/x86_64/libc.abilist
+++ b/sysdeps/mach/hurd/x86_64/libc.abilist
@@ -2506,6 +2506,8 @@  GLIBC_2.44 mq_setattr F
 GLIBC_2.44 mq_timedreceive F
 GLIBC_2.44 mq_timedsend F
 GLIBC_2.44 mq_unlink F
+GLIBC_2.44 posix_spawn_file_actions_addchdir F
+GLIBC_2.44 posix_spawn_file_actions_addfchdir F
 GLIBC_2.44 timer_create F
 GLIBC_2.44 timer_delete F
 GLIBC_2.44 timer_getoverrun F
diff --git a/sysdeps/unix/sysv/linux/aarch64/libc.abilist b/sysdeps/unix/sysv/linux/aarch64/libc.abilist
index 3156688addb..c305a0f4c31 100644
--- a/sysdeps/unix/sysv/linux/aarch64/libc.abilist
+++ b/sysdeps/unix/sysv/linux/aarch64/libc.abilist
@@ -2775,3 +2775,5 @@  GLIBC_2.43 memset_explicit F
 GLIBC_2.43 mseal F
 GLIBC_2.43 openat2 F
 GLIBC_2.43 umaxabs F
+GLIBC_2.44 posix_spawn_file_actions_addchdir F
+GLIBC_2.44 posix_spawn_file_actions_addfchdir F
diff --git a/sysdeps/unix/sysv/linux/alpha/libc.abilist b/sysdeps/unix/sysv/linux/alpha/libc.abilist
index 8af5b0b5818..27a89961cde 100644
--- a/sysdeps/unix/sysv/linux/alpha/libc.abilist
+++ b/sysdeps/unix/sysv/linux/alpha/libc.abilist
@@ -3122,6 +3122,8 @@  GLIBC_2.43 memset_explicit F
 GLIBC_2.43 mseal F
 GLIBC_2.43 openat2 F
 GLIBC_2.43 umaxabs F
+GLIBC_2.44 posix_spawn_file_actions_addchdir F
+GLIBC_2.44 posix_spawn_file_actions_addfchdir F
 GLIBC_2.5 __readlinkat_chk F
 GLIBC_2.5 inet6_opt_append F
 GLIBC_2.5 inet6_opt_find F
diff --git a/sysdeps/unix/sysv/linux/arc/libc.abilist b/sysdeps/unix/sysv/linux/arc/libc.abilist
index 35fcef2cc4c..24ec7de101f 100644
--- a/sysdeps/unix/sysv/linux/arc/libc.abilist
+++ b/sysdeps/unix/sysv/linux/arc/libc.abilist
@@ -2536,3 +2536,5 @@  GLIBC_2.43 memset_explicit F
 GLIBC_2.43 mseal F
 GLIBC_2.43 openat2 F
 GLIBC_2.43 umaxabs F
+GLIBC_2.44 posix_spawn_file_actions_addchdir F
+GLIBC_2.44 posix_spawn_file_actions_addfchdir F
diff --git a/sysdeps/unix/sysv/linux/arm/be/libc.abilist b/sysdeps/unix/sysv/linux/arm/be/libc.abilist
index a6c6b951bfa..9384554fb9f 100644
--- a/sysdeps/unix/sysv/linux/arm/be/libc.abilist
+++ b/sysdeps/unix/sysv/linux/arm/be/libc.abilist
@@ -2828,6 +2828,8 @@  GLIBC_2.43 memset_explicit F
 GLIBC_2.43 mseal F
 GLIBC_2.43 openat2 F
 GLIBC_2.43 umaxabs F
+GLIBC_2.44 posix_spawn_file_actions_addchdir F
+GLIBC_2.44 posix_spawn_file_actions_addfchdir F
 GLIBC_2.5 __readlinkat_chk F
 GLIBC_2.5 inet6_opt_append F
 GLIBC_2.5 inet6_opt_find F
diff --git a/sysdeps/unix/sysv/linux/arm/le/libc.abilist b/sysdeps/unix/sysv/linux/arm/le/libc.abilist
index e76015fe666..031aa88b99a 100644
--- a/sysdeps/unix/sysv/linux/arm/le/libc.abilist
+++ b/sysdeps/unix/sysv/linux/arm/le/libc.abilist
@@ -2825,6 +2825,8 @@  GLIBC_2.43 memset_explicit F
 GLIBC_2.43 mseal F
 GLIBC_2.43 openat2 F
 GLIBC_2.43 umaxabs F
+GLIBC_2.44 posix_spawn_file_actions_addchdir F
+GLIBC_2.44 posix_spawn_file_actions_addfchdir F
 GLIBC_2.5 __readlinkat_chk F
 GLIBC_2.5 inet6_opt_append F
 GLIBC_2.5 inet6_opt_find F
diff --git a/sysdeps/unix/sysv/linux/csky/libc.abilist b/sysdeps/unix/sysv/linux/csky/libc.abilist
index 1fb7cdcad5d..fcde47e4db0 100644
--- a/sysdeps/unix/sysv/linux/csky/libc.abilist
+++ b/sysdeps/unix/sysv/linux/csky/libc.abilist
@@ -2812,3 +2812,5 @@  GLIBC_2.43 memset_explicit F
 GLIBC_2.43 mseal F
 GLIBC_2.43 openat2 F
 GLIBC_2.43 umaxabs F
+GLIBC_2.44 posix_spawn_file_actions_addchdir F
+GLIBC_2.44 posix_spawn_file_actions_addfchdir F
diff --git a/sysdeps/unix/sysv/linux/hppa/libc.abilist b/sysdeps/unix/sysv/linux/hppa/libc.abilist
index 0710ccecf9d..e216b578c1b 100644
--- a/sysdeps/unix/sysv/linux/hppa/libc.abilist
+++ b/sysdeps/unix/sysv/linux/hppa/libc.abilist
@@ -2849,6 +2849,8 @@  GLIBC_2.43 memset_explicit F
 GLIBC_2.43 mseal F
 GLIBC_2.43 openat2 F
 GLIBC_2.43 umaxabs F
+GLIBC_2.44 posix_spawn_file_actions_addchdir F
+GLIBC_2.44 posix_spawn_file_actions_addfchdir F
 GLIBC_2.5 __readlinkat_chk F
 GLIBC_2.5 inet6_opt_append F
 GLIBC_2.5 inet6_opt_find F
diff --git a/sysdeps/unix/sysv/linux/i386/libc.abilist b/sysdeps/unix/sysv/linux/i386/libc.abilist
index 3afe3a88eb4..a2cf289f8c4 100644
--- a/sysdeps/unix/sysv/linux/i386/libc.abilist
+++ b/sysdeps/unix/sysv/linux/i386/libc.abilist
@@ -3032,6 +3032,8 @@  GLIBC_2.43 memset_explicit F
 GLIBC_2.43 mseal F
 GLIBC_2.43 openat2 F
 GLIBC_2.43 umaxabs F
+GLIBC_2.44 posix_spawn_file_actions_addchdir F
+GLIBC_2.44 posix_spawn_file_actions_addfchdir F
 GLIBC_2.5 __readlinkat_chk F
 GLIBC_2.5 inet6_opt_append F
 GLIBC_2.5 inet6_opt_find F
diff --git a/sysdeps/unix/sysv/linux/loongarch/ilp32/libc.abilist b/sysdeps/unix/sysv/linux/loongarch/ilp32/libc.abilist
index 7c6d7055c3d..09db1758b6e 100644
--- a/sysdeps/unix/sysv/linux/loongarch/ilp32/libc.abilist
+++ b/sysdeps/unix/sysv/linux/loongarch/ilp32/libc.abilist
@@ -1442,10 +1442,12 @@  GLIBC_2.44 posix_madvise F
 GLIBC_2.44 posix_memalign F
 GLIBC_2.44 posix_openpt F
 GLIBC_2.44 posix_spawn F
+GLIBC_2.44 posix_spawn_file_actions_addchdir F
 GLIBC_2.44 posix_spawn_file_actions_addchdir_np F
 GLIBC_2.44 posix_spawn_file_actions_addclose F
 GLIBC_2.44 posix_spawn_file_actions_addclosefrom_np F
 GLIBC_2.44 posix_spawn_file_actions_adddup2 F
+GLIBC_2.44 posix_spawn_file_actions_addfchdir F
 GLIBC_2.44 posix_spawn_file_actions_addfchdir_np F
 GLIBC_2.44 posix_spawn_file_actions_addopen F
 GLIBC_2.44 posix_spawn_file_actions_addtcsetpgrp_np F
diff --git a/sysdeps/unix/sysv/linux/loongarch/lp64/libc.abilist b/sysdeps/unix/sysv/linux/loongarch/lp64/libc.abilist
index c2b3a66d3a1..6c1954bc1a5 100644
--- a/sysdeps/unix/sysv/linux/loongarch/lp64/libc.abilist
+++ b/sysdeps/unix/sysv/linux/loongarch/lp64/libc.abilist
@@ -2296,3 +2296,5 @@  GLIBC_2.43 memset_explicit F
 GLIBC_2.43 mseal F
 GLIBC_2.43 openat2 F
 GLIBC_2.43 umaxabs F
+GLIBC_2.44 posix_spawn_file_actions_addchdir F
+GLIBC_2.44 posix_spawn_file_actions_addfchdir F
diff --git a/sysdeps/unix/sysv/linux/m68k/coldfire/libc.abilist b/sysdeps/unix/sysv/linux/m68k/coldfire/libc.abilist
index d6855131e8b..69369345f75 100644
--- a/sysdeps/unix/sysv/linux/m68k/coldfire/libc.abilist
+++ b/sysdeps/unix/sysv/linux/m68k/coldfire/libc.abilist
@@ -2808,6 +2808,8 @@  GLIBC_2.43 memset_explicit F
 GLIBC_2.43 mseal F
 GLIBC_2.43 openat2 F
 GLIBC_2.43 umaxabs F
+GLIBC_2.44 posix_spawn_file_actions_addchdir F
+GLIBC_2.44 posix_spawn_file_actions_addfchdir F
 GLIBC_2.5 __readlinkat_chk F
 GLIBC_2.5 inet6_opt_append F
 GLIBC_2.5 inet6_opt_find F
diff --git a/sysdeps/unix/sysv/linux/m68k/m680x0/libc.abilist b/sysdeps/unix/sysv/linux/m68k/m680x0/libc.abilist
index 4e3fe9c42f2..36274664df0 100644
--- a/sysdeps/unix/sysv/linux/m68k/m680x0/libc.abilist
+++ b/sysdeps/unix/sysv/linux/m68k/m680x0/libc.abilist
@@ -2975,6 +2975,8 @@  GLIBC_2.43 memset_explicit F
 GLIBC_2.43 mseal F
 GLIBC_2.43 openat2 F
 GLIBC_2.43 umaxabs F
+GLIBC_2.44 posix_spawn_file_actions_addchdir F
+GLIBC_2.44 posix_spawn_file_actions_addfchdir F
 GLIBC_2.5 __readlinkat_chk F
 GLIBC_2.5 inet6_opt_append F
 GLIBC_2.5 inet6_opt_find F
diff --git a/sysdeps/unix/sysv/linux/microblaze/be/libc.abilist b/sysdeps/unix/sysv/linux/microblaze/be/libc.abilist
index 29f0c5f954b..1b790ba4b87 100644
--- a/sysdeps/unix/sysv/linux/microblaze/be/libc.abilist
+++ b/sysdeps/unix/sysv/linux/microblaze/be/libc.abilist
@@ -2861,3 +2861,5 @@  GLIBC_2.43 memset_explicit F
 GLIBC_2.43 mseal F
 GLIBC_2.43 openat2 F
 GLIBC_2.43 umaxabs F
+GLIBC_2.44 posix_spawn_file_actions_addchdir F
+GLIBC_2.44 posix_spawn_file_actions_addfchdir F
diff --git a/sysdeps/unix/sysv/linux/microblaze/le/libc.abilist b/sysdeps/unix/sysv/linux/microblaze/le/libc.abilist
index 2ef62838f75..431f68eff54 100644
--- a/sysdeps/unix/sysv/linux/microblaze/le/libc.abilist
+++ b/sysdeps/unix/sysv/linux/microblaze/le/libc.abilist
@@ -2858,3 +2858,5 @@  GLIBC_2.43 memset_explicit F
 GLIBC_2.43 mseal F
 GLIBC_2.43 openat2 F
 GLIBC_2.43 umaxabs F
+GLIBC_2.44 posix_spawn_file_actions_addchdir F
+GLIBC_2.44 posix_spawn_file_actions_addfchdir F
diff --git a/sysdeps/unix/sysv/linux/mips/mips32/fpu/libc.abilist b/sysdeps/unix/sysv/linux/mips/mips32/fpu/libc.abilist
index 031e8961acc..2e10a24e3ec 100644
--- a/sysdeps/unix/sysv/linux/mips/mips32/fpu/libc.abilist
+++ b/sysdeps/unix/sysv/linux/mips/mips32/fpu/libc.abilist
@@ -2938,6 +2938,8 @@  GLIBC_2.43 memset_explicit F
 GLIBC_2.43 mseal F
 GLIBC_2.43 openat2 F
 GLIBC_2.43 umaxabs F
+GLIBC_2.44 posix_spawn_file_actions_addchdir F
+GLIBC_2.44 posix_spawn_file_actions_addfchdir F
 GLIBC_2.5 __readlinkat_chk F
 GLIBC_2.5 inet6_opt_append F
 GLIBC_2.5 inet6_opt_find F
diff --git a/sysdeps/unix/sysv/linux/mips/mips32/nofpu/libc.abilist b/sysdeps/unix/sysv/linux/mips/mips32/nofpu/libc.abilist
index 8dc99d81b4b..6f4596e7592 100644
--- a/sysdeps/unix/sysv/linux/mips/mips32/nofpu/libc.abilist
+++ b/sysdeps/unix/sysv/linux/mips/mips32/nofpu/libc.abilist
@@ -2936,6 +2936,8 @@  GLIBC_2.43 memset_explicit F
 GLIBC_2.43 mseal F
 GLIBC_2.43 openat2 F
 GLIBC_2.43 umaxabs F
+GLIBC_2.44 posix_spawn_file_actions_addchdir F
+GLIBC_2.44 posix_spawn_file_actions_addfchdir F
 GLIBC_2.5 __readlinkat_chk F
 GLIBC_2.5 inet6_opt_append F
 GLIBC_2.5 inet6_opt_find F
diff --git a/sysdeps/unix/sysv/linux/mips/mips64/n32/libc.abilist b/sysdeps/unix/sysv/linux/mips/mips64/n32/libc.abilist
index 054c5b6391b..c48228d2124 100644
--- a/sysdeps/unix/sysv/linux/mips/mips64/n32/libc.abilist
+++ b/sysdeps/unix/sysv/linux/mips/mips64/n32/libc.abilist
@@ -2944,6 +2944,8 @@  GLIBC_2.43 memset_explicit F
 GLIBC_2.43 mseal F
 GLIBC_2.43 openat2 F
 GLIBC_2.43 umaxabs F
+GLIBC_2.44 posix_spawn_file_actions_addchdir F
+GLIBC_2.44 posix_spawn_file_actions_addfchdir F
 GLIBC_2.5 __readlinkat_chk F
 GLIBC_2.5 inet6_opt_append F
 GLIBC_2.5 inet6_opt_find F
diff --git a/sysdeps/unix/sysv/linux/mips/mips64/n64/libc.abilist b/sysdeps/unix/sysv/linux/mips/mips64/n64/libc.abilist
index 13f0148bc00..cb878d5c767 100644
--- a/sysdeps/unix/sysv/linux/mips/mips64/n64/libc.abilist
+++ b/sysdeps/unix/sysv/linux/mips/mips64/n64/libc.abilist
@@ -2846,6 +2846,8 @@  GLIBC_2.43 memset_explicit F
 GLIBC_2.43 mseal F
 GLIBC_2.43 openat2 F
 GLIBC_2.43 umaxabs F
+GLIBC_2.44 posix_spawn_file_actions_addchdir F
+GLIBC_2.44 posix_spawn_file_actions_addfchdir F
 GLIBC_2.5 __readlinkat_chk F
 GLIBC_2.5 inet6_opt_append F
 GLIBC_2.5 inet6_opt_find F
diff --git a/sysdeps/unix/sysv/linux/or1k/libc.abilist b/sysdeps/unix/sysv/linux/or1k/libc.abilist
index e7ffe07dd8d..da19fa577c4 100644
--- a/sysdeps/unix/sysv/linux/or1k/libc.abilist
+++ b/sysdeps/unix/sysv/linux/or1k/libc.abilist
@@ -2286,3 +2286,5 @@  GLIBC_2.43 memset_explicit F
 GLIBC_2.43 mseal F
 GLIBC_2.43 openat2 F
 GLIBC_2.43 umaxabs F
+GLIBC_2.44 posix_spawn_file_actions_addchdir F
+GLIBC_2.44 posix_spawn_file_actions_addfchdir F
diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/libc.abilist b/sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/libc.abilist
index dea4b20f05c..0402f85e4e7 100644
--- a/sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/libc.abilist
+++ b/sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/libc.abilist
@@ -3165,6 +3165,8 @@  GLIBC_2.43 memset_explicit F
 GLIBC_2.43 mseal F
 GLIBC_2.43 openat2 F
 GLIBC_2.43 umaxabs F
+GLIBC_2.44 posix_spawn_file_actions_addchdir F
+GLIBC_2.44 posix_spawn_file_actions_addfchdir F
 GLIBC_2.5 __readlinkat_chk F
 GLIBC_2.5 inet6_opt_append F
 GLIBC_2.5 inet6_opt_find F
diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/libc.abilist b/sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/libc.abilist
index b45e1274636..0bbd88a8d2c 100644
--- a/sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/libc.abilist
+++ b/sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/libc.abilist
@@ -3210,6 +3210,8 @@  GLIBC_2.43 memset_explicit F
 GLIBC_2.43 mseal F
 GLIBC_2.43 openat2 F
 GLIBC_2.43 umaxabs F
+GLIBC_2.44 posix_spawn_file_actions_addchdir F
+GLIBC_2.44 posix_spawn_file_actions_addfchdir F
 GLIBC_2.5 __readlinkat_chk F
 GLIBC_2.5 inet6_opt_append F
 GLIBC_2.5 inet6_opt_find F
diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc64/be/libc.abilist b/sysdeps/unix/sysv/linux/powerpc/powerpc64/be/libc.abilist
index 942cf6a0276..641b3707917 100644
--- a/sysdeps/unix/sysv/linux/powerpc/powerpc64/be/libc.abilist
+++ b/sysdeps/unix/sysv/linux/powerpc/powerpc64/be/libc.abilist
@@ -2919,6 +2919,8 @@  GLIBC_2.43 memset_explicit F
 GLIBC_2.43 mseal F
 GLIBC_2.43 openat2 F
 GLIBC_2.43 umaxabs F
+GLIBC_2.44 posix_spawn_file_actions_addchdir F
+GLIBC_2.44 posix_spawn_file_actions_addfchdir F
 GLIBC_2.5 __readlinkat_chk F
 GLIBC_2.5 inet6_opt_append F
 GLIBC_2.5 inet6_opt_find F
diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc64/le/libc.abilist b/sysdeps/unix/sysv/linux/powerpc/powerpc64/le/libc.abilist
index 65d78e50760..2a340ae799a 100644
--- a/sysdeps/unix/sysv/linux/powerpc/powerpc64/le/libc.abilist
+++ b/sysdeps/unix/sysv/linux/powerpc/powerpc64/le/libc.abilist
@@ -2995,3 +2995,5 @@  GLIBC_2.43 memset_explicit F
 GLIBC_2.43 mseal F
 GLIBC_2.43 openat2 F
 GLIBC_2.43 umaxabs F
+GLIBC_2.44 posix_spawn_file_actions_addchdir F
+GLIBC_2.44 posix_spawn_file_actions_addfchdir F
diff --git a/sysdeps/unix/sysv/linux/riscv/rv32/libc.abilist b/sysdeps/unix/sysv/linux/riscv/rv32/libc.abilist
index dcab30d72ee..123f95deb03 100644
--- a/sysdeps/unix/sysv/linux/riscv/rv32/libc.abilist
+++ b/sysdeps/unix/sysv/linux/riscv/rv32/libc.abilist
@@ -2539,3 +2539,5 @@  GLIBC_2.43 memset_explicit F
 GLIBC_2.43 mseal F
 GLIBC_2.43 openat2 F
 GLIBC_2.43 umaxabs F
+GLIBC_2.44 posix_spawn_file_actions_addchdir F
+GLIBC_2.44 posix_spawn_file_actions_addfchdir F
diff --git a/sysdeps/unix/sysv/linux/riscv/rv64/libc.abilist b/sysdeps/unix/sysv/linux/riscv/rv64/libc.abilist
index 796ef35e26e..16882af3d7e 100644
--- a/sysdeps/unix/sysv/linux/riscv/rv64/libc.abilist
+++ b/sysdeps/unix/sysv/linux/riscv/rv64/libc.abilist
@@ -2739,3 +2739,5 @@  GLIBC_2.43 memset_explicit F
 GLIBC_2.43 mseal F
 GLIBC_2.43 openat2 F
 GLIBC_2.43 umaxabs F
+GLIBC_2.44 posix_spawn_file_actions_addchdir F
+GLIBC_2.44 posix_spawn_file_actions_addfchdir F
diff --git a/sysdeps/unix/sysv/linux/s390/libc.abilist b/sysdeps/unix/sysv/linux/s390/libc.abilist
index 8f2350ee0b6..d88ff422b89 100644
--- a/sysdeps/unix/sysv/linux/s390/libc.abilist
+++ b/sysdeps/unix/sysv/linux/s390/libc.abilist
@@ -2956,6 +2956,8 @@  GLIBC_2.43 memset_explicit F
 GLIBC_2.43 mseal F
 GLIBC_2.43 openat2 F
 GLIBC_2.43 umaxabs F
+GLIBC_2.44 posix_spawn_file_actions_addchdir F
+GLIBC_2.44 posix_spawn_file_actions_addfchdir F
 GLIBC_2.5 __readlinkat_chk F
 GLIBC_2.5 inet6_opt_append F
 GLIBC_2.5 inet6_opt_find F
diff --git a/sysdeps/unix/sysv/linux/sh/be/libc.abilist b/sysdeps/unix/sysv/linux/sh/be/libc.abilist
index 7aa98c5aede..43078012ef0 100644
--- a/sysdeps/unix/sysv/linux/sh/be/libc.abilist
+++ b/sysdeps/unix/sysv/linux/sh/be/libc.abilist
@@ -2855,6 +2855,8 @@  GLIBC_2.43 memset_explicit F
 GLIBC_2.43 mseal F
 GLIBC_2.43 openat2 F
 GLIBC_2.43 umaxabs F
+GLIBC_2.44 posix_spawn_file_actions_addchdir F
+GLIBC_2.44 posix_spawn_file_actions_addfchdir F
 GLIBC_2.5 __readlinkat_chk F
 GLIBC_2.5 inet6_opt_append F
 GLIBC_2.5 inet6_opt_find F
diff --git a/sysdeps/unix/sysv/linux/sh/le/libc.abilist b/sysdeps/unix/sysv/linux/sh/le/libc.abilist
index 6bd4f8f63a1..5c78e5b8442 100644
--- a/sysdeps/unix/sysv/linux/sh/le/libc.abilist
+++ b/sysdeps/unix/sysv/linux/sh/le/libc.abilist
@@ -2852,6 +2852,8 @@  GLIBC_2.43 memset_explicit F
 GLIBC_2.43 mseal F
 GLIBC_2.43 openat2 F
 GLIBC_2.43 umaxabs F
+GLIBC_2.44 posix_spawn_file_actions_addchdir F
+GLIBC_2.44 posix_spawn_file_actions_addfchdir F
 GLIBC_2.5 __readlinkat_chk F
 GLIBC_2.5 inet6_opt_append F
 GLIBC_2.5 inet6_opt_find F
diff --git a/sysdeps/unix/sysv/linux/sparc/sparc32/libc.abilist b/sysdeps/unix/sysv/linux/sparc/sparc32/libc.abilist
index b52cab2a351..209ca5858be 100644
--- a/sysdeps/unix/sysv/linux/sparc/sparc32/libc.abilist
+++ b/sysdeps/unix/sysv/linux/sparc/sparc32/libc.abilist
@@ -3186,6 +3186,8 @@  GLIBC_2.43 memset_explicit F
 GLIBC_2.43 mseal F
 GLIBC_2.43 openat2 F
 GLIBC_2.43 umaxabs F
+GLIBC_2.44 posix_spawn_file_actions_addchdir F
+GLIBC_2.44 posix_spawn_file_actions_addfchdir F
 GLIBC_2.5 __readlinkat_chk F
 GLIBC_2.5 inet6_opt_append F
 GLIBC_2.5 inet6_opt_find F
diff --git a/sysdeps/unix/sysv/linux/sparc/sparc64/libc.abilist b/sysdeps/unix/sysv/linux/sparc/sparc64/libc.abilist
index ff99cd4f219..79b9d7adcbd 100644
--- a/sysdeps/unix/sysv/linux/sparc/sparc64/libc.abilist
+++ b/sysdeps/unix/sysv/linux/sparc/sparc64/libc.abilist
@@ -2822,6 +2822,8 @@  GLIBC_2.43 memset_explicit F
 GLIBC_2.43 mseal F
 GLIBC_2.43 openat2 F
 GLIBC_2.43 umaxabs F
+GLIBC_2.44 posix_spawn_file_actions_addchdir F
+GLIBC_2.44 posix_spawn_file_actions_addfchdir F
 GLIBC_2.5 __readlinkat_chk F
 GLIBC_2.5 inet6_opt_append F
 GLIBC_2.5 inet6_opt_find F
diff --git a/sysdeps/unix/sysv/linux/x86_64/64/libc.abilist b/sysdeps/unix/sysv/linux/x86_64/64/libc.abilist
index 306cd627fd8..3c42d9526d5 100644
--- a/sysdeps/unix/sysv/linux/x86_64/64/libc.abilist
+++ b/sysdeps/unix/sysv/linux/x86_64/64/libc.abilist
@@ -2771,6 +2771,8 @@  GLIBC_2.43 memset_explicit F
 GLIBC_2.43 mseal F
 GLIBC_2.43 openat2 F
 GLIBC_2.43 umaxabs F
+GLIBC_2.44 posix_spawn_file_actions_addchdir F
+GLIBC_2.44 posix_spawn_file_actions_addfchdir F
 GLIBC_2.5 __readlinkat_chk F
 GLIBC_2.5 inet6_opt_append F
 GLIBC_2.5 inet6_opt_find F
diff --git a/sysdeps/unix/sysv/linux/x86_64/x32/libc.abilist b/sysdeps/unix/sysv/linux/x86_64/x32/libc.abilist
index 8b9c448742e..68a03e00291 100644
--- a/sysdeps/unix/sysv/linux/x86_64/x32/libc.abilist
+++ b/sysdeps/unix/sysv/linux/x86_64/x32/libc.abilist
@@ -2790,3 +2790,5 @@  GLIBC_2.43 memset_explicit F
 GLIBC_2.43 mseal F
 GLIBC_2.43 openat2 F
 GLIBC_2.43 umaxabs F
+GLIBC_2.44 posix_spawn_file_actions_addchdir F
+GLIBC_2.44 posix_spawn_file_actions_addfchdir F