get:
Show a patch.

patch:
Update a patch.

put:
Update a patch.

GET /api/1.1/patches/2227398/?format=api
HTTP 200 OK
Allow: GET, PUT, PATCH, HEAD, OPTIONS
Content-Type: application/json
Vary: Accept

{
    "id": 2227398,
    "url": "http://patchwork.ozlabs.org/api/1.1/patches/2227398/?format=api",
    "web_url": "http://patchwork.ozlabs.org/project/glibc/patch/081a71d7a620b3f704bab0c0705ae02f3c582d9f.1776957778.git.vivien@planete-kraus.eu/",
    "project": {
        "id": 41,
        "url": "http://patchwork.ozlabs.org/api/1.1/projects/41/?format=api",
        "name": "GNU C Library",
        "link_name": "glibc",
        "list_id": "libc-alpha.sourceware.org",
        "list_email": "libc-alpha@sourceware.org",
        "web_url": "",
        "scm_url": "",
        "webscm_url": ""
    },
    "msgid": "<081a71d7a620b3f704bab0c0705ae02f3c582d9f.1776957778.git.vivien@planete-kraus.eu>",
    "date": "2026-04-23T16:04:00",
    "name": "[v22,2/9] posix: let the getopt caller set the translation context",
    "commit_ref": null,
    "pull_url": null,
    "state": "new",
    "archived": false,
    "hash": "21b49b5a27aabd8c80f715a9237c02252111ed71",
    "submitter": {
        "id": 90948,
        "url": "http://patchwork.ozlabs.org/api/1.1/people/90948/?format=api",
        "name": "Vivien Kraus",
        "email": "vivien@planete-kraus.eu"
    },
    "delegate": null,
    "mbox": "http://patchwork.ozlabs.org/project/glibc/patch/081a71d7a620b3f704bab0c0705ae02f3c582d9f.1776957778.git.vivien@planete-kraus.eu/mbox/",
    "series": [
        {
            "id": 501215,
            "url": "http://patchwork.ozlabs.org/api/1.1/series/501215/?format=api",
            "web_url": "http://patchwork.ozlabs.org/project/glibc/list/?series=501215",
            "date": "2026-04-23T16:03:58",
            "name": "Support translated long option names in getopt and argp",
            "version": 22,
            "mbox": "http://patchwork.ozlabs.org/series/501215/mbox/"
        }
    ],
    "comments": "http://patchwork.ozlabs.org/api/patches/2227398/comments/",
    "check": "pending",
    "checks": "http://patchwork.ozlabs.org/api/patches/2227398/checks/",
    "tags": {},
    "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 secure) header.d=planete-kraus.eu header.i=@planete-kraus.eu\n header.a=rsa-sha1 header.s=albinoniA header.b=WRt1gkZM;\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 secure) header.d=planete-kraus.eu header.i=@planete-kraus.eu\n header.a=rsa-sha1 header.s=albinoniA header.b=WRt1gkZM",
            "sourceware.org; dmarc=pass (p=reject dis=none)\n header.from=planete-kraus.eu",
            "sourceware.org;\n spf=pass smtp.mailfrom=planete-kraus.eu",
            "server2.sourceware.org;\n arc=none smtp.remote-ip=2a00:5881:4008:2810::309"
        ],
        "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 4g1gts2RrQz1y2d\n\tfor <incoming@patchwork.ozlabs.org>; Fri, 24 Apr 2026 02:06:13 +1000 (AEST)",
            "from vm01.sourceware.org (localhost [127.0.0.1])\n\tby sourceware.org (Postfix) with ESMTP id 315114BBCDD2\n\tfor <incoming@patchwork.ozlabs.org>; Thu, 23 Apr 2026 16:06:11 +0000 (GMT)",
            "from planete-kraus.eu (planete-kraus.eu\n [IPv6:2a00:5881:4008:2810::309])\n by sourceware.org (Postfix) with ESMTPS id 4BADB4BBCD99\n for <libc-alpha@sourceware.org>; Thu, 23 Apr 2026 16:05:45 +0000 (GMT)",
            "from planete-kraus.eu (localhost [127.0.0.1])\n by planete-kraus.eu (OpenSMTPD) with ESMTP id 98fb7cc2;\n Thu, 23 Apr 2026 16:05:42 +0000 (UTC)",
            "by planete-kraus.eu (OpenSMTPD) with ESMTPSA id b71f3820\n (TLSv1.3:TLS_CHACHA20_POLY1305_SHA256:256:NO);\n Thu, 23 Apr 2026 16:05:39 +0000 (UTC)"
        ],
        "DKIM-Filter": [
            "OpenDKIM Filter v2.11.0 sourceware.org 315114BBCDD2",
            "OpenDKIM Filter v2.11.0 sourceware.org 4BADB4BBCD99"
        ],
        "DMARC-Filter": "OpenDMARC Filter v1.4.2 sourceware.org 4BADB4BBCD99",
        "ARC-Filter": "OpenARC Filter v1.0.0 sourceware.org 4BADB4BBCD99",
        "ARC-Seal": "i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1776960345; cv=none;\n b=oFUTWhbpmll0WEvOWMN49RlvnZ0lDmt1tS3S/1WZDAqBxa+4XpvfXOsbxrMlOyhmbk5L7zXFNCE/6JGNn39WkEwShOu2IpnSnFJR6qBxLKTt8NiVeD8RiL2dRnQ0Unu31qnLBzpchE8xa8WTuXTZRcZ3a3vqKtInlwQ2hKSYf2w=",
        "ARC-Message-Signature": "i=1; a=rsa-sha256; d=sourceware.org; s=key;\n t=1776960345; c=relaxed/simple;\n bh=kq0TZE1Ket815HGvWCAP16ALohK+NMwkIMLxehgvcAg=;\n h=DKIM-Signature:From:To:Subject:Date:Message-ID:MIME-Version;\n b=pSKzmoPTGTv/Hha8riNBDrFiTOAxsPaZG+KhO4rQlti7x5ue+ZutfC704VkVZvol3NKiGuL6s1G2jJ3GqPD5pmNHiiF94M2Bpa3j9ztkMidDm9tXonQju9NWxK7i61DEh9QsuGvHskb7QvxP0+wVfb/96eVh7OUSgt4P2YkfpXA=",
        "ARC-Authentication-Results": "i=1; server2.sourceware.org",
        "DKIM-Signature": "v=1; a=rsa-sha1; c=relaxed; d=planete-kraus.eu; h=from\n :to:cc:subject:date:message-id:in-reply-to:references\n :mime-version:content-type:content-transfer-encoding; s=\n albinoniA; bh=Z11kl9vzYOI16ij7RC0nLU/EqiY=; b=WRt1gkZMAWuatyojKl\n Qj5gaUULyHDloTpLPBz+DCjxm4q7FNjB7+2CleaAZwYOeJJ0+J5tzzioDz6PLZDd\n ETKXXz1bPAQSe3spHYQFukVMTVMcU8GYqC/bx2+SFdp6SYkBTcxev4vzcJ6k3BtT\n IUuyEjv8P9ZUrVybQGhRxmuoX9qw2zbwCAuzcY6gJhmYfP6i0b6OtfEz4UOfyNOL\n yDLhTexaDGlQo7wc6R9SKlaG8JOaUmYCYTCh31NVFR2R5jrix5O7G1zGkhy9YXFY\n dKYGLkxkDd7KS5TibJ83npWTGmG0app4xuEnPcExhOtYzo3poFsi4wY8Q0kLzXEK\n vGpQ==",
        "From": "Vivien Kraus <vivien@planete-kraus.eu>",
        "To": "adhemerval.zanella@linaro.org,\n\tlibc-alpha@sourceware.org",
        "Cc": "Vivien Kraus <vivien@planete-kraus.eu>",
        "Subject": "[PATCH v22 2/9] posix: let the getopt caller set the translation\n context",
        "Date": "Thu, 23 Apr 2026 18:04:00 +0200",
        "Message-ID": "\n <081a71d7a620b3f704bab0c0705ae02f3c582d9f.1776957778.git.vivien@planete-kraus.eu>",
        "X-Mailer": "git-send-email 2.52.0",
        "In-Reply-To": "<cover.1776957777.git.vivien@planete-kraus.eu>",
        "References": "<cover.1776957777.git.vivien@planete-kraus.eu>",
        "MIME-Version": "1.0",
        "Content-Type": "text/plain; charset=UTF-8",
        "Content-Transfer-Encoding": "8bit",
        "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"
    },
    "content": "Option names are typically one word, so they could be translated\ndifferently in different parts of the program.  The use of a context\nlets the translator pick the most appropriate translation when used in\nthe command-line.\n\nAnother possibility would be to prepend two dashes to the option name\nbefore translation, such that it would be obvious this is the\ncommand-line option name.  However, it would be difficult to mark this\nstring for translation (to be processed by xgettext).\n\nThis patch creates a new global variable / reentrant state field,\noptctxt, a pointer, so that the caller can override it.  If it is not\nset, or set to NULL, then no translated option name will be\nrecognized.  To avoid exporting global variables, a couple of\nfunctions have been added to set it.\n\npgettext_expr is not available yet, so we use a custom function to\ncombine the context and the long option name, and discard the context\nif no translation was performed.\n---\n NEWS                                          |  5 ++\n manual/getopt.texi                            | 41 +++++++---\n posix/Versions                                |  4 +\n posix/bits/getopt_ext.h                       |  3 +\n posix/getopt.c                                | 47 ++++++++----\n posix/getopt1.c                               | 74 ++++++++++++++++++-\n posix/getopt_int.h                            |  8 +-\n posix/tstgetoptl.c                            | 38 ++++++++--\n posix/tstgetoptl.po                           |  3 +\n sysdeps/mach/hurd/i386/libc.abilist           |  2 +\n sysdeps/mach/hurd/x86_64/libc.abilist         |  2 +\n sysdeps/unix/sysv/linux/aarch64/libc.abilist  |  2 +\n sysdeps/unix/sysv/linux/alpha/libc.abilist    |  2 +\n sysdeps/unix/sysv/linux/arc/libc.abilist      |  2 +\n sysdeps/unix/sysv/linux/arm/be/libc.abilist   |  2 +\n sysdeps/unix/sysv/linux/arm/le/libc.abilist   |  2 +\n sysdeps/unix/sysv/linux/csky/libc.abilist     |  2 +\n sysdeps/unix/sysv/linux/hppa/libc.abilist     |  2 +\n sysdeps/unix/sysv/linux/i386/libc.abilist     |  2 +\n .../sysv/linux/loongarch/ilp32/libc.abilist   |  2 +\n .../sysv/linux/loongarch/lp64/libc.abilist    |  2 +\n .../sysv/linux/m68k/coldfire/libc.abilist     |  2 +\n .../unix/sysv/linux/m68k/m680x0/libc.abilist  |  2 +\n .../sysv/linux/microblaze/be/libc.abilist     |  2 +\n .../sysv/linux/microblaze/le/libc.abilist     |  2 +\n .../sysv/linux/mips/mips32/fpu/libc.abilist   |  2 +\n .../sysv/linux/mips/mips32/nofpu/libc.abilist |  2 +\n .../sysv/linux/mips/mips64/n32/libc.abilist   |  2 +\n .../sysv/linux/mips/mips64/n64/libc.abilist   |  2 +\n sysdeps/unix/sysv/linux/or1k/libc.abilist     |  2 +\n .../linux/powerpc/powerpc32/fpu/libc.abilist  |  2 +\n .../powerpc/powerpc32/nofpu/libc.abilist      |  2 +\n .../linux/powerpc/powerpc64/be/libc.abilist   |  2 +\n .../linux/powerpc/powerpc64/le/libc.abilist   |  2 +\n .../unix/sysv/linux/riscv/rv32/libc.abilist   |  2 +\n .../unix/sysv/linux/riscv/rv64/libc.abilist   |  2 +\n sysdeps/unix/sysv/linux/s390/libc.abilist     |  2 +\n sysdeps/unix/sysv/linux/sh/be/libc.abilist    |  2 +\n sysdeps/unix/sysv/linux/sh/le/libc.abilist    |  2 +\n .../sysv/linux/sparc/sparc32/libc.abilist     |  2 +\n .../sysv/linux/sparc/sparc64/libc.abilist     |  2 +\n .../unix/sysv/linux/x86_64/64/libc.abilist    |  2 +\n .../unix/sysv/linux/x86_64/x32/libc.abilist   |  2 +\n 43 files changed, 253 insertions(+), 38 deletions(-)",
    "diff": "diff --git a/NEWS b/NEWS\nindex 4e53a079e9..48f7589f49 100644\n--- a/NEWS\n+++ b/NEWS\n@@ -19,6 +19,11 @@ Major new features:\n * New locale added: hrx_BR (Hunsrik language spoken in Brazil).\n \n * The getopt_long function now accepts translated long option names.\n+  This functionality is enabled or disabled by calling\n+  getopt_long_enable_translations / getopt_long_disable_translations.\n+\n+* Argp parsers enable translated long option names with \"command-line\n+  option\" as the message context.\n \n Deprecated and removed features, and other changes affecting compatibility:\n \ndiff --git a/manual/getopt.texi b/manual/getopt.texi\nindex 5ae22a1595..fe45ae55a3 100644\n--- a/manual/getopt.texi\n+++ b/manual/getopt.texi\n@@ -202,15 +202,6 @@ declared in @file{getopt.h}, not @file{unistd.h}.  You should make every\n program accept long options if it uses any options, for this takes\n little extra work and helps beginners remember how to use the program.\n \n-Both long option names and their translations provided by the program\n-for the user's current locale are recognized.  This helps users of\n-your program who do not speak English understand the meaning of the\n-options, and it does not break the function of the program in scripts\n-if the untranslated option names are used.  If international\n-communication involves the invocation of your program, the program\n-users should be encouraged to use untranslated option names or publish\n-the locale used for this invocation.\n-\n @deftp {Data Type} {struct option}\n @standards{GNU, getopt.h}\n This structure describes a single long option name for the sake of\n@@ -224,7 +215,8 @@ The @code{struct option} structure has these fields:\n @item const char *name\n This field is the name of the option.  It is a string.  In order for\n @command{getopt_long} to accept either the long option name or its\n-translated form, you should mark this string for translation.\n+translated form, you should mark this string for translation with a\n+translation context, and call @code{getopt_long_enable_translations}.\n \n @item int has_arg\n This field says whether the option takes an argument.  It is an integer,\n@@ -246,6 +238,35 @@ was seen.\n @end table\n @end deftp\n \n+@deftypefun int getopt_long_enable_translations (const char *@var{msgctxt})\n+@deftypefunx void getopt_long_disable_translations (void)\n+@standards{GNU, getopt.h}\n+@c FIXME: I copied that from getopt_long, but I don't understand\n+@c it. getopt_long_*able_translations use malloc/free and modifies\n+@c global state.\n+@safety{@prelim{}@mtunsafe{@mtasurace{:getopt} @mtsenv{}}@asunsafe{@ascuheap{} @ascuintl{} @asulock{} @asucorrupt{}}@acunsafe{@acsmem{} @aculock{} @acucorrupt{}}}\n+If long option translations are enabled, then both long option names\n+and their translations provided by the program for the user's current\n+locale are recognized.  This helps users of your program who do not\n+speak English understand the meaning of the options, without breaking\n+the function of the program in scripts if the untranslated option\n+names are used.  If international communication involves the\n+invocation of your program, the program users should be encouraged to\n+use untranslated option names or publish the locale used for this\n+invocation.\n+\n+Since option names may be short words instead of long sentences, they\n+may have different translations in different contexts within the same\n+program.  @xref{Contexts, , Using contexts for solving ambiguities,\n+gettext, the GNU Gettext manual}, for more information.  @var{msgctxt}\n+should be a non-NULL string to disambiguate option name translations.\n+Passing NULL, or calling @code{getopt_long_disable_translations()},\n+will disable option name translation.\n+\n+@code{getopt_long_enable_translations} returns 0 on success, or -1 and\n+sets errno.\n+@end deftypefun\n+\n @deftypefun int getopt_long (int @var{argc}, char *const *@var{argv}, const char *@var{shortopts}, const struct option *@var{longopts}, int *@var{indexptr})\n @standards{GNU, getopt.h}\n @safety{@prelim{}@mtunsafe{@mtasurace{:getopt} @mtsenv{}}@asunsafe{@ascuheap{} @ascuintl{} @asulock{} @asucorrupt{}}@acunsafe{@acsmem{} @aculock{} @acucorrupt{}}}\ndiff --git a/posix/Versions b/posix/Versions\nindex 0624d24bcc..10ca3b7ea3 100644\n--- a/posix/Versions\n+++ b/posix/Versions\n@@ -159,6 +159,10 @@ libc {\n   GLIBC_2.35 {\n     posix_spawn_file_actions_addtcsetpgrp_np;\n   }\n+  GLIBC_2.44 {\n+    getopt_long_enable_translations;\n+    getopt_long_disable_translations;\n+  }\n   GLIBC_PRIVATE {\n     __libc_fork; __libc_pread; __libc_pwrite;\n     __nanosleep_nocancel; __pause_nocancel;\ndiff --git a/posix/bits/getopt_ext.h b/posix/bits/getopt_ext.h\nindex 94ca758fcd..8f065bbe9f 100644\n--- a/posix/bits/getopt_ext.h\n+++ b/posix/bits/getopt_ext.h\n@@ -71,6 +71,9 @@ extern int getopt_long_only (int ___argc, char *__getopt_argv_const *___argv,\n \t\t\t     const char *__shortopts,\n \t\t             const struct option *__longopts, int *__longind)\n        __THROW __nonnull ((2, 3));\n+extern int getopt_long_enable_translations (const char *__msgctxt)\n+       __attribute_warn_unused_result__;\n+extern void getopt_long_disable_translations (void);\n \n __END_DECLS\n \ndiff --git a/posix/getopt.c b/posix/getopt.c\nindex cdc02d4da9..6717449b5c 100644\n--- a/posix/getopt.c\n+++ b/posix/getopt.c\n@@ -182,22 +182,30 @@ exchange (char **argv, struct _getopt_data *d)\n   d->__last_nonopt = d->optind;\n }\n \n-/* Return true iff a translation for opt_name has been found and it\n-   matches the substring from argument, length argument_length.\n+/* Return true iff translation_context is not NULL, a translation for\n+   opt_name has been found and it matches the substring from argument,\n+   length argument_length.\n */\n static bool\n-match_translated_option_name (char *(*translate) (const char *msgid),\n+match_translated_option_name (char *(*translate) (const char *, const char *,\n+\t\t\t\t\t\t  char **),\n \t\t\t      const char *argument, size_t argument_length,\n+\t\t\t      const char *translation_context,\n \t\t\t      const char *opt_name)\n {\n   const char *translated = opt_name;\n+  char *translation_buffer = NULL;\n+  bool matches = false;\n   if (translate != NULL)\n-    translated = translate (opt_name);\n+    translated = translate (translation_context, opt_name, &translation_buffer);\n \n   if (strncmp (translated, argument, argument_length) != 0)\n-    return false;\n-  /* We know that argument is a prefix of translated.  */\n-  return translated[argument_length] == '\\0';\n+    matches = false;\n+  else\n+    /* We know that argument is a prefix of translated.  */\n+    matches = translated[argument_length] == '\\0';\n+  free (translation_buffer);\n+  return matches;\n }\n \n /* Process the argument starting with d->__nextchar as a long option.\n@@ -213,7 +221,8 @@ process_long_option (int argc, char **argv, const char *optstring,\n \t\t     const struct option *longopts, int *longind,\n \t\t     int long_only, struct _getopt_data *d,\n \t\t     int print_errors, const char *prefix,\n-\t\t     char *(*translate) (const char *msgid))\n+\t\t     char *(*translate) (const char *, const char *,\n+\t\t\t\t\t char **))\n {\n   char *nameend;\n   size_t namelen;\n@@ -222,6 +231,7 @@ process_long_option (int argc, char **argv, const char *optstring,\n   int n_options;\n   int option_index;\n   const char *translated_option_name;\n+  char *translation_buffer = NULL;\n \n   for (nameend = d->__nextchar; *nameend && *nameend != '='; nameend++)\n     /* Do nothing.  */ ;\n@@ -244,7 +254,9 @@ process_long_option (int argc, char **argv, const char *optstring,\n       /* Didn't find an exact match, try with translated option\n \t names.  */\n       for (p = longopts, option_index = 0; p->name; p++, option_index++)\n-\tif (match_translated_option_name (translate, d->__nextchar, namelen, p->name))\n+\tif (match_translated_option_name (translate,\n+\t\t\t\t\t  d->__nextchar, namelen,\n+\t\t\t\t\t  d->optctxt, p->name))\n \t  {\n \t    /* Exact match found with translation.  */\n \t    pfound = p;\n@@ -377,7 +389,8 @@ process_long_option (int argc, char **argv, const char *optstring,\n \t{\n \t  if (print_errors)\n \t    {\n-\t      translated_option_name = translate (pfound->name);\n+\t      translated_option_name = translate (d->optctxt, pfound->name,\n+\t\t\t\t\t\t  &translation_buffer);\n \t      if (strcmp (translated_option_name, pfound->name) != 0)\n \t\t/* Print both names of the option.  */\n \t\tfprintf (stderr,\n@@ -389,6 +402,7 @@ process_long_option (int argc, char **argv, const char *optstring,\n \t\tfprintf (stderr,\n \t\t\t _(\"%s: option '%s%s' doesn't allow an argument\\n\"),\n \t\t\t argv[0], prefix, pfound->name);\n+\t      free (translation_buffer);\n \t    }\n \t  d->optopt = pfound->val;\n \t  return '?';\n@@ -404,7 +418,8 @@ process_long_option (int argc, char **argv, const char *optstring,\n \t    {\n \t      /* Same dichotomy as when the option does not allow an\n \t\t argument.  */\n-\t      translated_option_name = translate (pfound->name);\n+\t      translated_option_name = translate (d->optctxt, pfound->name,\n+\t\t\t\t\t\t  &translation_buffer);\n \t      if (strcmp (translated_option_name, pfound->name) != 0)\n \t\tfprintf (stderr,\n \t\t\t _(\"%s: option '%s%s' / '%s%s' requires an argument\\n\"),\n@@ -413,6 +428,7 @@ process_long_option (int argc, char **argv, const char *optstring,\n \t\tfprintf (stderr,\n \t\t\t _(\"%s: option '%s%s' requires an argument\\n\"),\n \t\t\t argv[0], prefix, pfound->name);\n+\t      free (translation_buffer);\n \t    }\n \n \t  d->optopt = pfound->val;\n@@ -526,7 +542,7 @@ int\n _getopt_internal_r (int argc, char **argv, const char *optstring,\n \t\t    const struct option *longopts, int *longind,\n \t\t    int long_only, struct _getopt_data *d, int posixly_correct,\n-\t\t    char *(*translate) (const char *msgid))\n+\t\t    char *(*translate) (const char *, const char *, char **))\n {\n   int print_errors = d->opterr;\n \n@@ -761,12 +777,15 @@ _getopt_internal_r (int argc, char **argv, const char *optstring,\n int\n _getopt_internal (int argc, char **argv, const char *optstring,\n \t\t  const struct option *longopts, int *longind, int long_only,\n-\t\t  int posixly_correct, char *(*translate) (const char *))\n+\t\t  int posixly_correct,\n+\t\t  char *(*translate) (const char *, const char *, char **),\n+\t\t  const char *ctxt)\n {\n   int result;\n \n   getopt_data.optind = optind;\n   getopt_data.opterr = opterr;\n+  getopt_data.optctxt = ctxt;\n \n   result = _getopt_internal_r (argc, argv, optstring, longopts,\n \t\t\t       longind, long_only, &getopt_data,\n@@ -789,7 +808,7 @@ _getopt_internal (int argc, char **argv, const char *optstring,\n   {\t\t\t\t\t\t\t\t\\\n     return _getopt_internal (argc, (char **)argv, optstring,\t\\\n \t\t\t     NULL, NULL, 0, POSIXLY_CORRECT,\t\\\n-\t\t\t     NULL);\t\t\t\t\\\n+\t\t\t     NULL, NULL);\t\t\t\\\n   }\n \n #ifdef _LIBC\ndiff --git a/posix/getopt1.c b/posix/getopt1.c\nindex 6342e2d417..87fe067655 100644\n--- a/posix/getopt1.c\n+++ b/posix/getopt1.c\n@@ -26,13 +26,53 @@\n \n #include \"getopt.h\"\n #include \"getopt_int.h\"\n+#include <stdlib.h>\n+#include <string.h>\n+#include <stdio.h>\n+#include <assert.h>\n+\n+/* Callers store an optional context to enable option name\n+   translation.  The argument is allocated.  */\n+\n+char *optctxt = NULL;\n+\n+/* FIXME: use pgettext_expr.  */\n+static char *\n+do_translate (const char *context, const char *msgid, char **allocated)\n+{\n+  char *full_msgid;\n+  const char *translated = msgid;\n+  int output_length = 0;\n+\n+  *allocated = NULL;\n+  if (context != NULL)\n+    {\n+      output_length = __asprintf (&full_msgid, \"%s\\004%s\", context, msgid);\n+      *allocated = full_msgid;\n+      if (output_length >= 0)\n+\t{\n+\t  translated = __dcgettext (NULL, full_msgid, LC_MESSAGES);\n+\t  if (strcmp (translated, full_msgid) == 0)\n+\t    {\n+\t      /* No translation for this context and message, so drop\n+\t\t the context + ^D prefix.  */\n+\t      translated = msgid;\n+\t    }\n+\t}\n+      /* Otherwise, if memory allocation failed, then we won’t accept\n+\t translations.  translated remains an alias to msgid.  */\n+    }\n+  else\n+    translated = msgid;\n+  return (char *) translated;\n+}\n \n int\n getopt_long (int argc, char *__getopt_argv_const *argv, const char *options,\n \t     const struct option *long_options, int *opt_index)\n {\n   return _getopt_internal (argc, (char **) argv, options, long_options,\n-\t\t\t   opt_index, 0, 0, gettext);\n+\t\t\t   opt_index, 0, 0, do_translate, optctxt);\n }\n \n int\n@@ -41,7 +81,7 @@ _getopt_long_r (int argc, char **argv, const char *options,\n \t\tstruct _getopt_data *d)\n {\n   return _getopt_internal_r (argc, argv, options, long_options, opt_index,\n-\t\t\t     0, d, 0, gettext);\n+\t\t\t     0, d, 0, do_translate);\n }\n \n /* Like getopt_long, but '-' as well as '--' can indicate a long option.\n@@ -55,7 +95,7 @@ getopt_long_only (int argc, char *__getopt_argv_const *argv,\n \t\t  const struct option *long_options, int *opt_index)\n {\n   return _getopt_internal (argc, (char **) argv, options, long_options,\n-\t\t\t   opt_index, 1, 0, gettext);\n+\t\t\t   opt_index, 1, 0, do_translate, optctxt);\n }\n \n int\n@@ -64,7 +104,33 @@ _getopt_long_only_r (int argc, char **argv, const char *options,\n \t\t     struct _getopt_data *d)\n {\n   return _getopt_internal_r (argc, argv, options, long_options, opt_index,\n-\t\t\t     1, d, 0, gettext);\n+\t\t\t     1, d, 0, do_translate);\n+}\n+\n+static void\n+disable_translations (void)\n+{\n+  free (optctxt);\n+  optctxt = NULL;\n+}\n+\n+int\n+getopt_long_enable_translations (const char *msgctxt)\n+{\n+  disable_translations ();\n+  if (msgctxt != NULL)\n+    {\n+      optctxt = __strdup (msgctxt);\n+      if (optctxt == NULL)\n+\treturn -1;\n+    }\n+  return 0;\n+}\n+\n+void\n+getopt_long_disable_translations (void)\n+{\n+  disable_translations ();\n }\n \n \f\ndiff --git a/posix/getopt_int.h b/posix/getopt_int.h\nindex 579233b08c..fcfec242c1 100644\n--- a/posix/getopt_int.h\n+++ b/posix/getopt_int.h\n@@ -29,7 +29,9 @@ extern int _getopt_internal (int ___argc, char **___argv,\n \t\t\t     const char *__shortopts,\n \t\t\t     const struct option *__longopts, int *__longind,\n \t\t\t     int __long_only, int __posixly_correct,\n-\t\t\t     char *(*translate) (const char *msgid));\n+\t\t\t     char *(*translate) (const char *, const char *,\n+\t\t\t\t\t\t char **),\n+\t\t\t     const char *__optctxt);\n \n \f\n /* Reentrant versions which can handle parsing multiple argument\n@@ -71,6 +73,7 @@ struct _getopt_data\n   int opterr;\n   int optopt;\n   char *optarg;\n+  const char *optctxt;\n \n   /* Internal members.  */\n \n@@ -107,7 +110,8 @@ extern int _getopt_internal_r (int ___argc, char **___argv,\n \t\t\t       const struct option *__longopts, int *__longind,\n \t\t\t       int __long_only, struct _getopt_data *__data,\n \t\t\t       int __posixly_correct,\n-\t\t\t       char *(*translate) (const char *msgid));\n+\t\t\t       char *(*translate) (const char *, const char *,\n+\t\t\t\t\t\t   char **));\n \n extern int _getopt_long_r (int ___argc, char **___argv,\n \t\t\t   const char *__shortopts,\ndiff --git a/posix/tstgetoptl.c b/posix/tstgetoptl.c\nindex afefcf46f5..1e970ad407 100644\n--- a/posix/tstgetoptl.c\n+++ b/posix/tstgetoptl.c\n@@ -39,6 +39,8 @@\n    known translation of flavor) without the program recognizing a\n    --flavor option.  */\n \n+#define TRANSLATION_CONTEXT \"command-line option\"\n+\n static void\n prepare_localedir (void)\n {\n@@ -47,8 +49,8 @@ prepare_localedir (void)\n   TEST_VERIFY_EXIT (bindtextdomain (\"tstgetoptl\", OBJPFX \"domaindir\") != NULL);\n   TEST_VERIFY_EXIT (textdomain (\"tstgetoptl\") != NULL);\n   /* Check that the catalog is OK: */\n-  TEST_COMPARE_STRING (gettext (\"color\"), \"colour\");\n-  TEST_COMPARE_STRING (gettext (\"flavor\"), \"flavour\");\n+  TEST_COMPARE_STRING (gettext (TRANSLATION_CONTEXT \"\\004\" \"color\"), \"colour\");\n+  TEST_COMPARE_STRING (gettext (TRANSLATION_CONTEXT \"\\004\" \"flavor\"), \"flavour\");\n }\n \n static char **\n@@ -65,8 +67,9 @@ prepare_argv (int *argc)\n }\n \n static void\n-do_my_test (void)\n+do_my_test (bool with_optctxt)\n {\n+  static const char *translation_context = TRANSLATION_CONTEXT;\n   int argc;\n   char **argv = prepare_argv (&argc);\n   static const struct option options[] =\n@@ -87,8 +90,14 @@ do_my_test (void)\n   int c;\n   bool found_flavor = false;\n \n+  if (with_optctxt)\n+    TEST_VERIFY_EXIT (getopt_long_enable_translations (translation_context) == 0);\n+  else\n+    getopt_long_disable_translations ();\n   optind = 0;\n   fputs (\"Reminder that --flavor is not an option of the program.\\n\", stderr);\n+  if (!with_optctxt)\n+    fputs (\"No optctxt set, so --colour should not be recognized.\\n\", stderr);\n   while ((c = getopt_long (argc, argv, \"\", options, NULL)) >= 0)\n     switch (c)\n       {\n@@ -96,8 +105,13 @@ do_my_test (void)\n \t++Cflag;\n \tbreak;\n       case '?':\n-\tTEST_VERIFY (!found_flavor);\n-\tfound_flavor = true;\n+\tif (with_optctxt)\n+\t  {\n+\t    TEST_VERIFY (!found_flavor);\n+\t    found_flavor = true;\n+\t  }\n+\t/* Otherwise, this is OK; --colour should not exist if we did not set\n+\t   optctxt.  */\n \tbreak;\n       default:\n \t/* This should not happen.  */\n@@ -115,11 +129,18 @@ do_my_test (void)\n \tbreak;\n       }\n \n-  TEST_VERIFY (found_flavor);\n+  if (with_optctxt)\n+    TEST_VERIFY (found_flavor);\n \n   printf (\"Cflags = %d\\n\", Cflag);\n \n-  TEST_COMPARE (Cflag, 3);\n+  if (with_optctxt)\n+    TEST_COMPARE (Cflag, 3);\n+  else\n+    TEST_COMPARE (Cflag, 2);\n+\n+  if (with_optctxt)\n+    getopt_long_disable_translations ();\n \n   for (index = optind; index < argc; index++)\n     printf (\"Non-option argument %s\\n\", argv[index]);\n@@ -131,7 +152,8 @@ int\n do_test (void)\n {\n   prepare_localedir ();\n-  do_my_test ();\n+  do_my_test (false);\n+  do_my_test (true);\n   return 0;\n }\n \ndiff --git a/posix/tstgetoptl.po b/posix/tstgetoptl.po\nindex 7091884faf..7dc15e71f3 100644\n--- a/posix/tstgetoptl.po\n+++ b/posix/tstgetoptl.po\n@@ -16,14 +16,17 @@ msgstr \"\"\n \"Plural-Forms: nplurals=2; plural=(n != 1);\\n\"\n \n #: xxx.c:yy\n+msgctxt \"command-line option\"\n msgid \"color\"\n msgstr \"colour\"\n \n #: xxx.c:yy\n+msgctxt \"command-line option\"\n msgid \"flavor\"\n msgstr \"flavour\"\n \n # This is to make sure the translator cannot redirect options.\n #: xxx.c:yy\n+msgctxt \"command-line option\"\n msgid \"optional\"\n msgstr \"required\"\ndiff --git a/sysdeps/mach/hurd/i386/libc.abilist b/sysdeps/mach/hurd/i386/libc.abilist\nindex 0166703bdb..b3e5510297 100644\n--- a/sysdeps/mach/hurd/i386/libc.abilist\n+++ b/sysdeps/mach/hurd/i386/libc.abilist\n@@ -2818,6 +2818,8 @@ GLIBC_2.44 gai_cancel F\n GLIBC_2.44 gai_error F\n GLIBC_2.44 gai_suspend F\n GLIBC_2.44 getaddrinfo_a F\n+GLIBC_2.44 getopt_long_disable_translations F\n+GLIBC_2.44 getopt_long_enable_translations F\n GLIBC_2.44 lio_listio F\n GLIBC_2.44 lio_listio64 F\n GLIBC_2.44 mq_close F\ndiff --git a/sysdeps/mach/hurd/x86_64/libc.abilist b/sysdeps/mach/hurd/x86_64/libc.abilist\nindex 0262a079aa..dcfac4bd51 100644\n--- a/sysdeps/mach/hurd/x86_64/libc.abilist\n+++ b/sysdeps/mach/hurd/x86_64/libc.abilist\n@@ -2494,6 +2494,8 @@ GLIBC_2.44 gai_cancel F\n GLIBC_2.44 gai_error F\n GLIBC_2.44 gai_suspend F\n GLIBC_2.44 getaddrinfo_a F\n+GLIBC_2.44 getopt_long_disable_translations F\n+GLIBC_2.44 getopt_long_enable_translations F\n GLIBC_2.44 lio_listio F\n GLIBC_2.44 lio_listio64 F\n GLIBC_2.44 mq_close F\ndiff --git a/sysdeps/unix/sysv/linux/aarch64/libc.abilist b/sysdeps/unix/sysv/linux/aarch64/libc.abilist\nindex 3156688add..7dd7c7aa88 100644\n--- a/sysdeps/unix/sysv/linux/aarch64/libc.abilist\n+++ b/sysdeps/unix/sysv/linux/aarch64/libc.abilist\n@@ -2775,3 +2775,5 @@ 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 getopt_long_disable_translations F\n+GLIBC_2.44 getopt_long_enable_translations F\ndiff --git a/sysdeps/unix/sysv/linux/alpha/libc.abilist b/sysdeps/unix/sysv/linux/alpha/libc.abilist\nindex 8af5b0b581..bfbee2c31f 100644\n--- a/sysdeps/unix/sysv/linux/alpha/libc.abilist\n+++ b/sysdeps/unix/sysv/linux/alpha/libc.abilist\n@@ -3122,6 +3122,8 @@ 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 getopt_long_disable_translations F\n+GLIBC_2.44 getopt_long_enable_translations F\n GLIBC_2.5 __readlinkat_chk F\n GLIBC_2.5 inet6_opt_append F\n GLIBC_2.5 inet6_opt_find F\ndiff --git a/sysdeps/unix/sysv/linux/arc/libc.abilist b/sysdeps/unix/sysv/linux/arc/libc.abilist\nindex 35fcef2cc4..00224995bb 100644\n--- a/sysdeps/unix/sysv/linux/arc/libc.abilist\n+++ b/sysdeps/unix/sysv/linux/arc/libc.abilist\n@@ -2536,3 +2536,5 @@ 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 getopt_long_disable_translations F\n+GLIBC_2.44 getopt_long_enable_translations F\ndiff --git a/sysdeps/unix/sysv/linux/arm/be/libc.abilist b/sysdeps/unix/sysv/linux/arm/be/libc.abilist\nindex a6c6b951bf..8856423c37 100644\n--- a/sysdeps/unix/sysv/linux/arm/be/libc.abilist\n+++ b/sysdeps/unix/sysv/linux/arm/be/libc.abilist\n@@ -2828,6 +2828,8 @@ 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 getopt_long_disable_translations F\n+GLIBC_2.44 getopt_long_enable_translations F\n GLIBC_2.5 __readlinkat_chk F\n GLIBC_2.5 inet6_opt_append F\n GLIBC_2.5 inet6_opt_find F\ndiff --git a/sysdeps/unix/sysv/linux/arm/le/libc.abilist b/sysdeps/unix/sysv/linux/arm/le/libc.abilist\nindex e76015fe66..6718047590 100644\n--- a/sysdeps/unix/sysv/linux/arm/le/libc.abilist\n+++ b/sysdeps/unix/sysv/linux/arm/le/libc.abilist\n@@ -2825,6 +2825,8 @@ 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 getopt_long_disable_translations F\n+GLIBC_2.44 getopt_long_enable_translations F\n GLIBC_2.5 __readlinkat_chk F\n GLIBC_2.5 inet6_opt_append F\n GLIBC_2.5 inet6_opt_find F\ndiff --git a/sysdeps/unix/sysv/linux/csky/libc.abilist b/sysdeps/unix/sysv/linux/csky/libc.abilist\nindex 1fb7cdcad5..c48b5fbbd5 100644\n--- a/sysdeps/unix/sysv/linux/csky/libc.abilist\n+++ b/sysdeps/unix/sysv/linux/csky/libc.abilist\n@@ -2812,3 +2812,5 @@ 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 getopt_long_disable_translations F\n+GLIBC_2.44 getopt_long_enable_translations F\ndiff --git a/sysdeps/unix/sysv/linux/hppa/libc.abilist b/sysdeps/unix/sysv/linux/hppa/libc.abilist\nindex 0710ccecf9..9afdd0a2ea 100644\n--- a/sysdeps/unix/sysv/linux/hppa/libc.abilist\n+++ b/sysdeps/unix/sysv/linux/hppa/libc.abilist\n@@ -2849,6 +2849,8 @@ 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 getopt_long_disable_translations F\n+GLIBC_2.44 getopt_long_enable_translations F\n GLIBC_2.5 __readlinkat_chk F\n GLIBC_2.5 inet6_opt_append F\n GLIBC_2.5 inet6_opt_find F\ndiff --git a/sysdeps/unix/sysv/linux/i386/libc.abilist b/sysdeps/unix/sysv/linux/i386/libc.abilist\nindex 3afe3a88eb..adf364236d 100644\n--- a/sysdeps/unix/sysv/linux/i386/libc.abilist\n+++ b/sysdeps/unix/sysv/linux/i386/libc.abilist\n@@ -3032,6 +3032,8 @@ 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 getopt_long_disable_translations F\n+GLIBC_2.44 getopt_long_enable_translations F\n GLIBC_2.5 __readlinkat_chk F\n GLIBC_2.5 inet6_opt_append F\n GLIBC_2.5 inet6_opt_find F\ndiff --git a/sysdeps/unix/sysv/linux/loongarch/ilp32/libc.abilist b/sysdeps/unix/sysv/linux/loongarch/ilp32/libc.abilist\nindex 7c6d7055c3..a90b2a83ca 100644\n--- a/sysdeps/unix/sysv/linux/loongarch/ilp32/libc.abilist\n+++ b/sysdeps/unix/sysv/linux/loongarch/ilp32/libc.abilist\n@@ -995,6 +995,8 @@ GLIBC_2.44 getnetgrent F\n GLIBC_2.44 getnetgrent_r F\n GLIBC_2.44 getopt F\n GLIBC_2.44 getopt_long F\n+GLIBC_2.44 getopt_long_disable_translations F\n+GLIBC_2.44 getopt_long_enable_translations F\n GLIBC_2.44 getopt_long_only F\n GLIBC_2.44 getpagesize F\n GLIBC_2.44 getpass F\ndiff --git a/sysdeps/unix/sysv/linux/loongarch/lp64/libc.abilist b/sysdeps/unix/sysv/linux/loongarch/lp64/libc.abilist\nindex c2b3a66d3a..2a547f5d7d 100644\n--- a/sysdeps/unix/sysv/linux/loongarch/lp64/libc.abilist\n+++ b/sysdeps/unix/sysv/linux/loongarch/lp64/libc.abilist\n@@ -2296,3 +2296,5 @@ 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 getopt_long_disable_translations F\n+GLIBC_2.44 getopt_long_enable_translations F\ndiff --git a/sysdeps/unix/sysv/linux/m68k/coldfire/libc.abilist b/sysdeps/unix/sysv/linux/m68k/coldfire/libc.abilist\nindex d6855131e8..a967c60f07 100644\n--- a/sysdeps/unix/sysv/linux/m68k/coldfire/libc.abilist\n+++ b/sysdeps/unix/sysv/linux/m68k/coldfire/libc.abilist\n@@ -2808,6 +2808,8 @@ 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 getopt_long_disable_translations F\n+GLIBC_2.44 getopt_long_enable_translations F\n GLIBC_2.5 __readlinkat_chk F\n GLIBC_2.5 inet6_opt_append F\n GLIBC_2.5 inet6_opt_find F\ndiff --git a/sysdeps/unix/sysv/linux/m68k/m680x0/libc.abilist b/sysdeps/unix/sysv/linux/m68k/m680x0/libc.abilist\nindex 4e3fe9c42f..486d5975ec 100644\n--- a/sysdeps/unix/sysv/linux/m68k/m680x0/libc.abilist\n+++ b/sysdeps/unix/sysv/linux/m68k/m680x0/libc.abilist\n@@ -2975,6 +2975,8 @@ 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 getopt_long_disable_translations F\n+GLIBC_2.44 getopt_long_enable_translations F\n GLIBC_2.5 __readlinkat_chk F\n GLIBC_2.5 inet6_opt_append F\n GLIBC_2.5 inet6_opt_find F\ndiff --git a/sysdeps/unix/sysv/linux/microblaze/be/libc.abilist b/sysdeps/unix/sysv/linux/microblaze/be/libc.abilist\nindex 29f0c5f954..68ae7ff5ce 100644\n--- a/sysdeps/unix/sysv/linux/microblaze/be/libc.abilist\n+++ b/sysdeps/unix/sysv/linux/microblaze/be/libc.abilist\n@@ -2861,3 +2861,5 @@ 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 getopt_long_disable_translations F\n+GLIBC_2.44 getopt_long_enable_translations F\ndiff --git a/sysdeps/unix/sysv/linux/microblaze/le/libc.abilist b/sysdeps/unix/sysv/linux/microblaze/le/libc.abilist\nindex 2ef62838f7..eb0d3ddf68 100644\n--- a/sysdeps/unix/sysv/linux/microblaze/le/libc.abilist\n+++ b/sysdeps/unix/sysv/linux/microblaze/le/libc.abilist\n@@ -2858,3 +2858,5 @@ 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 getopt_long_disable_translations F\n+GLIBC_2.44 getopt_long_enable_translations F\ndiff --git a/sysdeps/unix/sysv/linux/mips/mips32/fpu/libc.abilist b/sysdeps/unix/sysv/linux/mips/mips32/fpu/libc.abilist\nindex 031e8961ac..0a9bad7ad0 100644\n--- a/sysdeps/unix/sysv/linux/mips/mips32/fpu/libc.abilist\n+++ b/sysdeps/unix/sysv/linux/mips/mips32/fpu/libc.abilist\n@@ -2938,6 +2938,8 @@ 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 getopt_long_disable_translations F\n+GLIBC_2.44 getopt_long_enable_translations F\n GLIBC_2.5 __readlinkat_chk F\n GLIBC_2.5 inet6_opt_append F\n GLIBC_2.5 inet6_opt_find F\ndiff --git a/sysdeps/unix/sysv/linux/mips/mips32/nofpu/libc.abilist b/sysdeps/unix/sysv/linux/mips/mips32/nofpu/libc.abilist\nindex 8dc99d81b4..072c9df2c1 100644\n--- a/sysdeps/unix/sysv/linux/mips/mips32/nofpu/libc.abilist\n+++ b/sysdeps/unix/sysv/linux/mips/mips32/nofpu/libc.abilist\n@@ -2936,6 +2936,8 @@ 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 getopt_long_disable_translations F\n+GLIBC_2.44 getopt_long_enable_translations F\n GLIBC_2.5 __readlinkat_chk F\n GLIBC_2.5 inet6_opt_append F\n GLIBC_2.5 inet6_opt_find F\ndiff --git a/sysdeps/unix/sysv/linux/mips/mips64/n32/libc.abilist b/sysdeps/unix/sysv/linux/mips/mips64/n32/libc.abilist\nindex 054c5b6391..9f738374d3 100644\n--- a/sysdeps/unix/sysv/linux/mips/mips64/n32/libc.abilist\n+++ b/sysdeps/unix/sysv/linux/mips/mips64/n32/libc.abilist\n@@ -2944,6 +2944,8 @@ 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 getopt_long_disable_translations F\n+GLIBC_2.44 getopt_long_enable_translations F\n GLIBC_2.5 __readlinkat_chk F\n GLIBC_2.5 inet6_opt_append F\n GLIBC_2.5 inet6_opt_find F\ndiff --git a/sysdeps/unix/sysv/linux/mips/mips64/n64/libc.abilist b/sysdeps/unix/sysv/linux/mips/mips64/n64/libc.abilist\nindex 13f0148bc0..8b8b718d86 100644\n--- a/sysdeps/unix/sysv/linux/mips/mips64/n64/libc.abilist\n+++ b/sysdeps/unix/sysv/linux/mips/mips64/n64/libc.abilist\n@@ -2846,6 +2846,8 @@ 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 getopt_long_disable_translations F\n+GLIBC_2.44 getopt_long_enable_translations F\n GLIBC_2.5 __readlinkat_chk F\n GLIBC_2.5 inet6_opt_append F\n GLIBC_2.5 inet6_opt_find F\ndiff --git a/sysdeps/unix/sysv/linux/or1k/libc.abilist b/sysdeps/unix/sysv/linux/or1k/libc.abilist\nindex e7ffe07dd8..c63bc5d110 100644\n--- a/sysdeps/unix/sysv/linux/or1k/libc.abilist\n+++ b/sysdeps/unix/sysv/linux/or1k/libc.abilist\n@@ -2286,3 +2286,5 @@ 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 getopt_long_disable_translations F\n+GLIBC_2.44 getopt_long_enable_translations F\ndiff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/libc.abilist b/sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/libc.abilist\nindex dea4b20f05..2c5141623d 100644\n--- a/sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/libc.abilist\n+++ b/sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/libc.abilist\n@@ -3165,6 +3165,8 @@ 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 getopt_long_disable_translations F\n+GLIBC_2.44 getopt_long_enable_translations F\n GLIBC_2.5 __readlinkat_chk F\n GLIBC_2.5 inet6_opt_append F\n GLIBC_2.5 inet6_opt_find F\ndiff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/libc.abilist b/sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/libc.abilist\nindex b45e127463..8d2194f22d 100644\n--- a/sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/libc.abilist\n+++ b/sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/libc.abilist\n@@ -3210,6 +3210,8 @@ 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 getopt_long_disable_translations F\n+GLIBC_2.44 getopt_long_enable_translations F\n GLIBC_2.5 __readlinkat_chk F\n GLIBC_2.5 inet6_opt_append F\n GLIBC_2.5 inet6_opt_find F\ndiff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc64/be/libc.abilist b/sysdeps/unix/sysv/linux/powerpc/powerpc64/be/libc.abilist\nindex 942cf6a027..b5f1a9cc83 100644\n--- a/sysdeps/unix/sysv/linux/powerpc/powerpc64/be/libc.abilist\n+++ b/sysdeps/unix/sysv/linux/powerpc/powerpc64/be/libc.abilist\n@@ -2919,6 +2919,8 @@ 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 getopt_long_disable_translations F\n+GLIBC_2.44 getopt_long_enable_translations F\n GLIBC_2.5 __readlinkat_chk F\n GLIBC_2.5 inet6_opt_append F\n GLIBC_2.5 inet6_opt_find F\ndiff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc64/le/libc.abilist b/sysdeps/unix/sysv/linux/powerpc/powerpc64/le/libc.abilist\nindex 65d78e5076..0b9c5761da 100644\n--- a/sysdeps/unix/sysv/linux/powerpc/powerpc64/le/libc.abilist\n+++ b/sysdeps/unix/sysv/linux/powerpc/powerpc64/le/libc.abilist\n@@ -2995,3 +2995,5 @@ 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 getopt_long_disable_translations F\n+GLIBC_2.44 getopt_long_enable_translations F\ndiff --git a/sysdeps/unix/sysv/linux/riscv/rv32/libc.abilist b/sysdeps/unix/sysv/linux/riscv/rv32/libc.abilist\nindex dcab30d72e..75f37a6c9d 100644\n--- a/sysdeps/unix/sysv/linux/riscv/rv32/libc.abilist\n+++ b/sysdeps/unix/sysv/linux/riscv/rv32/libc.abilist\n@@ -2539,3 +2539,5 @@ 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 getopt_long_disable_translations F\n+GLIBC_2.44 getopt_long_enable_translations F\ndiff --git a/sysdeps/unix/sysv/linux/riscv/rv64/libc.abilist b/sysdeps/unix/sysv/linux/riscv/rv64/libc.abilist\nindex 796ef35e26..d2e98816c7 100644\n--- a/sysdeps/unix/sysv/linux/riscv/rv64/libc.abilist\n+++ b/sysdeps/unix/sysv/linux/riscv/rv64/libc.abilist\n@@ -2739,3 +2739,5 @@ 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 getopt_long_disable_translations F\n+GLIBC_2.44 getopt_long_enable_translations F\ndiff --git a/sysdeps/unix/sysv/linux/s390/libc.abilist b/sysdeps/unix/sysv/linux/s390/libc.abilist\nindex 8f2350ee0b..e19857bb81 100644\n--- a/sysdeps/unix/sysv/linux/s390/libc.abilist\n+++ b/sysdeps/unix/sysv/linux/s390/libc.abilist\n@@ -2956,6 +2956,8 @@ 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 getopt_long_disable_translations F\n+GLIBC_2.44 getopt_long_enable_translations F\n GLIBC_2.5 __readlinkat_chk F\n GLIBC_2.5 inet6_opt_append F\n GLIBC_2.5 inet6_opt_find F\ndiff --git a/sysdeps/unix/sysv/linux/sh/be/libc.abilist b/sysdeps/unix/sysv/linux/sh/be/libc.abilist\nindex 7aa98c5aed..55bc8458c0 100644\n--- a/sysdeps/unix/sysv/linux/sh/be/libc.abilist\n+++ b/sysdeps/unix/sysv/linux/sh/be/libc.abilist\n@@ -2855,6 +2855,8 @@ 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 getopt_long_disable_translations F\n+GLIBC_2.44 getopt_long_enable_translations F\n GLIBC_2.5 __readlinkat_chk F\n GLIBC_2.5 inet6_opt_append F\n GLIBC_2.5 inet6_opt_find F\ndiff --git a/sysdeps/unix/sysv/linux/sh/le/libc.abilist b/sysdeps/unix/sysv/linux/sh/le/libc.abilist\nindex 6bd4f8f63a..5bf43c1855 100644\n--- a/sysdeps/unix/sysv/linux/sh/le/libc.abilist\n+++ b/sysdeps/unix/sysv/linux/sh/le/libc.abilist\n@@ -2852,6 +2852,8 @@ 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 getopt_long_disable_translations F\n+GLIBC_2.44 getopt_long_enable_translations F\n GLIBC_2.5 __readlinkat_chk F\n GLIBC_2.5 inet6_opt_append F\n GLIBC_2.5 inet6_opt_find F\ndiff --git a/sysdeps/unix/sysv/linux/sparc/sparc32/libc.abilist b/sysdeps/unix/sysv/linux/sparc/sparc32/libc.abilist\nindex b52cab2a35..417e67f73b 100644\n--- a/sysdeps/unix/sysv/linux/sparc/sparc32/libc.abilist\n+++ b/sysdeps/unix/sysv/linux/sparc/sparc32/libc.abilist\n@@ -3186,6 +3186,8 @@ 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 getopt_long_disable_translations F\n+GLIBC_2.44 getopt_long_enable_translations F\n GLIBC_2.5 __readlinkat_chk F\n GLIBC_2.5 inet6_opt_append F\n GLIBC_2.5 inet6_opt_find F\ndiff --git a/sysdeps/unix/sysv/linux/sparc/sparc64/libc.abilist b/sysdeps/unix/sysv/linux/sparc/sparc64/libc.abilist\nindex ff99cd4f21..57c9590334 100644\n--- a/sysdeps/unix/sysv/linux/sparc/sparc64/libc.abilist\n+++ b/sysdeps/unix/sysv/linux/sparc/sparc64/libc.abilist\n@@ -2822,6 +2822,8 @@ 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 getopt_long_disable_translations F\n+GLIBC_2.44 getopt_long_enable_translations F\n GLIBC_2.5 __readlinkat_chk F\n GLIBC_2.5 inet6_opt_append F\n GLIBC_2.5 inet6_opt_find F\ndiff --git a/sysdeps/unix/sysv/linux/x86_64/64/libc.abilist b/sysdeps/unix/sysv/linux/x86_64/64/libc.abilist\nindex 306cd627fd..6749f30c83 100644\n--- a/sysdeps/unix/sysv/linux/x86_64/64/libc.abilist\n+++ b/sysdeps/unix/sysv/linux/x86_64/64/libc.abilist\n@@ -2771,6 +2771,8 @@ 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 getopt_long_disable_translations F\n+GLIBC_2.44 getopt_long_enable_translations F\n GLIBC_2.5 __readlinkat_chk F\n GLIBC_2.5 inet6_opt_append F\n GLIBC_2.5 inet6_opt_find F\ndiff --git a/sysdeps/unix/sysv/linux/x86_64/x32/libc.abilist b/sysdeps/unix/sysv/linux/x86_64/x32/libc.abilist\nindex 8b9c448742..d8899a2048 100644\n--- a/sysdeps/unix/sysv/linux/x86_64/x32/libc.abilist\n+++ b/sysdeps/unix/sysv/linux/x86_64/x32/libc.abilist\n@@ -2790,3 +2790,5 @@ 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 getopt_long_disable_translations F\n+GLIBC_2.44 getopt_long_enable_translations F\n",
    "prefixes": [
        "v22",
        "2/9"
    ]
}