[PATCH v3] string: New thread-safe strtok version
Adhemerval Zanella Netto
adhemerval.zanella@linaro.org
Mon Jun 9 21:02:17 GMT 2025
On 20/05/25 15:51, Florian Weimer wrote:
> Introduce a new symbol version, so that applications can rely
> on the new behavior.
>
> The compatibility symbol is not thread-safe and switches to the
> legacy behavior that some historic applications rely on. See
> the previous discussion on bug 16640.
I am failing to see the need of a compat symbol here, the generic
implementation never had such guarantee and the BZ#16640 (f2d7f23a300f57e)
remove the wrong behavior for x86 and powerpc64.
This was done on 2.26 and there is no report this has broken anything;
adding this compat symbol would in fact change the semantic on old
binaries for all ABIs.
Even for providing a non-thread safe make little sense to me, for
thread applications it means that programs either were relying on
data races or abusing the interface (neither are good things and
I really doubt there is workload that do rely on strtok being
non thread-safe).
>
> ---
> v3: Fix Hurd test build failure. Rebase on top of current development.
> NEWS | 5 ++
> string/Makefile | 5 ++
> string/Versions | 3 ++
> string/strtok.c | 21 +++++++-
> string/tst-strtok-compat.c | 63 ++++++++++++++++++++++
> string/tst-strtok-thread.c | 50 +++++++++++++++++
> sysdeps/generic/tls-internal-struct.h | 1 +
> 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 +
> .../unix/sysv/linux/loongarch/lp64/libc.abilist | 1 +
> sysdeps/unix/sysv/linux/m68k/coldfire/libc.abilist | 1 +
> sysdeps/unix/sysv/linux/m68k/m680x0/libc.abilist | 1 +
> sysdeps/unix/sysv/linux/microblaze/be/libc.abilist | 1 +
> sysdeps/unix/sysv/linux/microblaze/le/libc.abilist | 1 +
> .../unix/sysv/linux/mips/mips32/fpu/libc.abilist | 1 +
> .../unix/sysv/linux/mips/mips32/nofpu/libc.abilist | 1 +
> .../unix/sysv/linux/mips/mips64/n32/libc.abilist | 1 +
> .../unix/sysv/linux/mips/mips64/n64/libc.abilist | 1 +
> sysdeps/unix/sysv/linux/or1k/libc.abilist | 1 +
> .../sysv/linux/powerpc/powerpc32/fpu/libc.abilist | 1 +
> .../linux/powerpc/powerpc32/nofpu/libc.abilist | 1 +
> .../sysv/linux/powerpc/powerpc64/be/libc.abilist | 1 +
> .../sysv/linux/powerpc/powerpc64/le/libc.abilist | 1 +
> sysdeps/unix/sysv/linux/riscv/rv32/libc.abilist | 1 +
> sysdeps/unix/sysv/linux/riscv/rv64/libc.abilist | 1 +
> sysdeps/unix/sysv/linux/s390/s390-32/libc.abilist | 1 +
> sysdeps/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 +
> sysdeps/unix/sysv/linux/sparc/sparc32/libc.abilist | 1 +
> sysdeps/unix/sysv/linux/sparc/sparc64/libc.abilist | 1 +
> sysdeps/unix/sysv/linux/x86_64/64/libc.abilist | 1 +
> sysdeps/unix/sysv/linux/x86_64/x32/libc.abilist | 1 +
> 41 files changed, 180 insertions(+), 2 deletions(-)
>
> diff --git a/NEWS b/NEWS
> index afe8076dfc..ed5dc858fd 100644
> --- a/NEWS
> +++ b/NEWS
> @@ -33,6 +33,11 @@ Deprecated and removed features, and other changes affecting compatibility:
> obsolete since the very first version of POSIX.1 in 1988, replaced
> with <termios.h>.
>
> +* For newly linked applications, the strtok function is now thread-safe.
> + The first call to strtok on each thread must have a non-null first
> + argument. (It is recommended that applications and libraries in
> + particular use strtok_r.)
> +
> Changes to build and runtime requirements:
>
> * GCC 12.1 or later is now required to build the GNU C Library.
> diff --git a/string/Makefile b/string/Makefile
> index c83b195e2e..32dbe247fa 100644
> --- a/string/Makefile
> +++ b/string/Makefile
> @@ -204,6 +204,8 @@ tests := \
> tst-strlcpy2 \
> tst-strlen \
> tst-strtok \
> + tst-strtok-compat \
> + tst-strtok-thread \
> tst-strtok_r \
> tst-strxfrm \
> tst-strxfrm2 \
> @@ -309,3 +311,6 @@ $(objpfx)tst-strsignal.out: $(gen-locales)
> $(objpfx)tst-strerror.out: $(gen-locales)
>
> endif
> +
> +$(objpfx)tst-strtok-compat: $(shared-thread-library)
> +$(objpfx)tst-strtok-thread: $(shared-thread-library)
> diff --git a/string/Versions b/string/Versions
> index c56e372a3c..bbe4848307 100644
> --- a/string/Versions
> +++ b/string/Versions
> @@ -96,4 +96,7 @@ libc {
> strlcat;
> strlcpy;
> }
> + GLIBC_2.42 {
> + strtok;
> + }
> }
> diff --git a/string/strtok.c b/string/strtok.c
> index d0c69afc1f..dcfbbcb169 100644
> --- a/string/strtok.c
> +++ b/string/strtok.c
> @@ -16,7 +16,8 @@
> <https://www.gnu.org/licenses/>. */
>
> #include <string.h>
> -
> +#include <tls-internal.h>
> +#include <shlib-compat.h>
>
> /* Parse S into tokens separated by characters in DELIM.
> If S is NULL, the last string strtok() was called with is
> @@ -28,8 +29,24 @@
> // s = "abc\0=-def\0"
> */
> char *
> -strtok (char *s, const char *delim)
> +__strtok (char *s, const char *delim)
> +{
> + struct tls_internal_t *tls_internal = __glibc_tls_internal ();
> + return __strtok_r (s, delim, &tls_internal->strtok_buf);
> +}
> +versioned_symbol (libc, __strtok, strtok, GLIBC_2_42);
> +
> +#if SHLIB_COMPAT (libc, GLIBC_2_0, GLIBC_2_42)
> +/* The previous version was not thread-safe. */
> +char *
> +__strtok_old (char *s, const char *delim)
> {
> static char *olds;
> + if (olds == NULL && s == NULL)
> + /* Compatibility kludge for very old applications expecting BSD
> + behavior. */
> + return NULL;
> return __strtok_r (s, delim, &olds);
> }
> +compat_symbol (libc, __strtok_old, strtok, GLIBC_2_0);
> +#endif
> diff --git a/string/tst-strtok-compat.c b/string/tst-strtok-compat.c
> new file mode 100644
> index 0000000000..29912db535
> --- /dev/null
> +++ b/string/tst-strtok-compat.c
> @@ -0,0 +1,63 @@
> +/* Verify BSD-compatible behavior of non-thread-safe strtok.
> + Copyright (C) 2025 Free Software Foundation, Inc.
> + This file is part of the GNU C Library.
> +
> + The GNU C Library is free software; you can redistribute it and/or
> + modify it under the terms of the GNU Lesser General Public
> + License as published by the Free Software Foundation; either
> + version 2.1 of the License, or (at your option) any later version.
> +
> + The GNU C Library is distributed in the hope that it will be useful,
> + but WITHOUT ANY WARRANTY; without even the implied warranty of
> + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
> + Lesser General Public License for more details.
> +
> + You should have received a copy of the GNU Lesser General Public
> + License along with the GNU C Library; if not, see
> + <https://www.gnu.org/licenses/>. */
> +
> +#include <dlfcn.h>
> +#include <first-versions.h>
> +#include <stddef.h>
> +#include <stdio.h>
> +#include <string.h>
> +#include <support/check.h>
> +#include <support/xthread.h>
> +
> +/* Compatibility symbol variant of strtok. */
> +static __typeof (strtok) *old_impl;
> +
> +static void *
> +thread_func (void *ignored)
> +{
> + TEST_COMPARE_STRING (old_impl (NULL, ":"), "bb");
> + return NULL;
> +}
> +
> +static int
> +do_test (void)
> +{
> + old_impl = dlvsym (RTLD_DEFAULT, "strtok", FIRST_VERSION_libc_strtok_STRING);
> + TEST_VERIFY (old_impl != NULL);
> +
> + /* Check to see if there is a distinct compatibility symbol. */
> + if (old_impl == dlsym (RTLD_DEFAULT, "strtok"))
> + {
> + puts ("info: strtok is always thread-safe on this target");
> + return 0;
> + }
> +
> + /* This tests the legacy BSD behavior. */
> + TEST_VERIFY (old_impl (NULL, ":") == NULL);
> +
> + /* Verify that the old implementation is not thread-safe. */
> + char buf[] = "aa:bb:cc";
> + TEST_COMPARE_STRING (old_impl (buf, ":"), "aa");
> + xpthread_join (xpthread_create (NULL, thread_func, NULL));
> + TEST_COMPARE_STRING (old_impl (NULL, ":"), "cc");
> + TEST_COMPARE_STRING (old_impl (NULL, ":"), NULL);
> +
> + return 0;
> +}
> +
> +#include <support/test-driver.c>
> diff --git a/string/tst-strtok-thread.c b/string/tst-strtok-thread.c
> new file mode 100644
> index 0000000000..f4dfd2f5c1
> --- /dev/null
> +++ b/string/tst-strtok-thread.c
> @@ -0,0 +1,50 @@
> +/* Test that strtok uses a per-thread internal pointer.
> + Copyright (C) 2025 Free Software Foundation, Inc.
> + This file is part of the GNU C Library.
> +
> + The GNU C Library is free software; you can redistribute it and/or
> + modify it under the terms of the GNU Lesser General Public
> + License as published by the Free Software Foundation; either
> + version 2.1 of the License, or (at your option) any later version.
> +
> + The GNU C Library is distributed in the hope that it will be useful,
> + but WITHOUT ANY WARRANTY; without even the implied warranty of
> + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
> + Lesser General Public License for more details.
> +
> + You should have received a copy of the GNU Lesser General Public
> + License along with the GNU C Library; if not, see
> + <https://www.gnu.org/licenses/>. */
> +
> +#include <stddef.h>
> +#include <stdio.h>
> +#include <string.h>
> +#include <support/check.h>
> +#include <support/xthread.h>
> +
> +static void *
> +thread_func (void *ignored)
> +{
> + char buf[] = "11,22,33";
> + TEST_COMPARE_STRING (strtok (buf, ","), "11");
> + TEST_COMPARE_STRING (strtok (NULL, ","), "22");
> + TEST_COMPARE_STRING (strtok (NULL, ","), "33");
> + TEST_COMPARE_STRING (strtok (NULL, ","), NULL);
> + return NULL;
> +}
> +
> +static int
> +do_test (void)
> +{
> + /* Verify that the old implementation is not thread-safe. */
> + char buf[] = "aa:bb:cc";
> + TEST_COMPARE_STRING (strtok (buf, ":"), "aa");
> + xpthread_join (xpthread_create (NULL, thread_func, NULL));
> + TEST_COMPARE_STRING (strtok (NULL, ":"), "bb");
> + TEST_COMPARE_STRING (strtok (NULL, ":"), "cc");
> + TEST_COMPARE_STRING (strtok (NULL, ":"), NULL);
> +
> + return 0;
> +}
> +
> +#include <support/test-driver.c>
> diff --git a/sysdeps/generic/tls-internal-struct.h b/sysdeps/generic/tls-internal-struct.h
> index b98db8a933..2c288c3f0f 100644
> --- a/sysdeps/generic/tls-internal-struct.h
> +++ b/sysdeps/generic/tls-internal-struct.h
> @@ -23,6 +23,7 @@ struct tls_internal_t
> {
> char *strsignal_buf;
> char *strerror_l_buf;
> + char *strtok_buf;
> };
>
> #endif
> diff --git a/sysdeps/mach/hurd/i386/libc.abilist b/sysdeps/mach/hurd/i386/libc.abilist
> index 3e183f5c02..088e2fd506 100644
> --- a/sysdeps/mach/hurd/i386/libc.abilist
> +++ b/sysdeps/mach/hurd/i386/libc.abilist
> @@ -2614,6 +2614,7 @@ GLIBC_2.42 pthread_rwlockattr_destroy F
> GLIBC_2.42 pthread_rwlockattr_getpshared F
> GLIBC_2.42 pthread_rwlockattr_init F
> GLIBC_2.42 pthread_rwlockattr_setpshared F
> +GLIBC_2.42 strtok F
> GLIBC_2.42 uabs F
> GLIBC_2.42 uimaxabs F
> GLIBC_2.42 ulabs F
> diff --git a/sysdeps/mach/hurd/x86_64/libc.abilist b/sysdeps/mach/hurd/x86_64/libc.abilist
> index 688ee26f4b..095417d2db 100644
> --- a/sysdeps/mach/hurd/x86_64/libc.abilist
> +++ b/sysdeps/mach/hurd/x86_64/libc.abilist
> @@ -2297,6 +2297,7 @@ GLIBC_2.42 pthread_rwlockattr_destroy F
> GLIBC_2.42 pthread_rwlockattr_getpshared F
> GLIBC_2.42 pthread_rwlockattr_init F
> GLIBC_2.42 pthread_rwlockattr_setpshared F
> +GLIBC_2.42 strtok F
> GLIBC_2.42 uabs F
> GLIBC_2.42 uimaxabs F
> GLIBC_2.42 ulabs F
> diff --git a/sysdeps/unix/sysv/linux/aarch64/libc.abilist b/sysdeps/unix/sysv/linux/aarch64/libc.abilist
> index aa6bf483dd..b3a1976d60 100644
> --- a/sysdeps/unix/sysv/linux/aarch64/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/aarch64/libc.abilist
> @@ -2753,6 +2753,7 @@ GLIBC_2.41 sched_setattr F
> GLIBC_2.42 __inet_ntop_chk F
> GLIBC_2.42 __inet_pton_chk F
> GLIBC_2.42 pthread_gettid_np F
> +GLIBC_2.42 strtok F
> GLIBC_2.42 uabs F
> GLIBC_2.42 uimaxabs F
> GLIBC_2.42 ulabs F
> diff --git a/sysdeps/unix/sysv/linux/alpha/libc.abilist b/sysdeps/unix/sysv/linux/alpha/libc.abilist
> index d5df9656a8..df5abd8242 100644
> --- a/sysdeps/unix/sysv/linux/alpha/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/alpha/libc.abilist
> @@ -3100,6 +3100,7 @@ GLIBC_2.41 sched_setattr F
> GLIBC_2.42 __inet_ntop_chk F
> GLIBC_2.42 __inet_pton_chk F
> GLIBC_2.42 pthread_gettid_np F
> +GLIBC_2.42 strtok F
> GLIBC_2.42 uabs F
> GLIBC_2.42 uimaxabs F
> GLIBC_2.42 ulabs F
> diff --git a/sysdeps/unix/sysv/linux/arc/libc.abilist b/sysdeps/unix/sysv/linux/arc/libc.abilist
> index c46c08da85..8730bda388 100644
> --- a/sysdeps/unix/sysv/linux/arc/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/arc/libc.abilist
> @@ -2514,6 +2514,7 @@ GLIBC_2.41 sched_setattr F
> GLIBC_2.42 __inet_ntop_chk F
> GLIBC_2.42 __inet_pton_chk F
> GLIBC_2.42 pthread_gettid_np F
> +GLIBC_2.42 strtok F
> GLIBC_2.42 uabs F
> GLIBC_2.42 uimaxabs F
> GLIBC_2.42 ulabs F
> diff --git a/sysdeps/unix/sysv/linux/arm/be/libc.abilist b/sysdeps/unix/sysv/linux/arm/be/libc.abilist
> index 4df150c0f0..5394e8fb12 100644
> --- a/sysdeps/unix/sysv/linux/arm/be/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/arm/be/libc.abilist
> @@ -2806,6 +2806,7 @@ GLIBC_2.41 sched_setattr F
> GLIBC_2.42 __inet_ntop_chk F
> GLIBC_2.42 __inet_pton_chk F
> GLIBC_2.42 pthread_gettid_np F
> +GLIBC_2.42 strtok F
> GLIBC_2.42 uabs F
> GLIBC_2.42 uimaxabs F
> GLIBC_2.42 ulabs F
> diff --git a/sysdeps/unix/sysv/linux/arm/le/libc.abilist b/sysdeps/unix/sysv/linux/arm/le/libc.abilist
> index be294783f6..6c8542f642 100644
> --- a/sysdeps/unix/sysv/linux/arm/le/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/arm/le/libc.abilist
> @@ -2803,6 +2803,7 @@ GLIBC_2.41 sched_setattr F
> GLIBC_2.42 __inet_ntop_chk F
> GLIBC_2.42 __inet_pton_chk F
> GLIBC_2.42 pthread_gettid_np F
> +GLIBC_2.42 strtok F
> GLIBC_2.42 uabs F
> GLIBC_2.42 uimaxabs F
> GLIBC_2.42 ulabs F
> diff --git a/sysdeps/unix/sysv/linux/csky/libc.abilist b/sysdeps/unix/sysv/linux/csky/libc.abilist
> index f123757134..94383d20e0 100644
> --- a/sysdeps/unix/sysv/linux/csky/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/csky/libc.abilist
> @@ -2790,6 +2790,7 @@ GLIBC_2.41 sched_setattr F
> GLIBC_2.42 __inet_ntop_chk F
> GLIBC_2.42 __inet_pton_chk F
> GLIBC_2.42 pthread_gettid_np F
> +GLIBC_2.42 strtok F
> GLIBC_2.42 uabs F
> GLIBC_2.42 uimaxabs F
> GLIBC_2.42 ulabs F
> diff --git a/sysdeps/unix/sysv/linux/hppa/libc.abilist b/sysdeps/unix/sysv/linux/hppa/libc.abilist
> index 2dc85b9533..2d1adf73ff 100644
> --- a/sysdeps/unix/sysv/linux/hppa/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/hppa/libc.abilist
> @@ -2827,6 +2827,7 @@ GLIBC_2.41 sched_setattr F
> GLIBC_2.42 __inet_ntop_chk F
> GLIBC_2.42 __inet_pton_chk F
> GLIBC_2.42 pthread_gettid_np F
> +GLIBC_2.42 strtok F
> GLIBC_2.42 uabs F
> GLIBC_2.42 uimaxabs F
> GLIBC_2.42 ulabs F
> diff --git a/sysdeps/unix/sysv/linux/i386/libc.abilist b/sysdeps/unix/sysv/linux/i386/libc.abilist
> index 1e38217ec6..6bf22725b5 100644
> --- a/sysdeps/unix/sysv/linux/i386/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/i386/libc.abilist
> @@ -3010,6 +3010,7 @@ GLIBC_2.41 sched_setattr F
> GLIBC_2.42 __inet_ntop_chk F
> GLIBC_2.42 __inet_pton_chk F
> GLIBC_2.42 pthread_gettid_np F
> +GLIBC_2.42 strtok F
> GLIBC_2.42 uabs F
> GLIBC_2.42 uimaxabs F
> GLIBC_2.42 ulabs F
> diff --git a/sysdeps/unix/sysv/linux/loongarch/lp64/libc.abilist b/sysdeps/unix/sysv/linux/loongarch/lp64/libc.abilist
> index 927fc21445..32563d7a11 100644
> --- a/sysdeps/unix/sysv/linux/loongarch/lp64/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/loongarch/lp64/libc.abilist
> @@ -2274,6 +2274,7 @@ GLIBC_2.41 sched_setattr F
> GLIBC_2.42 __inet_ntop_chk F
> GLIBC_2.42 __inet_pton_chk F
> GLIBC_2.42 pthread_gettid_np F
> +GLIBC_2.42 strtok F
> GLIBC_2.42 uabs F
> GLIBC_2.42 uimaxabs F
> GLIBC_2.42 ulabs F
> diff --git a/sysdeps/unix/sysv/linux/m68k/coldfire/libc.abilist b/sysdeps/unix/sysv/linux/m68k/coldfire/libc.abilist
> index 74da49d9da..cc5357b86e 100644
> --- a/sysdeps/unix/sysv/linux/m68k/coldfire/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/m68k/coldfire/libc.abilist
> @@ -2786,6 +2786,7 @@ GLIBC_2.41 sched_setattr F
> GLIBC_2.42 __inet_ntop_chk F
> GLIBC_2.42 __inet_pton_chk F
> GLIBC_2.42 pthread_gettid_np F
> +GLIBC_2.42 strtok F
> GLIBC_2.42 uabs F
> GLIBC_2.42 uimaxabs F
> GLIBC_2.42 ulabs F
> diff --git a/sysdeps/unix/sysv/linux/m68k/m680x0/libc.abilist b/sysdeps/unix/sysv/linux/m68k/m680x0/libc.abilist
> index e5d678111f..28759416a3 100644
> --- a/sysdeps/unix/sysv/linux/m68k/m680x0/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/m68k/m680x0/libc.abilist
> @@ -2953,6 +2953,7 @@ GLIBC_2.41 sched_setattr F
> GLIBC_2.42 __inet_ntop_chk F
> GLIBC_2.42 __inet_pton_chk F
> GLIBC_2.42 pthread_gettid_np F
> +GLIBC_2.42 strtok F
> GLIBC_2.42 uabs F
> GLIBC_2.42 uimaxabs F
> GLIBC_2.42 ulabs F
> diff --git a/sysdeps/unix/sysv/linux/microblaze/be/libc.abilist b/sysdeps/unix/sysv/linux/microblaze/be/libc.abilist
> index 4dbd4b6045..53534637ea 100644
> --- a/sysdeps/unix/sysv/linux/microblaze/be/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/microblaze/be/libc.abilist
> @@ -2839,6 +2839,7 @@ GLIBC_2.41 sched_setattr F
> GLIBC_2.42 __inet_ntop_chk F
> GLIBC_2.42 __inet_pton_chk F
> GLIBC_2.42 pthread_gettid_np F
> +GLIBC_2.42 strtok F
> GLIBC_2.42 uabs F
> GLIBC_2.42 uimaxabs F
> GLIBC_2.42 ulabs F
> diff --git a/sysdeps/unix/sysv/linux/microblaze/le/libc.abilist b/sysdeps/unix/sysv/linux/microblaze/le/libc.abilist
> index c5965bb50c..d4055a4fc4 100644
> --- a/sysdeps/unix/sysv/linux/microblaze/le/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/microblaze/le/libc.abilist
> @@ -2836,6 +2836,7 @@ GLIBC_2.41 sched_setattr F
> GLIBC_2.42 __inet_ntop_chk F
> GLIBC_2.42 __inet_pton_chk F
> GLIBC_2.42 pthread_gettid_np F
> +GLIBC_2.42 strtok F
> GLIBC_2.42 uabs F
> GLIBC_2.42 uimaxabs F
> GLIBC_2.42 ulabs F
> diff --git a/sysdeps/unix/sysv/linux/mips/mips32/fpu/libc.abilist b/sysdeps/unix/sysv/linux/mips/mips32/fpu/libc.abilist
> index 10715e0777..0f5b6ef754 100644
> --- a/sysdeps/unix/sysv/linux/mips/mips32/fpu/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/mips/mips32/fpu/libc.abilist
> @@ -2914,6 +2914,7 @@ GLIBC_2.41 sched_setattr F
> GLIBC_2.42 __inet_ntop_chk F
> GLIBC_2.42 __inet_pton_chk F
> GLIBC_2.42 pthread_gettid_np F
> +GLIBC_2.42 strtok F
> GLIBC_2.42 uabs F
> GLIBC_2.42 uimaxabs F
> GLIBC_2.42 ulabs F
> diff --git a/sysdeps/unix/sysv/linux/mips/mips32/nofpu/libc.abilist b/sysdeps/unix/sysv/linux/mips/mips32/nofpu/libc.abilist
> index 3d229b9853..e1e3012db1 100644
> --- a/sysdeps/unix/sysv/linux/mips/mips32/nofpu/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/mips/mips32/nofpu/libc.abilist
> @@ -2912,6 +2912,7 @@ GLIBC_2.41 sched_setattr F
> GLIBC_2.42 __inet_ntop_chk F
> GLIBC_2.42 __inet_pton_chk F
> GLIBC_2.42 pthread_gettid_np F
> +GLIBC_2.42 strtok F
> GLIBC_2.42 uabs F
> GLIBC_2.42 uimaxabs F
> GLIBC_2.42 ulabs F
> diff --git a/sysdeps/unix/sysv/linux/mips/mips64/n32/libc.abilist b/sysdeps/unix/sysv/linux/mips/mips64/n32/libc.abilist
> index e4cb45275b..171c420ca1 100644
> --- a/sysdeps/unix/sysv/linux/mips/mips64/n32/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/mips/mips64/n32/libc.abilist
> @@ -2920,6 +2920,7 @@ GLIBC_2.41 sched_setattr F
> GLIBC_2.42 __inet_ntop_chk F
> GLIBC_2.42 __inet_pton_chk F
> GLIBC_2.42 pthread_gettid_np F
> +GLIBC_2.42 strtok F
> GLIBC_2.42 uabs F
> GLIBC_2.42 uimaxabs F
> GLIBC_2.42 ulabs F
> diff --git a/sysdeps/unix/sysv/linux/mips/mips64/n64/libc.abilist b/sysdeps/unix/sysv/linux/mips/mips64/n64/libc.abilist
> index 8a32d2585d..e70c6edccc 100644
> --- a/sysdeps/unix/sysv/linux/mips/mips64/n64/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/mips/mips64/n64/libc.abilist
> @@ -2822,6 +2822,7 @@ GLIBC_2.41 sched_setattr F
> GLIBC_2.42 __inet_ntop_chk F
> GLIBC_2.42 __inet_pton_chk F
> GLIBC_2.42 pthread_gettid_np F
> +GLIBC_2.42 strtok F
> GLIBC_2.42 uabs F
> GLIBC_2.42 uimaxabs F
> GLIBC_2.42 ulabs F
> diff --git a/sysdeps/unix/sysv/linux/or1k/libc.abilist b/sysdeps/unix/sysv/linux/or1k/libc.abilist
> index 64dac95b2a..fe7c3a35b6 100644
> --- a/sysdeps/unix/sysv/linux/or1k/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/or1k/libc.abilist
> @@ -2264,6 +2264,7 @@ GLIBC_2.41 sched_setattr F
> GLIBC_2.42 __inet_ntop_chk F
> GLIBC_2.42 __inet_pton_chk F
> GLIBC_2.42 pthread_gettid_np F
> +GLIBC_2.42 strtok F
> GLIBC_2.42 uabs F
> GLIBC_2.42 uimaxabs F
> GLIBC_2.42 ulabs F
> diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/libc.abilist b/sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/libc.abilist
> index cc5e93c77c..866f2a294f 100644
> --- a/sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/libc.abilist
> @@ -3143,6 +3143,7 @@ GLIBC_2.41 sched_setattr F
> GLIBC_2.42 __inet_ntop_chk F
> GLIBC_2.42 __inet_pton_chk F
> GLIBC_2.42 pthread_gettid_np F
> +GLIBC_2.42 strtok F
> GLIBC_2.42 uabs F
> GLIBC_2.42 uimaxabs F
> GLIBC_2.42 ulabs F
> diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/libc.abilist b/sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/libc.abilist
> index 9814997083..4087db2d4b 100644
> --- a/sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/libc.abilist
> @@ -3188,6 +3188,7 @@ GLIBC_2.41 sched_setattr F
> GLIBC_2.42 __inet_ntop_chk F
> GLIBC_2.42 __inet_pton_chk F
> GLIBC_2.42 pthread_gettid_np F
> +GLIBC_2.42 strtok F
> GLIBC_2.42 uabs F
> GLIBC_2.42 uimaxabs F
> GLIBC_2.42 ulabs F
> diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc64/be/libc.abilist b/sysdeps/unix/sysv/linux/powerpc/powerpc64/be/libc.abilist
> index 7f46295c11..83cf25708a 100644
> --- a/sysdeps/unix/sysv/linux/powerpc/powerpc64/be/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/powerpc/powerpc64/be/libc.abilist
> @@ -2897,6 +2897,7 @@ GLIBC_2.41 sched_setattr F
> GLIBC_2.42 __inet_ntop_chk F
> GLIBC_2.42 __inet_pton_chk F
> GLIBC_2.42 pthread_gettid_np F
> +GLIBC_2.42 strtok F
> GLIBC_2.42 uabs F
> GLIBC_2.42 uimaxabs F
> GLIBC_2.42 ulabs F
> diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc64/le/libc.abilist b/sysdeps/unix/sysv/linux/powerpc/powerpc64/le/libc.abilist
> index f24f81bb5f..e639ba0af0 100644
> --- a/sysdeps/unix/sysv/linux/powerpc/powerpc64/le/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/powerpc/powerpc64/le/libc.abilist
> @@ -2973,6 +2973,7 @@ GLIBC_2.41 sched_setattr F
> GLIBC_2.42 __inet_ntop_chk F
> GLIBC_2.42 __inet_pton_chk F
> GLIBC_2.42 pthread_gettid_np F
> +GLIBC_2.42 strtok F
> GLIBC_2.42 uabs F
> GLIBC_2.42 uimaxabs F
> GLIBC_2.42 ulabs F
> diff --git a/sysdeps/unix/sysv/linux/riscv/rv32/libc.abilist b/sysdeps/unix/sysv/linux/riscv/rv32/libc.abilist
> index 9330c7ab76..7e5961d0aa 100644
> --- a/sysdeps/unix/sysv/linux/riscv/rv32/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/riscv/rv32/libc.abilist
> @@ -2517,6 +2517,7 @@ GLIBC_2.41 sched_setattr F
> GLIBC_2.42 __inet_ntop_chk F
> GLIBC_2.42 __inet_pton_chk F
> GLIBC_2.42 pthread_gettid_np F
> +GLIBC_2.42 strtok F
> GLIBC_2.42 uabs F
> GLIBC_2.42 uimaxabs F
> GLIBC_2.42 ulabs F
> diff --git a/sysdeps/unix/sysv/linux/riscv/rv64/libc.abilist b/sysdeps/unix/sysv/linux/riscv/rv64/libc.abilist
> index ea4555d39e..2169d1d69d 100644
> --- a/sysdeps/unix/sysv/linux/riscv/rv64/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/riscv/rv64/libc.abilist
> @@ -2717,6 +2717,7 @@ GLIBC_2.41 sched_setattr F
> GLIBC_2.42 __inet_ntop_chk F
> GLIBC_2.42 __inet_pton_chk F
> GLIBC_2.42 pthread_gettid_np F
> +GLIBC_2.42 strtok F
> GLIBC_2.42 uabs F
> GLIBC_2.42 uimaxabs F
> GLIBC_2.42 ulabs F
> diff --git a/sysdeps/unix/sysv/linux/s390/s390-32/libc.abilist b/sysdeps/unix/sysv/linux/s390/s390-32/libc.abilist
> index 3e625fa4e9..82bdba212b 100644
> --- a/sysdeps/unix/sysv/linux/s390/s390-32/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/s390/s390-32/libc.abilist
> @@ -3141,6 +3141,7 @@ GLIBC_2.41 sched_setattr F
> GLIBC_2.42 __inet_ntop_chk F
> GLIBC_2.42 __inet_pton_chk F
> GLIBC_2.42 pthread_gettid_np F
> +GLIBC_2.42 strtok F
> GLIBC_2.42 uabs F
> GLIBC_2.42 uimaxabs F
> GLIBC_2.42 ulabs F
> diff --git a/sysdeps/unix/sysv/linux/s390/s390-64/libc.abilist b/sysdeps/unix/sysv/linux/s390/s390-64/libc.abilist
> index 46b4a04f65..2431bc3296 100644
> --- a/sysdeps/unix/sysv/linux/s390/s390-64/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/s390/s390-64/libc.abilist
> @@ -2934,6 +2934,7 @@ GLIBC_2.41 sched_setattr F
> GLIBC_2.42 __inet_ntop_chk F
> GLIBC_2.42 __inet_pton_chk F
> GLIBC_2.42 pthread_gettid_np F
> +GLIBC_2.42 strtok F
> GLIBC_2.42 uabs F
> GLIBC_2.42 uimaxabs F
> GLIBC_2.42 ulabs F
> diff --git a/sysdeps/unix/sysv/linux/sh/be/libc.abilist b/sysdeps/unix/sysv/linux/sh/be/libc.abilist
> index 36a94c9210..6a2512f50b 100644
> --- a/sysdeps/unix/sysv/linux/sh/be/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/sh/be/libc.abilist
> @@ -2833,6 +2833,7 @@ GLIBC_2.41 sched_setattr F
> GLIBC_2.42 __inet_ntop_chk F
> GLIBC_2.42 __inet_pton_chk F
> GLIBC_2.42 pthread_gettid_np F
> +GLIBC_2.42 strtok F
> GLIBC_2.42 uabs F
> GLIBC_2.42 uimaxabs F
> GLIBC_2.42 ulabs F
> diff --git a/sysdeps/unix/sysv/linux/sh/le/libc.abilist b/sysdeps/unix/sysv/linux/sh/le/libc.abilist
> index f79aba6aab..f21fc8c5b9 100644
> --- a/sysdeps/unix/sysv/linux/sh/le/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/sh/le/libc.abilist
> @@ -2830,6 +2830,7 @@ GLIBC_2.41 sched_setattr F
> GLIBC_2.42 __inet_ntop_chk F
> GLIBC_2.42 __inet_pton_chk F
> GLIBC_2.42 pthread_gettid_np F
> +GLIBC_2.42 strtok F
> GLIBC_2.42 uabs F
> GLIBC_2.42 uimaxabs F
> GLIBC_2.42 ulabs F
> diff --git a/sysdeps/unix/sysv/linux/sparc/sparc32/libc.abilist b/sysdeps/unix/sysv/linux/sparc/sparc32/libc.abilist
> index 4a6acc08e0..1967adf471 100644
> --- a/sysdeps/unix/sysv/linux/sparc/sparc32/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/sparc/sparc32/libc.abilist
> @@ -3162,6 +3162,7 @@ GLIBC_2.41 sched_setattr F
> GLIBC_2.42 __inet_ntop_chk F
> GLIBC_2.42 __inet_pton_chk F
> GLIBC_2.42 pthread_gettid_np F
> +GLIBC_2.42 strtok F
> GLIBC_2.42 uabs F
> GLIBC_2.42 uimaxabs F
> GLIBC_2.42 ulabs F
> diff --git a/sysdeps/unix/sysv/linux/sparc/sparc64/libc.abilist b/sysdeps/unix/sysv/linux/sparc/sparc64/libc.abilist
> index 931109dab1..d45ada07bf 100644
> --- a/sysdeps/unix/sysv/linux/sparc/sparc64/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/sparc/sparc64/libc.abilist
> @@ -2798,6 +2798,7 @@ GLIBC_2.41 sched_setattr F
> GLIBC_2.42 __inet_ntop_chk F
> GLIBC_2.42 __inet_pton_chk F
> GLIBC_2.42 pthread_gettid_np F
> +GLIBC_2.42 strtok F
> GLIBC_2.42 uabs F
> GLIBC_2.42 uimaxabs F
> GLIBC_2.42 ulabs F
> diff --git a/sysdeps/unix/sysv/linux/x86_64/64/libc.abilist b/sysdeps/unix/sysv/linux/x86_64/64/libc.abilist
> index 7ab9073e3a..4f175b3c8a 100644
> --- a/sysdeps/unix/sysv/linux/x86_64/64/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/x86_64/64/libc.abilist
> @@ -2749,6 +2749,7 @@ GLIBC_2.41 sched_setattr F
> GLIBC_2.42 __inet_ntop_chk F
> GLIBC_2.42 __inet_pton_chk F
> GLIBC_2.42 pthread_gettid_np F
> +GLIBC_2.42 strtok F
> GLIBC_2.42 uabs F
> GLIBC_2.42 uimaxabs F
> GLIBC_2.42 ulabs F
> diff --git a/sysdeps/unix/sysv/linux/x86_64/x32/libc.abilist b/sysdeps/unix/sysv/linux/x86_64/x32/libc.abilist
> index e11876f6ab..b9971a7dfb 100644
> --- a/sysdeps/unix/sysv/linux/x86_64/x32/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/x86_64/x32/libc.abilist
> @@ -2768,6 +2768,7 @@ GLIBC_2.41 sched_setattr F
> GLIBC_2.42 __inet_ntop_chk F
> GLIBC_2.42 __inet_pton_chk F
> GLIBC_2.42 pthread_gettid_np F
> +GLIBC_2.42 strtok F
> GLIBC_2.42 uabs F
> GLIBC_2.42 uimaxabs F
> GLIBC_2.42 ulabs F
>
> base-commit: d8f7a79335b0d861c12c42aec94c04cd5bb181e2
>
More information about the Libc-alpha
mailing list