[v22,2/9] posix: let the getopt caller set the translation context

Message ID 081a71d7a620b3f704bab0c0705ae02f3c582d9f.1776957778.git.vivien@planete-kraus.eu (mailing list archive)
State New
Headers
Series Support translated long option names in getopt and argp |

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-still_applies warning Patch no longer applies to master

Commit Message

Vivien Kraus April 23, 2026, 4:04 p.m. UTC
  Option names are typically one word, so they could be translated
differently in different parts of the program.  The use of a context
lets the translator pick the most appropriate translation when used in
the command-line.

Another possibility would be to prepend two dashes to the option name
before translation, such that it would be obvious this is the
command-line option name.  However, it would be difficult to mark this
string for translation (to be processed by xgettext).

This patch creates a new global variable / reentrant state field,
optctxt, a pointer, so that the caller can override it.  If it is not
set, or set to NULL, then no translated option name will be
recognized.  To avoid exporting global variables, a couple of
functions have been added to set it.

pgettext_expr is not available yet, so we use a custom function to
combine the context and the long option name, and discard the context
if no translation was performed.
---
 NEWS                                          |  5 ++
 manual/getopt.texi                            | 41 +++++++---
 posix/Versions                                |  4 +
 posix/bits/getopt_ext.h                       |  3 +
 posix/getopt.c                                | 47 ++++++++----
 posix/getopt1.c                               | 74 ++++++++++++++++++-
 posix/getopt_int.h                            |  8 +-
 posix/tstgetoptl.c                            | 38 ++++++++--
 posix/tstgetoptl.po                           |  3 +
 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 +
 43 files changed, 253 insertions(+), 38 deletions(-)
  

Patch

diff --git a/NEWS b/NEWS
index 4e53a079e9..48f7589f49 100644
--- a/NEWS
+++ b/NEWS
@@ -19,6 +19,11 @@  Major new features:
 * New locale added: hrx_BR (Hunsrik language spoken in Brazil).
 
 * The getopt_long function now accepts translated long option names.
+  This functionality is enabled or disabled by calling
+  getopt_long_enable_translations / getopt_long_disable_translations.
+
+* Argp parsers enable translated long option names with "command-line
+  option" as the message context.
 
 Deprecated and removed features, and other changes affecting compatibility:
 
diff --git a/manual/getopt.texi b/manual/getopt.texi
index 5ae22a1595..fe45ae55a3 100644
--- a/manual/getopt.texi
+++ b/manual/getopt.texi
@@ -202,15 +202,6 @@  declared in @file{getopt.h}, not @file{unistd.h}.  You should make every
 program accept long options if it uses any options, for this takes
 little extra work and helps beginners remember how to use the program.
 
-Both long option names and their translations provided by the program
-for the user's current locale are recognized.  This helps users of
-your program who do not speak English understand the meaning of the
-options, and it does not break the function of the program in scripts
-if the untranslated option names are used.  If international
-communication involves the invocation of your program, the program
-users should be encouraged to use untranslated option names or publish
-the locale used for this invocation.
-
 @deftp {Data Type} {struct option}
 @standards{GNU, getopt.h}
 This structure describes a single long option name for the sake of
@@ -224,7 +215,8 @@  The @code{struct option} structure has these fields:
 @item const char *name
 This field is the name of the option.  It is a string.  In order for
 @command{getopt_long} to accept either the long option name or its
-translated form, you should mark this string for translation.
+translated form, you should mark this string for translation with a
+translation context, and call @code{getopt_long_enable_translations}.
 
 @item int has_arg
 This field says whether the option takes an argument.  It is an integer,
@@ -246,6 +238,35 @@  was seen.
 @end table
 @end deftp
 
+@deftypefun int getopt_long_enable_translations (const char *@var{msgctxt})
+@deftypefunx void getopt_long_disable_translations (void)
+@standards{GNU, getopt.h}
+@c FIXME: I copied that from getopt_long, but I don't understand
+@c it. getopt_long_*able_translations use malloc/free and modifies
+@c global state.
+@safety{@prelim{}@mtunsafe{@mtasurace{:getopt} @mtsenv{}}@asunsafe{@ascuheap{} @ascuintl{} @asulock{} @asucorrupt{}}@acunsafe{@acsmem{} @aculock{} @acucorrupt{}}}
+If long option translations are enabled, then both long option names
+and their translations provided by the program for the user's current
+locale are recognized.  This helps users of your program who do not
+speak English understand the meaning of the options, without breaking
+the function of the program in scripts if the untranslated option
+names are used.  If international communication involves the
+invocation of your program, the program users should be encouraged to
+use untranslated option names or publish the locale used for this
+invocation.
+
+Since option names may be short words instead of long sentences, they
+may have different translations in different contexts within the same
+program.  @xref{Contexts, , Using contexts for solving ambiguities,
+gettext, the GNU Gettext manual}, for more information.  @var{msgctxt}
+should be a non-NULL string to disambiguate option name translations.
+Passing NULL, or calling @code{getopt_long_disable_translations()},
+will disable option name translation.
+
+@code{getopt_long_enable_translations} returns 0 on success, or -1 and
+sets errno.
+@end deftypefun
+
 @deftypefun int getopt_long (int @var{argc}, char *const *@var{argv}, const char *@var{shortopts}, const struct option *@var{longopts}, int *@var{indexptr})
 @standards{GNU, getopt.h}
 @safety{@prelim{}@mtunsafe{@mtasurace{:getopt} @mtsenv{}}@asunsafe{@ascuheap{} @ascuintl{} @asulock{} @asucorrupt{}}@acunsafe{@acsmem{} @aculock{} @acucorrupt{}}}
diff --git a/posix/Versions b/posix/Versions
index 0624d24bcc..10ca3b7ea3 100644
--- a/posix/Versions
+++ b/posix/Versions
@@ -159,6 +159,10 @@  libc {
   GLIBC_2.35 {
     posix_spawn_file_actions_addtcsetpgrp_np;
   }
+  GLIBC_2.44 {
+    getopt_long_enable_translations;
+    getopt_long_disable_translations;
+  }
   GLIBC_PRIVATE {
     __libc_fork; __libc_pread; __libc_pwrite;
     __nanosleep_nocancel; __pause_nocancel;
diff --git a/posix/bits/getopt_ext.h b/posix/bits/getopt_ext.h
index 94ca758fcd..8f065bbe9f 100644
--- a/posix/bits/getopt_ext.h
+++ b/posix/bits/getopt_ext.h
@@ -71,6 +71,9 @@  extern int getopt_long_only (int ___argc, char *__getopt_argv_const *___argv,
 			     const char *__shortopts,
 		             const struct option *__longopts, int *__longind)
        __THROW __nonnull ((2, 3));
+extern int getopt_long_enable_translations (const char *__msgctxt)
+       __attribute_warn_unused_result__;
+extern void getopt_long_disable_translations (void);
 
 __END_DECLS
 
diff --git a/posix/getopt.c b/posix/getopt.c
index cdc02d4da9..6717449b5c 100644
--- a/posix/getopt.c
+++ b/posix/getopt.c
@@ -182,22 +182,30 @@  exchange (char **argv, struct _getopt_data *d)
   d->__last_nonopt = d->optind;
 }
 
-/* Return true iff a translation for opt_name has been found and it
-   matches the substring from argument, length argument_length.
+/* Return true iff translation_context is not NULL, a translation for
+   opt_name has been found and it matches the substring from argument,
+   length argument_length.
 */
 static bool
-match_translated_option_name (char *(*translate) (const char *msgid),
+match_translated_option_name (char *(*translate) (const char *, const char *,
+						  char **),
 			      const char *argument, size_t argument_length,
+			      const char *translation_context,
 			      const char *opt_name)
 {
   const char *translated = opt_name;
+  char *translation_buffer = NULL;
+  bool matches = false;
   if (translate != NULL)
-    translated = translate (opt_name);
+    translated = translate (translation_context, opt_name, &translation_buffer);
 
   if (strncmp (translated, argument, argument_length) != 0)
-    return false;
-  /* We know that argument is a prefix of translated.  */
-  return translated[argument_length] == '\0';
+    matches = false;
+  else
+    /* We know that argument is a prefix of translated.  */
+    matches = translated[argument_length] == '\0';
+  free (translation_buffer);
+  return matches;
 }
 
 /* Process the argument starting with d->__nextchar as a long option.
@@ -213,7 +221,8 @@  process_long_option (int argc, char **argv, const char *optstring,
 		     const struct option *longopts, int *longind,
 		     int long_only, struct _getopt_data *d,
 		     int print_errors, const char *prefix,
-		     char *(*translate) (const char *msgid))
+		     char *(*translate) (const char *, const char *,
+					 char **))
 {
   char *nameend;
   size_t namelen;
@@ -222,6 +231,7 @@  process_long_option (int argc, char **argv, const char *optstring,
   int n_options;
   int option_index;
   const char *translated_option_name;
+  char *translation_buffer = NULL;
 
   for (nameend = d->__nextchar; *nameend && *nameend != '='; nameend++)
     /* Do nothing.  */ ;
@@ -244,7 +254,9 @@  process_long_option (int argc, char **argv, const char *optstring,
       /* Didn't find an exact match, try with translated option
 	 names.  */
       for (p = longopts, option_index = 0; p->name; p++, option_index++)
-	if (match_translated_option_name (translate, d->__nextchar, namelen, p->name))
+	if (match_translated_option_name (translate,
+					  d->__nextchar, namelen,
+					  d->optctxt, p->name))
 	  {
 	    /* Exact match found with translation.  */
 	    pfound = p;
@@ -377,7 +389,8 @@  process_long_option (int argc, char **argv, const char *optstring,
 	{
 	  if (print_errors)
 	    {
-	      translated_option_name = translate (pfound->name);
+	      translated_option_name = translate (d->optctxt, pfound->name,
+						  &translation_buffer);
 	      if (strcmp (translated_option_name, pfound->name) != 0)
 		/* Print both names of the option.  */
 		fprintf (stderr,
@@ -389,6 +402,7 @@  process_long_option (int argc, char **argv, const char *optstring,
 		fprintf (stderr,
 			 _("%s: option '%s%s' doesn't allow an argument\n"),
 			 argv[0], prefix, pfound->name);
+	      free (translation_buffer);
 	    }
 	  d->optopt = pfound->val;
 	  return '?';
@@ -404,7 +418,8 @@  process_long_option (int argc, char **argv, const char *optstring,
 	    {
 	      /* Same dichotomy as when the option does not allow an
 		 argument.  */
-	      translated_option_name = translate (pfound->name);
+	      translated_option_name = translate (d->optctxt, pfound->name,
+						  &translation_buffer);
 	      if (strcmp (translated_option_name, pfound->name) != 0)
 		fprintf (stderr,
 			 _("%s: option '%s%s' / '%s%s' requires an argument\n"),
@@ -413,6 +428,7 @@  process_long_option (int argc, char **argv, const char *optstring,
 		fprintf (stderr,
 			 _("%s: option '%s%s' requires an argument\n"),
 			 argv[0], prefix, pfound->name);
+	      free (translation_buffer);
 	    }
 
 	  d->optopt = pfound->val;
@@ -526,7 +542,7 @@  int
 _getopt_internal_r (int argc, char **argv, const char *optstring,
 		    const struct option *longopts, int *longind,
 		    int long_only, struct _getopt_data *d, int posixly_correct,
-		    char *(*translate) (const char *msgid))
+		    char *(*translate) (const char *, const char *, char **))
 {
   int print_errors = d->opterr;
 
@@ -761,12 +777,15 @@  _getopt_internal_r (int argc, char **argv, const char *optstring,
 int
 _getopt_internal (int argc, char **argv, const char *optstring,
 		  const struct option *longopts, int *longind, int long_only,
-		  int posixly_correct, char *(*translate) (const char *))
+		  int posixly_correct,
+		  char *(*translate) (const char *, const char *, char **),
+		  const char *ctxt)
 {
   int result;
 
   getopt_data.optind = optind;
   getopt_data.opterr = opterr;
+  getopt_data.optctxt = ctxt;
 
   result = _getopt_internal_r (argc, argv, optstring, longopts,
 			       longind, long_only, &getopt_data,
@@ -789,7 +808,7 @@  _getopt_internal (int argc, char **argv, const char *optstring,
   {								\
     return _getopt_internal (argc, (char **)argv, optstring,	\
 			     NULL, NULL, 0, POSIXLY_CORRECT,	\
-			     NULL);				\
+			     NULL, NULL);			\
   }
 
 #ifdef _LIBC
diff --git a/posix/getopt1.c b/posix/getopt1.c
index 6342e2d417..87fe067655 100644
--- a/posix/getopt1.c
+++ b/posix/getopt1.c
@@ -26,13 +26,53 @@ 
 
 #include "getopt.h"
 #include "getopt_int.h"
+#include <stdlib.h>
+#include <string.h>
+#include <stdio.h>
+#include <assert.h>
+
+/* Callers store an optional context to enable option name
+   translation.  The argument is allocated.  */
+
+char *optctxt = NULL;
+
+/* FIXME: use pgettext_expr.  */
+static char *
+do_translate (const char *context, const char *msgid, char **allocated)
+{
+  char *full_msgid;
+  const char *translated = msgid;
+  int output_length = 0;
+
+  *allocated = NULL;
+  if (context != NULL)
+    {
+      output_length = __asprintf (&full_msgid, "%s\004%s", context, msgid);
+      *allocated = full_msgid;
+      if (output_length >= 0)
+	{
+	  translated = __dcgettext (NULL, full_msgid, LC_MESSAGES);
+	  if (strcmp (translated, full_msgid) == 0)
+	    {
+	      /* No translation for this context and message, so drop
+		 the context + ^D prefix.  */
+	      translated = msgid;
+	    }
+	}
+      /* Otherwise, if memory allocation failed, then we won’t accept
+	 translations.  translated remains an alias to msgid.  */
+    }
+  else
+    translated = msgid;
+  return (char *) translated;
+}
 
 int
 getopt_long (int argc, char *__getopt_argv_const *argv, const char *options,
 	     const struct option *long_options, int *opt_index)
 {
   return _getopt_internal (argc, (char **) argv, options, long_options,
-			   opt_index, 0, 0, gettext);
+			   opt_index, 0, 0, do_translate, optctxt);
 }
 
 int
@@ -41,7 +81,7 @@  _getopt_long_r (int argc, char **argv, const char *options,
 		struct _getopt_data *d)
 {
   return _getopt_internal_r (argc, argv, options, long_options, opt_index,
-			     0, d, 0, gettext);
+			     0, d, 0, do_translate);
 }
 
 /* Like getopt_long, but '-' as well as '--' can indicate a long option.
@@ -55,7 +95,7 @@  getopt_long_only (int argc, char *__getopt_argv_const *argv,
 		  const struct option *long_options, int *opt_index)
 {
   return _getopt_internal (argc, (char **) argv, options, long_options,
-			   opt_index, 1, 0, gettext);
+			   opt_index, 1, 0, do_translate, optctxt);
 }
 
 int
@@ -64,7 +104,33 @@  _getopt_long_only_r (int argc, char **argv, const char *options,
 		     struct _getopt_data *d)
 {
   return _getopt_internal_r (argc, argv, options, long_options, opt_index,
-			     1, d, 0, gettext);
+			     1, d, 0, do_translate);
+}
+
+static void
+disable_translations (void)
+{
+  free (optctxt);
+  optctxt = NULL;
+}
+
+int
+getopt_long_enable_translations (const char *msgctxt)
+{
+  disable_translations ();
+  if (msgctxt != NULL)
+    {
+      optctxt = __strdup (msgctxt);
+      if (optctxt == NULL)
+	return -1;
+    }
+  return 0;
+}
+
+void
+getopt_long_disable_translations (void)
+{
+  disable_translations ();
 }
 
 
diff --git a/posix/getopt_int.h b/posix/getopt_int.h
index 579233b08c..fcfec242c1 100644
--- a/posix/getopt_int.h
+++ b/posix/getopt_int.h
@@ -29,7 +29,9 @@  extern int _getopt_internal (int ___argc, char **___argv,
 			     const char *__shortopts,
 			     const struct option *__longopts, int *__longind,
 			     int __long_only, int __posixly_correct,
-			     char *(*translate) (const char *msgid));
+			     char *(*translate) (const char *, const char *,
+						 char **),
+			     const char *__optctxt);
 
 
 /* Reentrant versions which can handle parsing multiple argument
@@ -71,6 +73,7 @@  struct _getopt_data
   int opterr;
   int optopt;
   char *optarg;
+  const char *optctxt;
 
   /* Internal members.  */
 
@@ -107,7 +110,8 @@  extern int _getopt_internal_r (int ___argc, char **___argv,
 			       const struct option *__longopts, int *__longind,
 			       int __long_only, struct _getopt_data *__data,
 			       int __posixly_correct,
-			       char *(*translate) (const char *msgid));
+			       char *(*translate) (const char *, const char *,
+						   char **));
 
 extern int _getopt_long_r (int ___argc, char **___argv,
 			   const char *__shortopts,
diff --git a/posix/tstgetoptl.c b/posix/tstgetoptl.c
index afefcf46f5..1e970ad407 100644
--- a/posix/tstgetoptl.c
+++ b/posix/tstgetoptl.c
@@ -39,6 +39,8 @@ 
    known translation of flavor) without the program recognizing a
    --flavor option.  */
 
+#define TRANSLATION_CONTEXT "command-line option"
+
 static void
 prepare_localedir (void)
 {
@@ -47,8 +49,8 @@  prepare_localedir (void)
   TEST_VERIFY_EXIT (bindtextdomain ("tstgetoptl", OBJPFX "domaindir") != NULL);
   TEST_VERIFY_EXIT (textdomain ("tstgetoptl") != NULL);
   /* Check that the catalog is OK: */
-  TEST_COMPARE_STRING (gettext ("color"), "colour");
-  TEST_COMPARE_STRING (gettext ("flavor"), "flavour");
+  TEST_COMPARE_STRING (gettext (TRANSLATION_CONTEXT "\004" "color"), "colour");
+  TEST_COMPARE_STRING (gettext (TRANSLATION_CONTEXT "\004" "flavor"), "flavour");
 }
 
 static char **
@@ -65,8 +67,9 @@  prepare_argv (int *argc)
 }
 
 static void
-do_my_test (void)
+do_my_test (bool with_optctxt)
 {
+  static const char *translation_context = TRANSLATION_CONTEXT;
   int argc;
   char **argv = prepare_argv (&argc);
   static const struct option options[] =
@@ -87,8 +90,14 @@  do_my_test (void)
   int c;
   bool found_flavor = false;
 
+  if (with_optctxt)
+    TEST_VERIFY_EXIT (getopt_long_enable_translations (translation_context) == 0);
+  else
+    getopt_long_disable_translations ();
   optind = 0;
   fputs ("Reminder that --flavor is not an option of the program.\n", stderr);
+  if (!with_optctxt)
+    fputs ("No optctxt set, so --colour should not be recognized.\n", stderr);
   while ((c = getopt_long (argc, argv, "", options, NULL)) >= 0)
     switch (c)
       {
@@ -96,8 +105,13 @@  do_my_test (void)
 	++Cflag;
 	break;
       case '?':
-	TEST_VERIFY (!found_flavor);
-	found_flavor = true;
+	if (with_optctxt)
+	  {
+	    TEST_VERIFY (!found_flavor);
+	    found_flavor = true;
+	  }
+	/* Otherwise, this is OK; --colour should not exist if we did not set
+	   optctxt.  */
 	break;
       default:
 	/* This should not happen.  */
@@ -115,11 +129,18 @@  do_my_test (void)
 	break;
       }
 
-  TEST_VERIFY (found_flavor);
+  if (with_optctxt)
+    TEST_VERIFY (found_flavor);
 
   printf ("Cflags = %d\n", Cflag);
 
-  TEST_COMPARE (Cflag, 3);
+  if (with_optctxt)
+    TEST_COMPARE (Cflag, 3);
+  else
+    TEST_COMPARE (Cflag, 2);
+
+  if (with_optctxt)
+    getopt_long_disable_translations ();
 
   for (index = optind; index < argc; index++)
     printf ("Non-option argument %s\n", argv[index]);
@@ -131,7 +152,8 @@  int
 do_test (void)
 {
   prepare_localedir ();
-  do_my_test ();
+  do_my_test (false);
+  do_my_test (true);
   return 0;
 }
 
diff --git a/posix/tstgetoptl.po b/posix/tstgetoptl.po
index 7091884faf..7dc15e71f3 100644
--- a/posix/tstgetoptl.po
+++ b/posix/tstgetoptl.po
@@ -16,14 +16,17 @@  msgstr ""
 "Plural-Forms: nplurals=2; plural=(n != 1);\n"
 
 #: xxx.c:yy
+msgctxt "command-line option"
 msgid "color"
 msgstr "colour"
 
 #: xxx.c:yy
+msgctxt "command-line option"
 msgid "flavor"
 msgstr "flavour"
 
 # This is to make sure the translator cannot redirect options.
 #: xxx.c:yy
+msgctxt "command-line option"
 msgid "optional"
 msgstr "required"
diff --git a/sysdeps/mach/hurd/i386/libc.abilist b/sysdeps/mach/hurd/i386/libc.abilist
index 0166703bdb..b3e5510297 100644
--- a/sysdeps/mach/hurd/i386/libc.abilist
+++ b/sysdeps/mach/hurd/i386/libc.abilist
@@ -2818,6 +2818,8 @@  GLIBC_2.44 gai_cancel F
 GLIBC_2.44 gai_error F
 GLIBC_2.44 gai_suspend F
 GLIBC_2.44 getaddrinfo_a F
+GLIBC_2.44 getopt_long_disable_translations F
+GLIBC_2.44 getopt_long_enable_translations F
 GLIBC_2.44 lio_listio F
 GLIBC_2.44 lio_listio64 F
 GLIBC_2.44 mq_close F
diff --git a/sysdeps/mach/hurd/x86_64/libc.abilist b/sysdeps/mach/hurd/x86_64/libc.abilist
index 0262a079aa..dcfac4bd51 100644
--- a/sysdeps/mach/hurd/x86_64/libc.abilist
+++ b/sysdeps/mach/hurd/x86_64/libc.abilist
@@ -2494,6 +2494,8 @@  GLIBC_2.44 gai_cancel F
 GLIBC_2.44 gai_error F
 GLIBC_2.44 gai_suspend F
 GLIBC_2.44 getaddrinfo_a F
+GLIBC_2.44 getopt_long_disable_translations F
+GLIBC_2.44 getopt_long_enable_translations F
 GLIBC_2.44 lio_listio F
 GLIBC_2.44 lio_listio64 F
 GLIBC_2.44 mq_close F
diff --git a/sysdeps/unix/sysv/linux/aarch64/libc.abilist b/sysdeps/unix/sysv/linux/aarch64/libc.abilist
index 3156688add..7dd7c7aa88 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 getopt_long_disable_translations F
+GLIBC_2.44 getopt_long_enable_translations F
diff --git a/sysdeps/unix/sysv/linux/alpha/libc.abilist b/sysdeps/unix/sysv/linux/alpha/libc.abilist
index 8af5b0b581..bfbee2c31f 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 getopt_long_disable_translations F
+GLIBC_2.44 getopt_long_enable_translations 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 35fcef2cc4..00224995bb 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 getopt_long_disable_translations F
+GLIBC_2.44 getopt_long_enable_translations F
diff --git a/sysdeps/unix/sysv/linux/arm/be/libc.abilist b/sysdeps/unix/sysv/linux/arm/be/libc.abilist
index a6c6b951bf..8856423c37 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 getopt_long_disable_translations F
+GLIBC_2.44 getopt_long_enable_translations 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 e76015fe66..6718047590 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 getopt_long_disable_translations F
+GLIBC_2.44 getopt_long_enable_translations 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 1fb7cdcad5..c48b5fbbd5 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 getopt_long_disable_translations F
+GLIBC_2.44 getopt_long_enable_translations F
diff --git a/sysdeps/unix/sysv/linux/hppa/libc.abilist b/sysdeps/unix/sysv/linux/hppa/libc.abilist
index 0710ccecf9..9afdd0a2ea 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 getopt_long_disable_translations F
+GLIBC_2.44 getopt_long_enable_translations 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 3afe3a88eb..adf364236d 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 getopt_long_disable_translations F
+GLIBC_2.44 getopt_long_enable_translations 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 7c6d7055c3..a90b2a83ca 100644
--- a/sysdeps/unix/sysv/linux/loongarch/ilp32/libc.abilist
+++ b/sysdeps/unix/sysv/linux/loongarch/ilp32/libc.abilist
@@ -995,6 +995,8 @@  GLIBC_2.44 getnetgrent F
 GLIBC_2.44 getnetgrent_r F
 GLIBC_2.44 getopt F
 GLIBC_2.44 getopt_long F
+GLIBC_2.44 getopt_long_disable_translations F
+GLIBC_2.44 getopt_long_enable_translations F
 GLIBC_2.44 getopt_long_only F
 GLIBC_2.44 getpagesize F
 GLIBC_2.44 getpass F
diff --git a/sysdeps/unix/sysv/linux/loongarch/lp64/libc.abilist b/sysdeps/unix/sysv/linux/loongarch/lp64/libc.abilist
index c2b3a66d3a..2a547f5d7d 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 getopt_long_disable_translations F
+GLIBC_2.44 getopt_long_enable_translations F
diff --git a/sysdeps/unix/sysv/linux/m68k/coldfire/libc.abilist b/sysdeps/unix/sysv/linux/m68k/coldfire/libc.abilist
index d6855131e8..a967c60f07 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 getopt_long_disable_translations F
+GLIBC_2.44 getopt_long_enable_translations 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 4e3fe9c42f..486d5975ec 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 getopt_long_disable_translations F
+GLIBC_2.44 getopt_long_enable_translations 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 29f0c5f954..68ae7ff5ce 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 getopt_long_disable_translations F
+GLIBC_2.44 getopt_long_enable_translations F
diff --git a/sysdeps/unix/sysv/linux/microblaze/le/libc.abilist b/sysdeps/unix/sysv/linux/microblaze/le/libc.abilist
index 2ef62838f7..eb0d3ddf68 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 getopt_long_disable_translations F
+GLIBC_2.44 getopt_long_enable_translations F
diff --git a/sysdeps/unix/sysv/linux/mips/mips32/fpu/libc.abilist b/sysdeps/unix/sysv/linux/mips/mips32/fpu/libc.abilist
index 031e8961ac..0a9bad7ad0 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 getopt_long_disable_translations F
+GLIBC_2.44 getopt_long_enable_translations 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 8dc99d81b4..072c9df2c1 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 getopt_long_disable_translations F
+GLIBC_2.44 getopt_long_enable_translations 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 054c5b6391..9f738374d3 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 getopt_long_disable_translations F
+GLIBC_2.44 getopt_long_enable_translations 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 13f0148bc0..8b8b718d86 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 getopt_long_disable_translations F
+GLIBC_2.44 getopt_long_enable_translations 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 e7ffe07dd8..c63bc5d110 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 getopt_long_disable_translations F
+GLIBC_2.44 getopt_long_enable_translations F
diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/libc.abilist b/sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/libc.abilist
index dea4b20f05..2c5141623d 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 getopt_long_disable_translations F
+GLIBC_2.44 getopt_long_enable_translations 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 b45e127463..8d2194f22d 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 getopt_long_disable_translations F
+GLIBC_2.44 getopt_long_enable_translations 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 942cf6a027..b5f1a9cc83 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 getopt_long_disable_translations F
+GLIBC_2.44 getopt_long_enable_translations 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 65d78e5076..0b9c5761da 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 getopt_long_disable_translations F
+GLIBC_2.44 getopt_long_enable_translations F
diff --git a/sysdeps/unix/sysv/linux/riscv/rv32/libc.abilist b/sysdeps/unix/sysv/linux/riscv/rv32/libc.abilist
index dcab30d72e..75f37a6c9d 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 getopt_long_disable_translations F
+GLIBC_2.44 getopt_long_enable_translations F
diff --git a/sysdeps/unix/sysv/linux/riscv/rv64/libc.abilist b/sysdeps/unix/sysv/linux/riscv/rv64/libc.abilist
index 796ef35e26..d2e98816c7 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 getopt_long_disable_translations F
+GLIBC_2.44 getopt_long_enable_translations F
diff --git a/sysdeps/unix/sysv/linux/s390/libc.abilist b/sysdeps/unix/sysv/linux/s390/libc.abilist
index 8f2350ee0b..e19857bb81 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 getopt_long_disable_translations F
+GLIBC_2.44 getopt_long_enable_translations 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 7aa98c5aed..55bc8458c0 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 getopt_long_disable_translations F
+GLIBC_2.44 getopt_long_enable_translations 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 6bd4f8f63a..5bf43c1855 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 getopt_long_disable_translations F
+GLIBC_2.44 getopt_long_enable_translations 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 b52cab2a35..417e67f73b 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 getopt_long_disable_translations F
+GLIBC_2.44 getopt_long_enable_translations 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 ff99cd4f21..57c9590334 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 getopt_long_disable_translations F
+GLIBC_2.44 getopt_long_enable_translations 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 306cd627fd..6749f30c83 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 getopt_long_disable_translations F
+GLIBC_2.44 getopt_long_enable_translations 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 8b9c448742..d8899a2048 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 getopt_long_disable_translations F
+GLIBC_2.44 getopt_long_enable_translations F