]> git.ipfire.org Git - thirdparty/glibc.git/commitdiff
String: Add support for __memcmpeq() ABI on all targets
authorNoah Goldstein <goldstein.w.n@gmail.com>
Thu, 21 Oct 2021 20:54:57 +0000 (15:54 -0500)
committerNoah Goldstein <goldstein.w.n@gmail.com>
Tue, 26 Oct 2021 21:51:29 +0000 (16:51 -0500)
No bug.

This commit adds support for __memcmpeq() as a new ABI for all
targets. In this commit __memcmpeq() is implemented only as an alias
to the corresponding targets memcmp() implementation. __memcmpeq() is
added as a new symbol starting with GLIBC_2.35 and defined in string.h
with comments explaining its behavior. Basic tests that it is callable
and works where added in string/tester.c

As discussed in the proposal "Add new ABI '__memcmpeq()' to libc"
__memcmpeq() is essentially a reserved namespace for bcmp(). The means
is shares the same specifications as memcmp() except the return value
for non-equal byte sequences is any non-zero value. This is less
strict than memcmp()'s return value specification and can be better
optimized when a boolean return is all that is needed.

__memcmpeq() is meant to only be called by compilers if they can prove
that the return value of a memcmp() call is only used for its boolean
value.

All tests in string/tester.c passed. As well build succeeds on
x86_64-linux-gnu target.

64 files changed:
string/Versions
string/memcmp.c
string/string.h
string/tester.c
sysdeps/aarch64/memcmp.S
sysdeps/csky/abiv2/memcmp.S
sysdeps/i386/i686/memcmp.S
sysdeps/i386/i686/multiarch/memcmp-ia32.S
sysdeps/i386/i686/multiarch/memcmp.c
sysdeps/i386/memcmp.S
sysdeps/ia64/memcmp.S
sysdeps/mach/hurd/i386/libc.abilist
sysdeps/powerpc/powerpc32/405/memcmp.S
sysdeps/powerpc/powerpc32/power4/memcmp.S
sysdeps/powerpc/powerpc32/power4/multiarch/memcmp-power7.S
sysdeps/powerpc/powerpc32/power4/multiarch/memcmp-ppc32.S
sysdeps/powerpc/powerpc32/power7/memcmp.S
sysdeps/powerpc/powerpc64/le/power10/memcmp.S
sysdeps/powerpc/powerpc64/multiarch/memcmp-power10.S
sysdeps/powerpc/powerpc64/multiarch/memcmp-power4.S
sysdeps/powerpc/powerpc64/multiarch/memcmp-power7.S
sysdeps/powerpc/powerpc64/multiarch/memcmp-power8.S
sysdeps/powerpc/powerpc64/multiarch/memcmp-ppc64.c
sysdeps/powerpc/powerpc64/power4/memcmp.S
sysdeps/powerpc/powerpc64/power7/memcmp.S
sysdeps/powerpc/powerpc64/power8/memcmp.S
sysdeps/s390/memcmp-z900.S
sysdeps/s390/memcmp.c
sysdeps/sparc/sparc64/memcmp.S
sysdeps/unix/sysv/linux/aarch64/libc.abilist
sysdeps/unix/sysv/linux/alpha/libc.abilist
sysdeps/unix/sysv/linux/arc/libc.abilist
sysdeps/unix/sysv/linux/arm/be/libc.abilist
sysdeps/unix/sysv/linux/arm/le/libc.abilist
sysdeps/unix/sysv/linux/csky/libc.abilist
sysdeps/unix/sysv/linux/hppa/libc.abilist
sysdeps/unix/sysv/linux/i386/libc.abilist
sysdeps/unix/sysv/linux/ia64/libc.abilist
sysdeps/unix/sysv/linux/m68k/coldfire/libc.abilist
sysdeps/unix/sysv/linux/m68k/m680x0/libc.abilist
sysdeps/unix/sysv/linux/microblaze/be/libc.abilist
sysdeps/unix/sysv/linux/microblaze/le/libc.abilist
sysdeps/unix/sysv/linux/mips/mips32/fpu/libc.abilist
sysdeps/unix/sysv/linux/mips/mips32/nofpu/libc.abilist
sysdeps/unix/sysv/linux/mips/mips64/n32/libc.abilist
sysdeps/unix/sysv/linux/mips/mips64/n64/libc.abilist
sysdeps/unix/sysv/linux/nios2/libc.abilist
sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/libc.abilist
sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/libc.abilist
sysdeps/unix/sysv/linux/powerpc/powerpc64/be/libc.abilist
sysdeps/unix/sysv/linux/powerpc/powerpc64/le/libc.abilist
sysdeps/unix/sysv/linux/riscv/rv32/libc.abilist
sysdeps/unix/sysv/linux/riscv/rv64/libc.abilist
sysdeps/unix/sysv/linux/s390/s390-32/libc.abilist
sysdeps/unix/sysv/linux/s390/s390-64/libc.abilist
sysdeps/unix/sysv/linux/sh/be/libc.abilist
sysdeps/unix/sysv/linux/sh/le/libc.abilist
sysdeps/unix/sysv/linux/sparc/sparc32/libc.abilist
sysdeps/unix/sysv/linux/sparc/sparc64/libc.abilist
sysdeps/unix/sysv/linux/x86_64/64/libc.abilist
sysdeps/unix/sysv/linux/x86_64/x32/libc.abilist
sysdeps/x86_64/memcmp.S
sysdeps/x86_64/multiarch/memcmp-sse2.S
sysdeps/x86_64/multiarch/memcmp.c

index 298ecd401aa49fd5ec580d537aeaaf689b69c5f8..864c4cf7a4bda473aebc0ea5cb577e2892b9a000 100644 (file)
@@ -89,4 +89,7 @@ libc {
     sigdescr_np; sigabbrev_np;
     strerrordesc_np; strerrorname_np;
   }
+  GLIBC_2.35 {
+    __memcmpeq;
+  }
 }
index 9b46d7a905c8b7886f046b7660f63df10dc4573c..eac411253050c0e7a890a2f1a8fa57cb0481349f 100644 (file)
@@ -359,3 +359,6 @@ libc_hidden_builtin_def(memcmp)
 # undef bcmp
 weak_alias (memcmp, bcmp)
 #endif
+
+#undef __memcmpeq
+strong_alias (memcmp, __memcmpeq)
index b1b083edce6d27543cfb87de41d8239ccb929da7..e70feeaeeaea49c6deb937ef0870e25516beae3c 100644 (file)
@@ -64,6 +64,22 @@ extern void *memset (void *__s, int __c, size_t __n) __THROW __nonnull ((1));
 extern int memcmp (const void *__s1, const void *__s2, size_t __n)
      __THROW __attribute_pure__ __nonnull ((1, 2));
 
+/* Compare N bytes of S1 and S2.  Return zero if S1 and S2 are equal.
+   Return some non-zero value otherwise.
+
+   Essentially __memcmpeq has the exact same semantics as memcmp
+   except the return value is less constrained.  memcmp is always a
+   correct implementation of __memcmpeq.  As well !!memcmp, -memcmp,
+   or bcmp are correct implementations.
+
+   __memcmpeq is meant to be used by compilers when memcmp return is
+   only used for its bolean value.
+
+   __memcmpeq is declared only for use by compilers.  Programs should
+   continue to use memcmp.  */
+extern int __memcmpeq (const void *__s1, const void *__s2, size_t __n)
+     __THROW __attribute_pure__ __nonnull ((1, 2));
+
 /* Search N bytes of S for C.  */
 #ifdef __CORRECT_ISO_CPP_STRING_H_PROTO
 extern "C++"
index 778160ae6ecd648edd09b588a5959307260e385a..605b3f00f97ae85428103f2f1e75bc186e8cdf4b 100644 (file)
@@ -1449,6 +1449,19 @@ test_bcmp (void)
   check(bcmp("abc", "def", 0) == 0, 8);        /* Zero count. */
 }
 
+static void
+test_memcmpeq (void)
+{
+  it = "__memcmpeq";
+  check (__memcmpeq ("a", "a", 1) == 0, 1); /* Identity.  */
+  check (__memcmpeq ("abc", "abc", 3) == 0, 2); /* Multicharacter.  */
+  check (__memcmpeq ("abcd", "abce", 4) != 0, 3); /* Honestly unequal.  */
+  check (__memcmpeq ("abce", "abcd", 4) != 0, 4);
+  check (__memcmpeq ("alph", "beta", 4) != 0, 5);
+  check (__memcmpeq ("abce", "abcd", 3) == 0, 6); /* Count limited.  */
+  check (__memcmpeq ("abc", "def", 0) == 0, 8); /* Zero count.  */
+}
+
 static void
 test_strerror (void)
 {
@@ -1611,6 +1624,9 @@ main (void)
   /* bcmp - somewhat like memcmp.  */
   test_bcmp ();
 
+  /* __memcmpeq - somewhat like memcmp.  */
+  test_memcmpeq ();
+
   /* strndup.  */
   test_strndup ();
 
index c1937f6f5c103a6f74383d7d40aeca1b5ad6ff59..37f37b91914c518bedcd5b740a0b734f43c28bd1 100644 (file)
@@ -177,4 +177,6 @@ L(ret_0):
 END (memcmp)
 #undef bcmp
 weak_alias (memcmp, bcmp)
+#undef __memcmpeq
+strong_alias (memcmp, __memcmpeq)
 libc_hidden_builtin_def (memcmp)
index 1560387618799d0e52f613dde92bca043ae1ab8b..2a4ae577b024277dde4d347c3ada97d459cda237 100644 (file)
@@ -138,5 +138,6 @@ ENTRY (memcmp)
        br      .L_s1_aligned
 END (memcmp)
 weak_alias (memcmp, bcmp)
+strong_alias (memcmp, __memcmpeq)
 libc_hidden_def (memcmp)
 .weak memcmp
index b26b124fada2048f2a09e98c121a4b1ba68b9382..90266d904b52368ab8c07331d6129adc3cf3f8a9 100644 (file)
@@ -405,4 +405,6 @@ L(table_32bytes) :
 
 #undef bcmp
 weak_alias (memcmp, bcmp)
+#undef __memcmpeq
+strong_alias (memcmp, __memcmpeq)
 libc_hidden_builtin_def (memcmp)
index 5f6658b89a0d1d775be5c8e1ccc1e3933993f69e..a5b5c3d3491f2e5af224a91105962ed5d5dbdf76 100644 (file)
@@ -30,6 +30,9 @@
 
 # undef weak_alias
 # define weak_alias(original, alias)
+
+# undef strong_alias
+# define strong_alias(original, alias)
 #endif
 
 #include <sysdeps/i386/i686/memcmp.S>
index 6e058a885775135ca7b8ee8a9064f078b6b3c855..3b2815edbc4d9d54e9686f681dff4739640639c5 100644 (file)
@@ -29,4 +29,5 @@
 libc_ifunc_redirected (__redirect_memcmp, memcmp, IFUNC_SELECTOR ());
 
 weak_alias (memcmp, bcmp)
+strong_alias (memcmp, __memcmpeq)
 #endif
index 1f212b0f6de8cde97920dfff80f74e38402b7ca3..02473c2c0c827ba2f671b0139bf2e96c8cd34152 100644 (file)
@@ -70,4 +70,6 @@ END (memcmp)
 
 #undef bcmp
 weak_alias (memcmp, bcmp)
+#undef __memcmpeq
+strong_alias (memcmp, __memcmpeq)
 libc_hidden_builtin_def (memcmp)
index 97539c23fde0559177b04444a2ca747d797f825d..7722908751688d30539599dfb156856c12a340ff 100644 (file)
@@ -160,4 +160,5 @@ ENTRY(memcmp)
 END(memcmp)
 
 weak_alias (memcmp, bcmp)
+strong_alias (memcmp, __memcmpeq)
 libc_hidden_builtin_def (memcmp)
index c5da10a0cd0140e4e218f60451ad49f897cb0a6d..e849d6fa35456b4b0405ee6b793792f1298f4821 100644 (file)
@@ -2285,6 +2285,7 @@ GLIBC_2.34 res_send F
 GLIBC_2.34 shm_open F
 GLIBC_2.34 shm_unlink F
 GLIBC_2.34 timespec_getres F
+GLIBC_2.35 __memcmpeq F
 GLIBC_2.4 __confstr_chk F
 GLIBC_2.4 __fgets_chk F
 GLIBC_2.4 __fgets_unlocked_chk F
index 6a6a54d90f93e751befaa69be7392996bc7599a5..c2836040a7783fb2ced0a0227a715ad2462f8f51 100644 (file)
@@ -126,3 +126,4 @@ L(st2):
 END (memcmp)
 libc_hidden_builtin_def (memcmp)
 weak_alias (memcmp,bcmp)
+strong_alias (memcmp, __memcmpeq)
index 814d2f211d95992e5b24e3c0c3b204718452941d..f58e34aba5c2d3dc27a1b09cf66859e3c948601b 100644 (file)
@@ -1373,3 +1373,4 @@ END (memcmp)
 
 libc_hidden_builtin_def (memcmp)
 weak_alias (memcmp, bcmp)
+strong_alias (memcmp, __memcmpeq)
index 8a929b2b443a8aff3d07599b29af84b14eeec905..b17d0e43b77e532d34f3cefcc40716e03adc1e79 100644 (file)
@@ -38,4 +38,7 @@
 #undef weak_alias
 #define weak_alias(a, b)
 
+#undef strong_alias
+#define strong_alias(a, b)
+
 #include <sysdeps/powerpc/powerpc32/power7/memcmp.S>
index 317523b7435b85535162f9f2ce2e281830b3b738..893b6cac9cd7e0cc1db210fa583e022eb1f47f7c 100644 (file)
 # undef weak_alias
 # define weak_alias(a, b)                                      \
   .weak b ; b = __memcmp_ppc
+
+# undef strong_alias
+# define strong_alias(a, b)                                    \
+  .globl b ; b = __memcmp_ppc
 #endif
 
 #include <sysdeps/powerpc/powerpc32/power4/memcmp.S>
index 8a19953e2d0e8dbca368d19e1f286c41d48d4f43..f8deb4e32cfcce9fa3345e2a080d4c697a98e817 100644 (file)
@@ -1373,3 +1373,4 @@ END (memcmp)
 
 libc_hidden_builtin_def (memcmp)
 weak_alias (memcmp, bcmp)
+strong_alias (memcmp, __memcmpeq)
index 52f244e7e77cbdf9a543079f9a0f18a22abbbf5b..f81c73a29c7f65e5f4492354941479803f41837b 100644 (file)
@@ -177,3 +177,4 @@ L(tail8):
 END (MEMCMP)
 libc_hidden_builtin_def (memcmp)
 weak_alias (memcmp, bcmp)
+strong_alias (memcmp, __memcmpeq)
index 73a0debd4a811d8ebc72738740aa9c4f6e007f4d..22399f143d089b131c9cb97e09c6ef3f37f0c21a 100644 (file)
@@ -22,5 +22,7 @@
 #define libc_hidden_builtin_def(name)
 #undef weak_alias
 #define weak_alias(name,alias)
+#undef strong_alias
+#define strong_alias(name,alias)
 
 #include <sysdeps/powerpc/powerpc64/le/power10/memcmp.S>
index d2b6c2f934e38001a4eb948d0e10cc89abf71e1c..fe68912a3b34791651519f4cc09e794dfcef393d 100644 (file)
@@ -22,5 +22,7 @@
 #define libc_hidden_builtin_def(name)
 #undef weak_alias
 #define weak_alias(name,alias)
+#undef strong_alias
+#define strong_alias(name,alias)
 
 #include <sysdeps/powerpc/powerpc64/power4/memcmp.S>
index 8671e930f093cbdb84fefc1464f8de1278be77ac..5739471a7d1a4f65c59ec12d827fb55518aa142e 100644 (file)
@@ -22,5 +22,7 @@
 #define libc_hidden_builtin_def(name)
 #undef weak_alias
 #define weak_alias(name,alias)
+#undef strong_alias
+#define strong_alias(name,alias)
 
 #include <sysdeps/powerpc/powerpc64/power7/memcmp.S>
index eb2273d468478add05f26876d147cf6f6d5805c2..e6a93e88c616961eff79fc1fb1cce8a1ebc91fed 100644 (file)
@@ -22,5 +22,7 @@
 #define libc_hidden_builtin_def(name)
 #undef weak_alias
 #define weak_alias(name,alias)
+#undef strong_alias
+#define strong_alias(name,alias)
 
 #include <sysdeps/powerpc/powerpc64/power8/memcmp.S>
index 1f9f219971fdbbd90b38c5b5001e231fc6f27054..2bc5fa50d701c0c3345dfabe2e615c3efa901868 100644 (file)
 #define weak_alias(name, aliasname) \
   extern __typeof (__memcmp_ppc) aliasname \
     __attribute__ ((weak, alias ("__memcmp_ppc")));
+#undef strong_alias
+#define strong_alias(name, aliasname) \
+  extern __typeof (__memcmp_ppc) aliasname \
+    __attribute__ ((alias ("__memcmp_ppc")));
 #if IS_IN (libc) && defined(SHARED)
 # undef libc_hidden_builtin_def
 # define libc_hidden_builtin_def(name) \
index dc1be3a0d8d80d358c33df529674427b8e194962..cc82be115ff2bd8ec26e1f8992f71c6d0b553ca8 100644 (file)
@@ -1374,3 +1374,4 @@ L(duzeroLength):
 END (MEMCMP)
 libc_hidden_builtin_def (memcmp)
 weak_alias (memcmp, bcmp)
+strong_alias (memcmp, __memcmpeq)
index bc034a55bc18f52087f7c54276c112e053f2a54d..3044f7ede95ca9bde75f2f99541071d1c47be1b8 100644 (file)
@@ -1059,3 +1059,4 @@ L(duzeroLength):
 END (MEMCMP)
 libc_hidden_builtin_def (memcmp)
 weak_alias (memcmp, bcmp)
+strong_alias (memcmp, __memcmpeq)
index b676b09a9b33c64383db6de2aab245c921c4b93c..0c6a154502719064fb448ec9dc9acf893578aa3c 100644 (file)
@@ -1442,3 +1442,4 @@ L(duzeroLength):
 END (MEMCMP)
 libc_hidden_builtin_def (memcmp)
 weak_alias (memcmp, bcmp)
+strong_alias (memcmp, __memcmpeq)
index 995d52e47d71362351e99e74af42f43d524edfb6..d625bf90dd7250eeab4a96dff1e470cb4025cd3c 100644 (file)
@@ -164,6 +164,7 @@ END(MEMCMP_Z196)
    Otherwise see sysdeps/s390/memcmp.c.  */
 strong_alias (MEMCMP_DEFAULT, memcmp)
 weak_alias (memcmp, bcmp)
+strong_alias (memcmp, __memcmpeq)
 #endif
 
 #if defined SHARED && IS_IN (libc)
index 0b4e9da71784fda3731b4a055652696bc7eb864e..52c20af77229d92fd7d2d53ffd115ebf258f78b4 100644 (file)
@@ -46,4 +46,5 @@ s390_libc_ifunc_expr (__redirect_memcmp, memcmp,
                      })
                      )
 weak_alias (memcmp, bcmp);
+strong_alias (memcmp, __memcmpeq)
 #endif
index d8d9ff9b24f6db33bc4bfaf19211b3c54b7cb4e8..fefeee5f5d22cb53cec231f20c10e88391967dc1 100644 (file)
@@ -137,4 +137,6 @@ END(memcmp)
 
 #undef bcmp
 weak_alias (memcmp, bcmp)
+#undef __memcmpeq
+strong_alias (memcmp, __memcmpeq)
 libc_hidden_builtin_def (memcmp)
index 21a2e50a884c3d64ba0ab19fae201de92b644dc3..f227ae6ceec97c73d98990eeea53ae38ab6c8c71 100644 (file)
@@ -2612,3 +2612,4 @@ GLIBC_2.34 tss_create F
 GLIBC_2.34 tss_delete F
 GLIBC_2.34 tss_get F
 GLIBC_2.34 tss_set F
+GLIBC_2.35 __memcmpeq F
index a201fd69bacc32811adf625378dafb96b5c0cd0f..0ccc3fc73ecc0e4d2d413e84e2747b2375c6127c 100644 (file)
@@ -2709,6 +2709,7 @@ GLIBC_2.34 tss_create F
 GLIBC_2.34 tss_delete F
 GLIBC_2.34 tss_get F
 GLIBC_2.34 tss_set F
+GLIBC_2.35 __memcmpeq F
 GLIBC_2.4 _IO_fprintf F
 GLIBC_2.4 _IO_printf F
 GLIBC_2.4 _IO_sprintf F
index 261143693778ba9f0a9e1dce0c0abe76aae9ab5f..fd80704787f4ef41145625389f306f46702985b4 100644 (file)
@@ -2373,3 +2373,4 @@ GLIBC_2.34 tss_create F
 GLIBC_2.34 tss_delete F
 GLIBC_2.34 tss_get F
 GLIBC_2.34 tss_set F
+GLIBC_2.35 __memcmpeq F
index a426241965d56df91c1c78a6c8700e2bf381ca96..2ae6c58b8ad6fc013e5e64e960f124288e4a370a 100644 (file)
@@ -491,6 +491,7 @@ GLIBC_2.34 tss_create F
 GLIBC_2.34 tss_delete F
 GLIBC_2.34 tss_get F
 GLIBC_2.34 tss_set F
+GLIBC_2.35 __memcmpeq F
 GLIBC_2.4 _Exit F
 GLIBC_2.4 _IO_2_1_stderr_ D 0xa0
 GLIBC_2.4 _IO_2_1_stdin_ D 0xa0
index 02f80418cc40ac06dd0495cb6d2edc6e6d0c7d74..fcfd1e8594d80aa13e09e658077b86e4484f0220 100644 (file)
@@ -488,6 +488,7 @@ GLIBC_2.34 tss_create F
 GLIBC_2.34 tss_delete F
 GLIBC_2.34 tss_get F
 GLIBC_2.34 tss_set F
+GLIBC_2.35 __memcmpeq F
 GLIBC_2.4 _Exit F
 GLIBC_2.4 _IO_2_1_stderr_ D 0xa0
 GLIBC_2.4 _IO_2_1_stdin_ D 0xa0
index b7676eb372398dafcc85e1e7b7b7d3269f873e5d..ba034b85414a2b55a958322969ff30146b5545e0 100644 (file)
@@ -2647,3 +2647,4 @@ GLIBC_2.34 tss_create F
 GLIBC_2.34 tss_delete F
 GLIBC_2.34 tss_get F
 GLIBC_2.34 tss_set F
+GLIBC_2.35 __memcmpeq F
index f6965c9d9594910ad82e33e857a79410c79e1f90..b7460bec8ace47c23f49501b79b43bb6c2a4465c 100644 (file)
@@ -2596,6 +2596,7 @@ GLIBC_2.34 tss_create F
 GLIBC_2.34 tss_delete F
 GLIBC_2.34 tss_get F
 GLIBC_2.34 tss_set F
+GLIBC_2.35 __memcmpeq F
 GLIBC_2.4 __confstr_chk F
 GLIBC_2.4 __fgets_chk F
 GLIBC_2.4 __fgets_unlocked_chk F
index 2e7603d9ed6728e2d226107cd4d2963ee904d0bc..a4dc341dededdc3b295df8708788b9be5fab16e6 100644 (file)
@@ -2780,6 +2780,7 @@ GLIBC_2.34 tss_create F
 GLIBC_2.34 tss_delete F
 GLIBC_2.34 tss_get F
 GLIBC_2.34 tss_set F
+GLIBC_2.35 __memcmpeq F
 GLIBC_2.4 __confstr_chk F
 GLIBC_2.4 __fgets_chk F
 GLIBC_2.4 __fgets_unlocked_chk F
index dd3a56d3fef14600d07d8109a2203c4f59cd2c53..94b222dbc7ffbb817bcef417723072550570fdae 100644 (file)
@@ -2547,6 +2547,7 @@ GLIBC_2.34 tss_create F
 GLIBC_2.34 tss_delete F
 GLIBC_2.34 tss_get F
 GLIBC_2.34 tss_set F
+GLIBC_2.35 __memcmpeq F
 GLIBC_2.4 __confstr_chk F
 GLIBC_2.4 __fgets_chk F
 GLIBC_2.4 __fgets_unlocked_chk F
index c1e0ea9c102a69d19d92b264388949c859cebc17..12fd3b63103c3e6ee43b90cb2d383d4c61f6e7a9 100644 (file)
@@ -492,6 +492,7 @@ GLIBC_2.34 tss_create F
 GLIBC_2.34 tss_delete F
 GLIBC_2.34 tss_get F
 GLIBC_2.34 tss_set F
+GLIBC_2.35 __memcmpeq F
 GLIBC_2.4 _Exit F
 GLIBC_2.4 _IO_2_1_stderr_ D 0x98
 GLIBC_2.4 _IO_2_1_stdin_ D 0x98
index 93161048ca26b91bfd818565ffce975c7336589a..4d2296007ab1d9226044aec1a14af404c69c28cb 100644 (file)
@@ -2723,6 +2723,7 @@ GLIBC_2.34 tss_create F
 GLIBC_2.34 tss_delete F
 GLIBC_2.34 tss_get F
 GLIBC_2.34 tss_set F
+GLIBC_2.35 __memcmpeq F
 GLIBC_2.4 __confstr_chk F
 GLIBC_2.4 __fgets_chk F
 GLIBC_2.4 __fgets_unlocked_chk F
index 0aaeec8a2707da2ad02b33ce56e036b0a7a37882..a223278a3d4a33d83250be057813a9d9cf86637b 100644 (file)
@@ -2696,3 +2696,4 @@ GLIBC_2.34 tss_create F
 GLIBC_2.34 tss_delete F
 GLIBC_2.34 tss_get F
 GLIBC_2.34 tss_set F
+GLIBC_2.35 __memcmpeq F
index bec5f456c9756e8378b3e1fdf023730c044ef4f5..780a4f5b0bf5518c9942123a3aa94f1eda49f024 100644 (file)
@@ -2693,3 +2693,4 @@ GLIBC_2.34 tss_create F
 GLIBC_2.34 tss_delete F
 GLIBC_2.34 tss_get F
 GLIBC_2.34 tss_set F
+GLIBC_2.35 __memcmpeq F
index 97d2127f7828312aa0045aa5bc298fc9666f3af0..cd65136062a6a87671b52faf9187515562844cb5 100644 (file)
@@ -2688,6 +2688,7 @@ GLIBC_2.34 tss_create F
 GLIBC_2.34 tss_delete F
 GLIBC_2.34 tss_get F
 GLIBC_2.34 tss_set F
+GLIBC_2.35 __memcmpeq F
 GLIBC_2.4 __confstr_chk F
 GLIBC_2.4 __fgets_chk F
 GLIBC_2.4 __fgets_unlocked_chk F
index acb0756c11995d34fce25dcfed83468c37c1ac0a..b5b9902db56a4c79554f2aa74969b4b97c042e4a 100644 (file)
@@ -2686,6 +2686,7 @@ GLIBC_2.34 tss_create F
 GLIBC_2.34 tss_delete F
 GLIBC_2.34 tss_get F
 GLIBC_2.34 tss_set F
+GLIBC_2.35 __memcmpeq F
 GLIBC_2.4 __confstr_chk F
 GLIBC_2.4 __fgets_chk F
 GLIBC_2.4 __fgets_unlocked_chk F
index ebc21dde1eca0d6b00be971b878b5cc2a3dd20e8..57593d5f94a184f120e0137d0b9bb4fe58e1541f 100644 (file)
@@ -2694,6 +2694,7 @@ GLIBC_2.34 tss_create F
 GLIBC_2.34 tss_delete F
 GLIBC_2.34 tss_get F
 GLIBC_2.34 tss_set F
+GLIBC_2.35 __memcmpeq F
 GLIBC_2.4 __confstr_chk F
 GLIBC_2.4 __fgets_chk F
 GLIBC_2.4 __fgets_unlocked_chk F
index c68f7e3c6cc8baa7e932743d2795f9da52017cbe..e944d76bed0bfe06d20e245d77ecf7aca7706d3c 100644 (file)
@@ -2598,6 +2598,7 @@ GLIBC_2.34 tss_create F
 GLIBC_2.34 tss_delete F
 GLIBC_2.34 tss_get F
 GLIBC_2.34 tss_set F
+GLIBC_2.35 __memcmpeq F
 GLIBC_2.4 __confstr_chk F
 GLIBC_2.4 __fgets_chk F
 GLIBC_2.4 __fgets_unlocked_chk F
index e5b6834f147f1edcb802ea7f8c267e11ef770450..8af5a3a90dfe4089ec7dd09be5df3e7e1ba4ab8d 100644 (file)
@@ -2735,3 +2735,4 @@ GLIBC_2.34 tss_create F
 GLIBC_2.34 tss_delete F
 GLIBC_2.34 tss_get F
 GLIBC_2.34 tss_set F
+GLIBC_2.35 __memcmpeq F
index 132707c8ad52832b096f39f8e564e709ca9579e9..3a0213b39f8f7abd9b3530235e408d2f6f7cb312 100644 (file)
@@ -2750,6 +2750,7 @@ GLIBC_2.34 tss_create F
 GLIBC_2.34 tss_delete F
 GLIBC_2.34 tss_get F
 GLIBC_2.34 tss_set F
+GLIBC_2.35 __memcmpeq F
 GLIBC_2.4 _IO_fprintf F
 GLIBC_2.4 _IO_printf F
 GLIBC_2.4 _IO_sprintf F
index 0af2be31a0f4ff915363f8a3b8aa47a81e4a73be..f57df0234b8bdee3da893b69d42c78af1d21afaa 100644 (file)
@@ -2783,6 +2783,7 @@ GLIBC_2.34 tss_create F
 GLIBC_2.34 tss_delete F
 GLIBC_2.34 tss_get F
 GLIBC_2.34 tss_set F
+GLIBC_2.35 __memcmpeq F
 GLIBC_2.4 _IO_fprintf F
 GLIBC_2.4 _IO_printf F
 GLIBC_2.4 _IO_sprintf F
index cf864632d0cc34382a8a0d5fad69eef866b0b3ea..259a0cfc5126ca9e8e1abe2343db2ce1e561ce39 100644 (file)
@@ -2506,6 +2506,7 @@ GLIBC_2.34 tss_create F
 GLIBC_2.34 tss_delete F
 GLIBC_2.34 tss_get F
 GLIBC_2.34 tss_set F
+GLIBC_2.35 __memcmpeq F
 GLIBC_2.4 _IO_fprintf F
 GLIBC_2.4 _IO_printf F
 GLIBC_2.4 _IO_sprintf F
index d566d675d00c881b3c239320978e1594968faedf..126541daf152e1ad3af12908ad31abc908b0798b 100644 (file)
@@ -2808,3 +2808,4 @@ GLIBC_2.34 tss_create F
 GLIBC_2.34 tss_delete F
 GLIBC_2.34 tss_get F
 GLIBC_2.34 tss_set F
+GLIBC_2.35 __memcmpeq F
index c9a7eacb32ebe27766eab5c9f3b60f249e83df55..05df4d13d2c35ad141f3b024dd9ee2d7479d6be9 100644 (file)
@@ -2375,3 +2375,4 @@ GLIBC_2.34 tss_create F
 GLIBC_2.34 tss_delete F
 GLIBC_2.34 tss_get F
 GLIBC_2.34 tss_set F
+GLIBC_2.35 __memcmpeq F
index 8299131cb2ce932efc36bd8b40a2426e986e575a..8e349cbff8cc05073a7e4deb7e7d978adca798a9 100644 (file)
@@ -2575,3 +2575,4 @@ GLIBC_2.34 tss_create F
 GLIBC_2.34 tss_delete F
 GLIBC_2.34 tss_get F
 GLIBC_2.34 tss_set F
+GLIBC_2.35 __memcmpeq F
index c3fe78f77fd11c786c956baa2ff076c2e3cea523..e9de402766af0d8a85b62e8275ebca5b3de7f9d4 100644 (file)
@@ -2748,6 +2748,7 @@ GLIBC_2.34 tss_create F
 GLIBC_2.34 tss_delete F
 GLIBC_2.34 tss_get F
 GLIBC_2.34 tss_set F
+GLIBC_2.35 __memcmpeq F
 GLIBC_2.4 _IO_fprintf F
 GLIBC_2.4 _IO_printf F
 GLIBC_2.4 _IO_sprintf F
index 83e542aa8c2563faa75eeb0f94bc2291157e3bd1..1a010c745d78a07ee293b9a7a8c570a9d32e0ca4 100644 (file)
@@ -2543,6 +2543,7 @@ GLIBC_2.34 tss_create F
 GLIBC_2.34 tss_delete F
 GLIBC_2.34 tss_get F
 GLIBC_2.34 tss_set F
+GLIBC_2.35 __memcmpeq F
 GLIBC_2.4 _IO_fprintf F
 GLIBC_2.4 _IO_printf F
 GLIBC_2.4 _IO_sprintf F
index dc502f683336ad37c5dfeaf3e7dd0fc3ac4e4ed1..22ce530975944ff6d917834aa1c904787c78bbe8 100644 (file)
@@ -2603,6 +2603,7 @@ GLIBC_2.34 tss_create F
 GLIBC_2.34 tss_delete F
 GLIBC_2.34 tss_get F
 GLIBC_2.34 tss_set F
+GLIBC_2.35 __memcmpeq F
 GLIBC_2.4 __confstr_chk F
 GLIBC_2.4 __fgets_chk F
 GLIBC_2.4 __fgets_unlocked_chk F
index cba1abb55621ca74997b370788289227e1836bbb..960df07b83bd2cbfd75265d78b80c5958eea4f7f 100644 (file)
@@ -2600,6 +2600,7 @@ GLIBC_2.34 tss_create F
 GLIBC_2.34 tss_delete F
 GLIBC_2.34 tss_get F
 GLIBC_2.34 tss_set F
+GLIBC_2.35 __memcmpeq F
 GLIBC_2.4 __confstr_chk F
 GLIBC_2.4 __fgets_chk F
 GLIBC_2.4 __fgets_unlocked_chk F
index d4a516fb47518e1250b91ee1269dd728706dfb2a..eedb376f3dfeb8fb532e5013edd992de6d9965aa 100644 (file)
@@ -2743,6 +2743,7 @@ GLIBC_2.34 tss_create F
 GLIBC_2.34 tss_delete F
 GLIBC_2.34 tss_get F
 GLIBC_2.34 tss_set F
+GLIBC_2.35 __memcmpeq F
 GLIBC_2.4 _IO_fprintf F
 GLIBC_2.4 _IO_printf F
 GLIBC_2.4 _IO_sprintf F
index 6268875ba37ac0d4d277d1bceaa5c63b4bc5a15a..86e0c92bef9255ab9a6b1338e4d66c7f5112d7e2 100644 (file)
@@ -2570,6 +2570,7 @@ GLIBC_2.34 tss_create F
 GLIBC_2.34 tss_delete F
 GLIBC_2.34 tss_get F
 GLIBC_2.34 tss_set F
+GLIBC_2.35 __memcmpeq F
 GLIBC_2.4 __confstr_chk F
 GLIBC_2.4 __fgets_chk F
 GLIBC_2.4 __fgets_unlocked_chk F
index 095e914b73705601aa34cd691a431830244a7c32..5e59d90623c2bcbae36733dc28d063cfdc6e07ce 100644 (file)
@@ -2521,6 +2521,7 @@ GLIBC_2.34 tss_create F
 GLIBC_2.34 tss_delete F
 GLIBC_2.34 tss_get F
 GLIBC_2.34 tss_set F
+GLIBC_2.35 __memcmpeq F
 GLIBC_2.4 __confstr_chk F
 GLIBC_2.4 __fgets_chk F
 GLIBC_2.4 __fgets_unlocked_chk F
index dd910f7fe934f2608b19c206a28ced241421467d..94412dc134af283a2024e9a666b2b32ea321bc69 100644 (file)
@@ -2627,3 +2627,4 @@ GLIBC_2.34 tss_create F
 GLIBC_2.34 tss_delete F
 GLIBC_2.34 tss_get F
 GLIBC_2.34 tss_set F
+GLIBC_2.35 __memcmpeq F
index 870e15c5a080162b336b13bac24cf7afbac6874b..1b351ee092b75ff7cf5fba0c028d0d53ffca51f3 100644 (file)
@@ -358,4 +358,6 @@ END(memcmp)
 
 #undef bcmp
 weak_alias (memcmp, bcmp)
+#undef __memcmpeq
+strong_alias (memcmp, __memcmpeq)
 libc_hidden_builtin_def (memcmp)
index b135fa2d4084b6d012fa3dd40469bdaf88855586..af737c5e6c65e9b2289bcaba2be0f4a5eb4c09e6 100644 (file)
@@ -26,6 +26,9 @@
 
 # undef weak_alias
 # define weak_alias(ignored1, ignored2)
+
+# undef strong_alias
+# define strong_alias(ignored1, ignored2)
 #endif
 
 #include <sysdeps/x86_64/memcmp.S>
index fe725f35639793c2be16f10c413153d9f1ecb662..4a3aad2c9c4a58fdf526fcae74b3fda941429561 100644 (file)
@@ -29,6 +29,8 @@
 libc_ifunc_redirected (__redirect_memcmp, memcmp, IFUNC_SELECTOR ());
 # undef bcmp
 weak_alias (memcmp, bcmp)
+# undef __memcmpeq
+strong_alias (memcmp, __memcmpeq)
 
 # ifdef SHARED
 __hidden_ver1 (memcmp, __GI_memcmp, __redirect_memcmp)