[PATCH v3] string: New thread-safe strtok version

Florian Weimer fweimer@redhat.com
Tue May 20 18:51:54 GMT 2025


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.

---
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