[PATCH v17 4/9] posix: let the getopt caller choose the textdomain for translation
Adhemerval Zanella Netto
adhemerval.zanella@linaro.org
Fri Nov 21 14:33:15 GMT 2025
On 18/11/25 18:22, Vivien Kraus wrote:
> Using the same solution as for the option translation context, a new
> opttextdomain variable is defined.
>
> Note that all options in the call to getopt_long are looked up in the
> same domain.
I think this requires a NEWS entry.
And although I am not very found of this new optctxt/opttextdomain API, being
non-thread safe and adding an extra data bind relocation; these interfarces
are used mostly in single-thread scope (during process startup).
> ---
> manual/argp.texi | 7 +++--
> manual/getopt.texi | 11 +++++--
> posix/Versions | 2 +-
> posix/bits/getopt_ext.h | 5 ++++
> posix/getopt.c | 30 ++++++++++++-------
> posix/getopt1.c | 15 +++++++---
> posix/getopt_int.h | 11 ++++---
> posix/tstgetoptl.c | 9 ++----
> sysdeps/mach/hurd/i386/libc.abilist | 1 +
> sysdeps/mach/hurd/x86_64/libc.abilist | 1 +
> sysdeps/unix/sysv/linux/aarch64/libc.abilist | 1 +
> sysdeps/unix/sysv/linux/alpha/libc.abilist | 1 +
> sysdeps/unix/sysv/linux/arc/libc.abilist | 1 +
> sysdeps/unix/sysv/linux/arm/be/libc.abilist | 1 +
> sysdeps/unix/sysv/linux/arm/le/libc.abilist | 1 +
> sysdeps/unix/sysv/linux/csky/libc.abilist | 1 +
> sysdeps/unix/sysv/linux/hppa/libc.abilist | 1 +
> sysdeps/unix/sysv/linux/i386/libc.abilist | 1 +
> .../sysv/linux/loongarch/lp64/libc.abilist | 1 +
> .../sysv/linux/m68k/coldfire/libc.abilist | 1 +
> .../unix/sysv/linux/m68k/m680x0/libc.abilist | 1 +
> .../sysv/linux/microblaze/be/libc.abilist | 1 +
> .../sysv/linux/microblaze/le/libc.abilist | 1 +
> .../sysv/linux/mips/mips32/fpu/libc.abilist | 1 +
> .../sysv/linux/mips/mips32/nofpu/libc.abilist | 1 +
> .../sysv/linux/mips/mips64/n32/libc.abilist | 1 +
> .../sysv/linux/mips/mips64/n64/libc.abilist | 1 +
> sysdeps/unix/sysv/linux/or1k/libc.abilist | 1 +
> .../linux/powerpc/powerpc32/fpu/libc.abilist | 1 +
> .../powerpc/powerpc32/nofpu/libc.abilist | 1 +
> .../linux/powerpc/powerpc64/be/libc.abilist | 1 +
> .../linux/powerpc/powerpc64/le/libc.abilist | 1 +
> .../unix/sysv/linux/riscv/rv32/libc.abilist | 1 +
> .../unix/sysv/linux/riscv/rv64/libc.abilist | 1 +
> .../unix/sysv/linux/s390/s390-32/libc.abilist | 1 +
> .../unix/sysv/linux/s390/s390-64/libc.abilist | 1 +
> sysdeps/unix/sysv/linux/sh/be/libc.abilist | 1 +
> sysdeps/unix/sysv/linux/sh/le/libc.abilist | 1 +
> .../sysv/linux/sparc/sparc32/libc.abilist | 1 +
> .../sysv/linux/sparc/sparc64/libc.abilist | 1 +
> .../unix/sysv/linux/x86_64/64/libc.abilist | 1 +
> .../unix/sysv/linux/x86_64/x32/libc.abilist | 1 +
> 42 files changed, 94 insertions(+), 30 deletions(-)
>
> diff --git a/manual/argp.texi b/manual/argp.texi
> index 97456ef20e..50d67b6c55 100644
> --- a/manual/argp.texi
> +++ b/manual/argp.texi
> @@ -208,8 +208,11 @@ messages. @xref{Argp Help Filtering}.
> If non-zero, the strings used in the argp library are translated using
> the domain described by this string. If zero, the current default
> domain is used. The long option names are always translated with the
> -current default domain, and with the @samp{"command-line option"}
> -disambiguation string.
> +current default domain (not this one), and with the
> +@samp{"command-line option"} disambiguation string. This is because
> +all the option names, including those defined in sub-parsers, must be
> +in the same textdomain for @command{getopt} to process the options
> +correctly.
>
> @end table
> @end deftp
> diff --git a/manual/getopt.texi b/manual/getopt.texi
> index 65e24f1143..20be0fba69 100644
> --- a/manual/getopt.texi
> +++ b/manual/getopt.texi
> @@ -59,8 +59,15 @@ names in the current textdomain. Since option names may be short
> words instead of long sentences, they may have different translations
> in other places of the program. @xref{Contexts, , Using contexts for
> solving ambiguities, gettext, the GNU Gettext manual}, for more
> -information. If this is @code{NULL}, then the translated option names
> -will not be processed.
> +information. If this is @code{NULL} (the default), then the
> +translated option names will not be processed.
> +@end deftypevar
> +
> +@deftypevar {const char *} opttextdomain
> +Option names may be translated in a textdomain that is not currently
> +the default (@pxref{Interface to gettext, , The Interface, gettext,
> +the GNU Gettext manual}). If this is @code{NULL} (the default), the
> +translation will be searched in the current text domain.
> @end deftypevar
>
> @deftypefun int getopt (int @var{argc}, char *const *@var{argv}, const char *@var{options})
> diff --git a/posix/Versions b/posix/Versions
> index 5873e8ec56..d1c2cffcf9 100644
> --- a/posix/Versions
> +++ b/posix/Versions
> @@ -160,7 +160,7 @@ libc {
> posix_spawn_file_actions_addtcsetpgrp_np;
> }
> GLIBC_2.43 {
> - optctxt;
> + optctxt; opttextdomain;
> }
> GLIBC_PRIVATE {
> __libc_fork; __libc_pread; __libc_pwrite;
> diff --git a/posix/bits/getopt_ext.h b/posix/bits/getopt_ext.h
> index 07d9407b64..6cd0932596 100644
> --- a/posix/bits/getopt_ext.h
> +++ b/posix/bits/getopt_ext.h
> @@ -31,6 +31,11 @@ __BEGIN_DECLS
> names. If unset, the option names will not be translated. */
>
> extern const char *optctxt;
> +
> +/* Callers store the textdomain to use to retrieve option names, or
> + NULL to use the current textdomain. */
> +
> +extern const char *opttextdomain;
> #endif
>
> /* Describe the long-named options requested by the application.
> diff --git a/posix/getopt.c b/posix/getopt.c
> index 28f0be03f8..28c8aa4bbf 100644
> --- a/posix/getopt.c
> +++ b/posix/getopt.c
> @@ -185,16 +185,20 @@ exchange (char **argv, struct _getopt_data *d)
> /* Return 1 iff translation_context is not NULL, a translation for
> opt_name has been found and it matches the substring from argument,
> length argument_length.
> +
> + The translate function pointer is like dpgettext.
> */
> static const int
> -match_translated_option_name (char *(*translate) (const char *, const char *),
> +match_translated_option_name (char *(*translate) (const char *, const char *,
> + const char *),
> const char *argument, size_t argument_length,
> const char *translation_context,
> + const char *opt_textdomain,
> const char *opt_name)
> {
> const char *translated = opt_name;
> if (translate)
> - translated = translate (translation_context, opt_name);
> + translated = translate (opt_textdomain, translation_context, opt_name);
> return (!strncmp (translated, argument, argument_length)
> && argument_length == strlen (translated));
> }
> @@ -212,7 +216,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 *, const char *))
> + char *(*translate) (const char *, const char *,
> + const char *))
> {
> char *nameend;
> size_t namelen;
> @@ -243,9 +248,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,
> - d->optctxt, p->name))
> + if (match_translated_option_name (translate, d->__nextchar, namelen,
> + d->optctxt, d->opttextdomain,
> + p->name))
> {
> /* Exact match found with translation. */
> pfound = p;
> @@ -369,7 +374,7 @@ process_long_option (int argc, char **argv, const char *optstring,
> /* We have found a matching long option. Consume it. */
> d->optind++;
> d->__nextchar = NULL;
> - translated_option_name = translate (d->optctxt, pfound->name);
> + translated_option_name = translate (d->opttextdomain, d->optctxt, pfound->name);
> if (*nameend)
> {
> /* Don't test has_arg with >, because some C compilers don't
> @@ -535,7 +540,8 @@ 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 *, const char *))
> + char *(*translate) (const char *, const char *,
> + const char *))
> {
> int print_errors = d->opterr;
>
> @@ -771,14 +777,16 @@ 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 *, const char *),
> - const char *ctxt)
> + char *(*translate) (const char *, const char *, const char *),
> + const char *ctxt,
> + const char *domain)
> {
> int result;
>
> getopt_data.optind = optind;
> getopt_data.opterr = opterr;
> getopt_data.optctxt = ctxt;
> + getopt_data.opttextdomain = domain;
>
> result = _getopt_internal_r (argc, argv, optstring, longopts,
> longind, long_only, &getopt_data,
> @@ -801,7 +809,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, NULL, NULL); \
> }
>
> #ifdef _LIBC
> diff --git a/posix/getopt1.c b/posix/getopt1.c
> index 28d090019d..48852dc692 100644
> --- a/posix/getopt1.c
> +++ b/posix/getopt1.c
> @@ -34,9 +34,14 @@
>
> const char *optctxt = NULL;
>
> +/* Callers store the textdomain in which the option names are to be
> + looked up. */
> +
> +const char *opttextdomain = NULL;
> +
> /* FIXME: use pgettext_expr. */
> static char *
> -do_translate (const char *context, const char *msgid)
> +do_translate (const char *domain, const char *context, const char *msgid)
> {
> char *full_msgid;
> const char *translated = msgid;
> @@ -49,7 +54,7 @@ do_translate (const char *context, const char *msgid)
> strcpy (full_msgid, context);
> full_msgid[strlen (context)] = '\004';
> strcpy (full_msgid + strlen (context) + 1, msgid);
> - translated = __dcgettext (NULL, full_msgid, LC_MESSAGES);
> + translated = __dcgettext (domain, full_msgid, LC_MESSAGES);
> if (!strcmp (translated, full_msgid))
> {
> translated = msgid;
> @@ -67,7 +72,8 @@ 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, do_translate, optctxt);
> + opt_index, 0, 0, do_translate,
> + optctxt, opttextdomain);
> }
>
> int
> @@ -90,7 +96,8 @@ 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, do_translate, optctxt);
> + opt_index, 1, 0, do_translate,
> + optctxt, opttextdomain);
Indentation seems off here (tab vs whitespace), I think it would be best
to follow the current file scheme.
> }
>
> int
> diff --git a/posix/getopt_int.h b/posix/getopt_int.h
> index 1d091979c3..1deb6cad35 100644
> --- a/posix/getopt_int.h
> +++ b/posix/getopt_int.h
> @@ -24,13 +24,14 @@
>
> /* The translate argument here is optional (can be NULL), it is used
> to avoid depending on the gettext functions in the posix getopt
> - function. */
> + function. It is like dpgettext. */
> 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 *, const char *),
> - const char *__optctxt);
> + char *(*translate) (const char *, const char *,
> + const char *),
> + const char *__optctxt, const char *__optdomain);
>
>
> /* Reentrant versions which can handle parsing multiple argument
> @@ -73,6 +74,7 @@ struct _getopt_data
> int optopt;
> char *optarg;
> const char *optctxt;
> + const char *opttextdomain;
>
> /* Internal members. */
>
> @@ -109,7 +111,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 *, const char *));
> + char *(*translate) (const char *, const char *,
> + const char *));
>
> extern int _getopt_long_r (int ___argc, char **___argv,
> const char *__shortopts,
> diff --git a/posix/tstgetoptl.c b/posix/tstgetoptl.c
> index 5ff1ba75c4..ba9dbe4222 100644
> --- a/posix/tstgetoptl.c
> +++ b/posix/tstgetoptl.c
> @@ -44,13 +44,8 @@ prepare_localedir (void)
> fputs ("Cannot call bindtextdomain.\n", stderr);
> return -1;
> }
> - if (textdomain ("tstgetoptl") == NULL)
> - {
> - fputs ("Cannot call textdomain.\n", stderr);
> - return -1;
> - }
> /* Check that the catalog is OK: */
> - if (strcmp (gettext (TRANSLATION_CONTEXT "\004" "color"), "colour") != 0)
> + if (strcmp (dgettext ("tstgetoptl", TRANSLATION_CONTEXT "\004" "color"), "colour") != 0)
> {
> fputs ("The mo file does not work.\n", stderr);
> return -1;
> @@ -62,6 +57,7 @@ int
> main (int argc, char **argv)
> {
> static const char *translation_context = TRANSLATION_CONTEXT;
> + static const char *translation_textdomain = "tstgetoptl";
> static const struct option options[] =
> {
> {"required", required_argument, NULL, 'r'},
> @@ -89,6 +85,7 @@ main (int argc, char **argv)
> return 1;
> }
> optctxt = translation_context;
> + opttextdomain = translation_textdomain;
> while ((c = getopt_long (argc, argv, "abc:", options, NULL)) >= 0)
> switch (c)
> {
> diff --git a/sysdeps/mach/hurd/i386/libc.abilist b/sysdeps/mach/hurd/i386/libc.abilist
> index d1c441a8a1..8bbbf217dd 100644
> --- a/sysdeps/mach/hurd/i386/libc.abilist
> +++ b/sysdeps/mach/hurd/i386/libc.abilist
> @@ -2674,6 +2674,7 @@ GLIBC_2.43 __memset_explicit_chk F
> GLIBC_2.43 memalignment F
> GLIBC_2.43 memset_explicit F
> GLIBC_2.43 optctxt D 0x4
> +GLIBC_2.43 opttextdomain D 0x4
> GLIBC_2.43 pthread_cancel F
> GLIBC_2.43 pthread_clockjoin_np F
> GLIBC_2.43 pthread_create F
> diff --git a/sysdeps/mach/hurd/x86_64/libc.abilist b/sysdeps/mach/hurd/x86_64/libc.abilist
> index a8acbe9471..58a0278ebd 100644
> --- a/sysdeps/mach/hurd/x86_64/libc.abilist
> +++ b/sysdeps/mach/hurd/x86_64/libc.abilist
> @@ -2352,6 +2352,7 @@ GLIBC_2.43 __memset_explicit_chk F
> GLIBC_2.43 memalignment F
> GLIBC_2.43 memset_explicit F
> GLIBC_2.43 optctxt D 0x8
> +GLIBC_2.43 opttextdomain D 0x8
> GLIBC_2.43 pthread_cancel F
> GLIBC_2.43 pthread_clockjoin_np F
> GLIBC_2.43 pthread_create F
> diff --git a/sysdeps/unix/sysv/linux/aarch64/libc.abilist b/sysdeps/unix/sysv/linux/aarch64/libc.abilist
> index 1e0513f12c..603ec87df0 100644
> --- a/sysdeps/unix/sysv/linux/aarch64/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/aarch64/libc.abilist
> @@ -2772,4 +2772,5 @@ GLIBC_2.43 memalignment F
> GLIBC_2.43 memset_explicit F
> GLIBC_2.43 mseal F
> GLIBC_2.43 optctxt D 0x8
> +GLIBC_2.43 opttextdomain D 0x8
> GLIBC_2.43 umaxabs F
> diff --git a/sysdeps/unix/sysv/linux/alpha/libc.abilist b/sysdeps/unix/sysv/linux/alpha/libc.abilist
> index d12d10ebb5..a856c122d1 100644
> --- a/sysdeps/unix/sysv/linux/alpha/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/alpha/libc.abilist
> @@ -3119,6 +3119,7 @@ GLIBC_2.43 memalignment F
> GLIBC_2.43 memset_explicit F
> GLIBC_2.43 mseal F
> GLIBC_2.43 optctxt D 0x8
> +GLIBC_2.43 opttextdomain D 0x8
> GLIBC_2.43 umaxabs F
> GLIBC_2.5 __readlinkat_chk F
> GLIBC_2.5 inet6_opt_append F
> diff --git a/sysdeps/unix/sysv/linux/arc/libc.abilist b/sysdeps/unix/sysv/linux/arc/libc.abilist
> index c97274a7be..678fd1fa68 100644
> --- a/sysdeps/unix/sysv/linux/arc/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/arc/libc.abilist
> @@ -2533,4 +2533,5 @@ GLIBC_2.43 memalignment F
> GLIBC_2.43 memset_explicit F
> GLIBC_2.43 mseal F
> GLIBC_2.43 optctxt D 0x4
> +GLIBC_2.43 opttextdomain D 0x4
> GLIBC_2.43 umaxabs F
> diff --git a/sysdeps/unix/sysv/linux/arm/be/libc.abilist b/sysdeps/unix/sysv/linux/arm/be/libc.abilist
> index fd162d2f9e..2b6f5860d6 100644
> --- a/sysdeps/unix/sysv/linux/arm/be/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/arm/be/libc.abilist
> @@ -2825,6 +2825,7 @@ GLIBC_2.43 memalignment F
> GLIBC_2.43 memset_explicit F
> GLIBC_2.43 mseal F
> GLIBC_2.43 optctxt D 0x4
> +GLIBC_2.43 opttextdomain D 0x4
> GLIBC_2.43 umaxabs F
> GLIBC_2.5 __readlinkat_chk F
> GLIBC_2.5 inet6_opt_append F
> diff --git a/sysdeps/unix/sysv/linux/arm/le/libc.abilist b/sysdeps/unix/sysv/linux/arm/le/libc.abilist
> index e301318258..d093fcbbb4 100644
> --- a/sysdeps/unix/sysv/linux/arm/le/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/arm/le/libc.abilist
> @@ -2822,6 +2822,7 @@ GLIBC_2.43 memalignment F
> GLIBC_2.43 memset_explicit F
> GLIBC_2.43 mseal F
> GLIBC_2.43 optctxt D 0x4
> +GLIBC_2.43 opttextdomain D 0x4
> GLIBC_2.43 umaxabs F
> GLIBC_2.5 __readlinkat_chk F
> GLIBC_2.5 inet6_opt_append F
> diff --git a/sysdeps/unix/sysv/linux/csky/libc.abilist b/sysdeps/unix/sysv/linux/csky/libc.abilist
> index 27b0b81cfe..eb06651ee5 100644
> --- a/sysdeps/unix/sysv/linux/csky/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/csky/libc.abilist
> @@ -2809,4 +2809,5 @@ GLIBC_2.43 memalignment F
> GLIBC_2.43 memset_explicit F
> GLIBC_2.43 mseal F
> GLIBC_2.43 optctxt D 0x4
> +GLIBC_2.43 opttextdomain D 0x4
> GLIBC_2.43 umaxabs F
> diff --git a/sysdeps/unix/sysv/linux/hppa/libc.abilist b/sysdeps/unix/sysv/linux/hppa/libc.abilist
> index 3067baf9b6..1b97354812 100644
> --- a/sysdeps/unix/sysv/linux/hppa/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/hppa/libc.abilist
> @@ -2846,6 +2846,7 @@ GLIBC_2.43 memalignment F
> GLIBC_2.43 memset_explicit F
> GLIBC_2.43 mseal F
> GLIBC_2.43 optctxt D 0x4
> +GLIBC_2.43 opttextdomain D 0x4
> GLIBC_2.43 umaxabs F
> GLIBC_2.5 __readlinkat_chk F
> GLIBC_2.5 inet6_opt_append F
> diff --git a/sysdeps/unix/sysv/linux/i386/libc.abilist b/sysdeps/unix/sysv/linux/i386/libc.abilist
> index 4835a0fb31..08c719ad45 100644
> --- a/sysdeps/unix/sysv/linux/i386/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/i386/libc.abilist
> @@ -3029,6 +3029,7 @@ GLIBC_2.43 memalignment F
> GLIBC_2.43 memset_explicit F
> GLIBC_2.43 mseal F
> GLIBC_2.43 optctxt D 0x4
> +GLIBC_2.43 opttextdomain D 0x4
> GLIBC_2.43 umaxabs F
> GLIBC_2.5 __readlinkat_chk F
> GLIBC_2.5 inet6_opt_append F
> diff --git a/sysdeps/unix/sysv/linux/loongarch/lp64/libc.abilist b/sysdeps/unix/sysv/linux/loongarch/lp64/libc.abilist
> index e6998b2755..f47d94f0f7 100644
> --- a/sysdeps/unix/sysv/linux/loongarch/lp64/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/loongarch/lp64/libc.abilist
> @@ -2293,4 +2293,5 @@ GLIBC_2.43 memalignment F
> GLIBC_2.43 memset_explicit F
> GLIBC_2.43 mseal F
> GLIBC_2.43 optctxt D 0x8
> +GLIBC_2.43 opttextdomain D 0x8
> GLIBC_2.43 umaxabs F
> diff --git a/sysdeps/unix/sysv/linux/m68k/coldfire/libc.abilist b/sysdeps/unix/sysv/linux/m68k/coldfire/libc.abilist
> index 65f549ded4..638698ca09 100644
> --- a/sysdeps/unix/sysv/linux/m68k/coldfire/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/m68k/coldfire/libc.abilist
> @@ -2805,6 +2805,7 @@ GLIBC_2.43 memalignment F
> GLIBC_2.43 memset_explicit F
> GLIBC_2.43 mseal F
> GLIBC_2.43 optctxt D 0x4
> +GLIBC_2.43 opttextdomain D 0x4
> GLIBC_2.43 umaxabs F
> GLIBC_2.5 __readlinkat_chk F
> GLIBC_2.5 inet6_opt_append F
> diff --git a/sysdeps/unix/sysv/linux/m68k/m680x0/libc.abilist b/sysdeps/unix/sysv/linux/m68k/m680x0/libc.abilist
> index 8c916a2fc4..805dd6ac46 100644
> --- a/sysdeps/unix/sysv/linux/m68k/m680x0/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/m68k/m680x0/libc.abilist
> @@ -2972,6 +2972,7 @@ GLIBC_2.43 memalignment F
> GLIBC_2.43 memset_explicit F
> GLIBC_2.43 mseal F
> GLIBC_2.43 optctxt D 0x4
> +GLIBC_2.43 opttextdomain D 0x4
> GLIBC_2.43 umaxabs F
> GLIBC_2.5 __readlinkat_chk F
> GLIBC_2.5 inet6_opt_append F
> diff --git a/sysdeps/unix/sysv/linux/microblaze/be/libc.abilist b/sysdeps/unix/sysv/linux/microblaze/be/libc.abilist
> index 987a22a2d8..bb7afedc0d 100644
> --- a/sysdeps/unix/sysv/linux/microblaze/be/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/microblaze/be/libc.abilist
> @@ -2858,4 +2858,5 @@ GLIBC_2.43 memalignment F
> GLIBC_2.43 memset_explicit F
> GLIBC_2.43 mseal F
> GLIBC_2.43 optctxt D 0x4
> +GLIBC_2.43 opttextdomain D 0x4
> GLIBC_2.43 umaxabs F
> diff --git a/sysdeps/unix/sysv/linux/microblaze/le/libc.abilist b/sysdeps/unix/sysv/linux/microblaze/le/libc.abilist
> index 750543455e..f561509ee2 100644
> --- a/sysdeps/unix/sysv/linux/microblaze/le/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/microblaze/le/libc.abilist
> @@ -2855,4 +2855,5 @@ GLIBC_2.43 memalignment F
> GLIBC_2.43 memset_explicit F
> GLIBC_2.43 mseal F
> GLIBC_2.43 optctxt D 0x4
> +GLIBC_2.43 opttextdomain D 0x4
> GLIBC_2.43 umaxabs F
> diff --git a/sysdeps/unix/sysv/linux/mips/mips32/fpu/libc.abilist b/sysdeps/unix/sysv/linux/mips/mips32/fpu/libc.abilist
> index 2a06dd4b62..766585d581 100644
> --- a/sysdeps/unix/sysv/linux/mips/mips32/fpu/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/mips/mips32/fpu/libc.abilist
> @@ -2935,6 +2935,7 @@ GLIBC_2.43 memalignment F
> GLIBC_2.43 memset_explicit F
> GLIBC_2.43 mseal F
> GLIBC_2.43 optctxt D 0x4
> +GLIBC_2.43 opttextdomain D 0x4
> GLIBC_2.43 umaxabs F
> GLIBC_2.5 __readlinkat_chk F
> GLIBC_2.5 inet6_opt_append F
> diff --git a/sysdeps/unix/sysv/linux/mips/mips32/nofpu/libc.abilist b/sysdeps/unix/sysv/linux/mips/mips32/nofpu/libc.abilist
> index 729427d1f5..187ec50129 100644
> --- a/sysdeps/unix/sysv/linux/mips/mips32/nofpu/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/mips/mips32/nofpu/libc.abilist
> @@ -2933,6 +2933,7 @@ GLIBC_2.43 memalignment F
> GLIBC_2.43 memset_explicit F
> GLIBC_2.43 mseal F
> GLIBC_2.43 optctxt D 0x4
> +GLIBC_2.43 opttextdomain D 0x4
> GLIBC_2.43 umaxabs F
> GLIBC_2.5 __readlinkat_chk F
> GLIBC_2.5 inet6_opt_append F
> diff --git a/sysdeps/unix/sysv/linux/mips/mips64/n32/libc.abilist b/sysdeps/unix/sysv/linux/mips/mips64/n32/libc.abilist
> index 8fbfee4e4b..d719e736c7 100644
> --- a/sysdeps/unix/sysv/linux/mips/mips64/n32/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/mips/mips64/n32/libc.abilist
> @@ -2941,6 +2941,7 @@ GLIBC_2.43 memalignment F
> GLIBC_2.43 memset_explicit F
> GLIBC_2.43 mseal F
> GLIBC_2.43 optctxt D 0x4
> +GLIBC_2.43 opttextdomain D 0x4
> GLIBC_2.43 umaxabs F
> GLIBC_2.5 __readlinkat_chk F
> GLIBC_2.5 inet6_opt_append F
> diff --git a/sysdeps/unix/sysv/linux/mips/mips64/n64/libc.abilist b/sysdeps/unix/sysv/linux/mips/mips64/n64/libc.abilist
> index 56d2710038..743192c321 100644
> --- a/sysdeps/unix/sysv/linux/mips/mips64/n64/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/mips/mips64/n64/libc.abilist
> @@ -2843,6 +2843,7 @@ GLIBC_2.43 memalignment F
> GLIBC_2.43 memset_explicit F
> GLIBC_2.43 mseal F
> GLIBC_2.43 optctxt D 0x8
> +GLIBC_2.43 opttextdomain D 0x8
> GLIBC_2.43 umaxabs F
> GLIBC_2.5 __readlinkat_chk F
> GLIBC_2.5 inet6_opt_append F
> diff --git a/sysdeps/unix/sysv/linux/or1k/libc.abilist b/sysdeps/unix/sysv/linux/or1k/libc.abilist
> index 0a2df2da16..25bba003b0 100644
> --- a/sysdeps/unix/sysv/linux/or1k/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/or1k/libc.abilist
> @@ -2283,4 +2283,5 @@ GLIBC_2.43 memalignment F
> GLIBC_2.43 memset_explicit F
> GLIBC_2.43 mseal F
> GLIBC_2.43 optctxt D 0x4
> +GLIBC_2.43 opttextdomain D 0x4
> GLIBC_2.43 umaxabs F
> diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/libc.abilist b/sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/libc.abilist
> index 88caad6f7d..5d3ba8bcd9 100644
> --- a/sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/libc.abilist
> @@ -3162,6 +3162,7 @@ GLIBC_2.43 memalignment F
> GLIBC_2.43 memset_explicit F
> GLIBC_2.43 mseal F
> GLIBC_2.43 optctxt D 0x4
> +GLIBC_2.43 opttextdomain D 0x4
> GLIBC_2.43 umaxabs F
> GLIBC_2.5 __readlinkat_chk F
> GLIBC_2.5 inet6_opt_append F
> diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/libc.abilist b/sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/libc.abilist
> index da49982d8b..8e36ec4635 100644
> --- a/sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/libc.abilist
> @@ -3207,6 +3207,7 @@ GLIBC_2.43 memalignment F
> GLIBC_2.43 memset_explicit F
> GLIBC_2.43 mseal F
> GLIBC_2.43 optctxt D 0x4
> +GLIBC_2.43 opttextdomain D 0x4
> GLIBC_2.43 umaxabs F
> GLIBC_2.5 __readlinkat_chk F
> GLIBC_2.5 inet6_opt_append F
> diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc64/be/libc.abilist b/sysdeps/unix/sysv/linux/powerpc/powerpc64/be/libc.abilist
> index 2172b1da70..00f5595010 100644
> --- a/sysdeps/unix/sysv/linux/powerpc/powerpc64/be/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/powerpc/powerpc64/be/libc.abilist
> @@ -2916,6 +2916,7 @@ GLIBC_2.43 memalignment F
> GLIBC_2.43 memset_explicit F
> GLIBC_2.43 mseal F
> GLIBC_2.43 optctxt D 0x8
> +GLIBC_2.43 opttextdomain D 0x8
> GLIBC_2.43 umaxabs F
> GLIBC_2.5 __readlinkat_chk F
> GLIBC_2.5 inet6_opt_append F
> diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc64/le/libc.abilist b/sysdeps/unix/sysv/linux/powerpc/powerpc64/le/libc.abilist
> index 945136a977..c1f6249587 100644
> --- a/sysdeps/unix/sysv/linux/powerpc/powerpc64/le/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/powerpc/powerpc64/le/libc.abilist
> @@ -2992,4 +2992,5 @@ GLIBC_2.43 memalignment F
> GLIBC_2.43 memset_explicit F
> GLIBC_2.43 mseal F
> GLIBC_2.43 optctxt D 0x8
> +GLIBC_2.43 opttextdomain D 0x8
> GLIBC_2.43 umaxabs F
> diff --git a/sysdeps/unix/sysv/linux/riscv/rv32/libc.abilist b/sysdeps/unix/sysv/linux/riscv/rv32/libc.abilist
> index 21f0a88d41..62fcce2274 100644
> --- a/sysdeps/unix/sysv/linux/riscv/rv32/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/riscv/rv32/libc.abilist
> @@ -2536,4 +2536,5 @@ GLIBC_2.43 memalignment F
> GLIBC_2.43 memset_explicit F
> GLIBC_2.43 mseal F
> GLIBC_2.43 optctxt D 0x4
> +GLIBC_2.43 opttextdomain D 0x4
> GLIBC_2.43 umaxabs F
> diff --git a/sysdeps/unix/sysv/linux/riscv/rv64/libc.abilist b/sysdeps/unix/sysv/linux/riscv/rv64/libc.abilist
> index 9dd988a92e..046cd83f47 100644
> --- a/sysdeps/unix/sysv/linux/riscv/rv64/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/riscv/rv64/libc.abilist
> @@ -2736,4 +2736,5 @@ GLIBC_2.43 memalignment F
> GLIBC_2.43 memset_explicit F
> GLIBC_2.43 mseal F
> GLIBC_2.43 optctxt D 0x8
> +GLIBC_2.43 opttextdomain D 0x8
> GLIBC_2.43 umaxabs F
> diff --git a/sysdeps/unix/sysv/linux/s390/s390-32/libc.abilist b/sysdeps/unix/sysv/linux/s390/s390-32/libc.abilist
> index a1bff04a5a..47fc67f29f 100644
> --- a/sysdeps/unix/sysv/linux/s390/s390-32/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/s390/s390-32/libc.abilist
> @@ -3160,6 +3160,7 @@ GLIBC_2.43 memalignment F
> GLIBC_2.43 memset_explicit F
> GLIBC_2.43 mseal F
> GLIBC_2.43 optctxt D 0x4
> +GLIBC_2.43 opttextdomain D 0x4
> GLIBC_2.43 umaxabs F
> GLIBC_2.5 __readlinkat_chk F
> GLIBC_2.5 inet6_opt_append F
> diff --git a/sysdeps/unix/sysv/linux/s390/s390-64/libc.abilist b/sysdeps/unix/sysv/linux/s390/s390-64/libc.abilist
> index 9ac68b7b00..f38a344c24 100644
> --- a/sysdeps/unix/sysv/linux/s390/s390-64/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/s390/s390-64/libc.abilist
> @@ -2953,6 +2953,7 @@ GLIBC_2.43 memalignment F
> GLIBC_2.43 memset_explicit F
> GLIBC_2.43 mseal F
> GLIBC_2.43 optctxt D 0x8
> +GLIBC_2.43 opttextdomain D 0x8
> GLIBC_2.43 umaxabs F
> GLIBC_2.5 __readlinkat_chk F
> GLIBC_2.5 inet6_opt_append F
> diff --git a/sysdeps/unix/sysv/linux/sh/be/libc.abilist b/sysdeps/unix/sysv/linux/sh/be/libc.abilist
> index 1b9ce36b70..73042b2f8e 100644
> --- a/sysdeps/unix/sysv/linux/sh/be/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/sh/be/libc.abilist
> @@ -2852,6 +2852,7 @@ GLIBC_2.43 memalignment F
> GLIBC_2.43 memset_explicit F
> GLIBC_2.43 mseal F
> GLIBC_2.43 optctxt D 0x4
> +GLIBC_2.43 opttextdomain D 0x4
> GLIBC_2.43 umaxabs F
> GLIBC_2.5 __readlinkat_chk F
> GLIBC_2.5 inet6_opt_append F
> diff --git a/sysdeps/unix/sysv/linux/sh/le/libc.abilist b/sysdeps/unix/sysv/linux/sh/le/libc.abilist
> index ed9c1856d7..5afb161efc 100644
> --- a/sysdeps/unix/sysv/linux/sh/le/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/sh/le/libc.abilist
> @@ -2849,6 +2849,7 @@ GLIBC_2.43 memalignment F
> GLIBC_2.43 memset_explicit F
> GLIBC_2.43 mseal F
> GLIBC_2.43 optctxt D 0x4
> +GLIBC_2.43 opttextdomain D 0x4
> GLIBC_2.43 umaxabs F
> GLIBC_2.5 __readlinkat_chk F
> GLIBC_2.5 inet6_opt_append F
> diff --git a/sysdeps/unix/sysv/linux/sparc/sparc32/libc.abilist b/sysdeps/unix/sysv/linux/sparc/sparc32/libc.abilist
> index 8fa6f79ba4..1a29d86af8 100644
> --- a/sysdeps/unix/sysv/linux/sparc/sparc32/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/sparc/sparc32/libc.abilist
> @@ -3183,6 +3183,7 @@ GLIBC_2.43 memalignment F
> GLIBC_2.43 memset_explicit F
> GLIBC_2.43 mseal F
> GLIBC_2.43 optctxt D 0x4
> +GLIBC_2.43 opttextdomain D 0x4
> GLIBC_2.43 umaxabs F
> GLIBC_2.5 __readlinkat_chk F
> GLIBC_2.5 inet6_opt_append F
> diff --git a/sysdeps/unix/sysv/linux/sparc/sparc64/libc.abilist b/sysdeps/unix/sysv/linux/sparc/sparc64/libc.abilist
> index 0567d53579..9e3e615506 100644
> --- a/sysdeps/unix/sysv/linux/sparc/sparc64/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/sparc/sparc64/libc.abilist
> @@ -2819,6 +2819,7 @@ GLIBC_2.43 memalignment F
> GLIBC_2.43 memset_explicit F
> GLIBC_2.43 mseal F
> GLIBC_2.43 optctxt D 0x8
> +GLIBC_2.43 opttextdomain D 0x8
> GLIBC_2.43 umaxabs F
> GLIBC_2.5 __readlinkat_chk F
> GLIBC_2.5 inet6_opt_append F
> diff --git a/sysdeps/unix/sysv/linux/x86_64/64/libc.abilist b/sysdeps/unix/sysv/linux/x86_64/64/libc.abilist
> index a2fb584c25..1181637e40 100644
> --- a/sysdeps/unix/sysv/linux/x86_64/64/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/x86_64/64/libc.abilist
> @@ -2768,6 +2768,7 @@ GLIBC_2.43 memalignment F
> GLIBC_2.43 memset_explicit F
> GLIBC_2.43 mseal F
> GLIBC_2.43 optctxt D 0x8
> +GLIBC_2.43 opttextdomain D 0x8
> GLIBC_2.43 umaxabs F
> GLIBC_2.5 __readlinkat_chk F
> GLIBC_2.5 inet6_opt_append F
> diff --git a/sysdeps/unix/sysv/linux/x86_64/x32/libc.abilist b/sysdeps/unix/sysv/linux/x86_64/x32/libc.abilist
> index aece7b5279..e45968abe7 100644
> --- a/sysdeps/unix/sysv/linux/x86_64/x32/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/x86_64/x32/libc.abilist
> @@ -2787,4 +2787,5 @@ GLIBC_2.43 memalignment F
> GLIBC_2.43 memset_explicit F
> GLIBC_2.43 mseal F
> GLIBC_2.43 optctxt D 0x4
> +GLIBC_2.43 opttextdomain D 0x4
> GLIBC_2.43 umaxabs F
More information about the Libc-alpha
mailing list