[17/20] libcpu-rt-c/x86-64: Add strncat

Message ID 20180612221939.19545-18-hjl.tools@gmail.com
State New, archived
Headers

Commit Message

H.J. Lu June 12, 2018, 10:19 p.m. UTC
  * sysdeps/x86_64/Makefile (cpu-rt-c-routines): Add strncat.
	* sysdeps/x86_64/multiarch/Makefile
	(libcpu-rt-c-sysdep_routines): Add strncat-sse2-unaligned,
	strncat-ssse3, strnlen-sse2 and strnlen-avx2,
	* sysdeps/x86_64/strncat.c: New file.
	* sysdeps/x86_64/multiarch/strncat-c.c: Support libcpu-rt-c.
	* sysdeps/x86_64/multiarch/strncat.c: Likewise.
---
 sysdeps/x86_64/Makefile              | 3 ++-
 sysdeps/x86_64/multiarch/Makefile    | 3 ++-
 sysdeps/x86_64/multiarch/strncat-c.c | 2 +-
 sysdeps/x86_64/multiarch/strncat.c   | 6 ++++--
 sysdeps/x86_64/strncat.c             | 9 +++++++++
 5 files changed, 18 insertions(+), 5 deletions(-)
 create mode 100644 sysdeps/x86_64/strncat.c
  

Patch

diff --git a/sysdeps/x86_64/Makefile b/sysdeps/x86_64/Makefile
index 1a5720bbac..3c9ea605c6 100644
--- a/sysdeps/x86_64/Makefile
+++ b/sysdeps/x86_64/Makefile
@@ -148,7 +148,8 @@  endif
 
 ifeq ($(subdir),cpu-rt-c)
 cpu-rt-c-routines += memchr memcmp memcpy memmove mempcpy memrchr \
-		     memset strcat strchr strcmp strcpy strlen strnlen \
+		     memset strcat strchr strcmp strcpy strlen strncat \
+		     strnlen \
 		     wmemset
 
 # For the CPU run-time tests.
diff --git a/sysdeps/x86_64/multiarch/Makefile b/sysdeps/x86_64/multiarch/Makefile
index 1c902eec4e..c9ae280f43 100644
--- a/sysdeps/x86_64/multiarch/Makefile
+++ b/sysdeps/x86_64/multiarch/Makefile
@@ -88,6 +88,7 @@  libcpu-rt-c-sysdep_routines += memchr-sse2 memchr-avx2 \
 			       strcmp-sse2-unaligned strcmp-ssse3 \
 			       strcmp-sse4_2 strcmp-avx2 strcpy-sse2 \
 			       strcpy-sse2-unaligned strcpy-ssse3 \
-			       strlen-sse2 strlen-avx2 \
+			       strlen-sse2 strlen-avx2 strncat-c \
+			       strncat-sse2-unaligned strncat-ssse3 \
 			       strnlen-sse2 strnlen-avx2
 endif
diff --git a/sysdeps/x86_64/multiarch/strncat-c.c b/sysdeps/x86_64/multiarch/strncat-c.c
index 93a7fab7ea..eb08e80d2e 100644
--- a/sysdeps/x86_64/multiarch/strncat-c.c
+++ b/sysdeps/x86_64/multiarch/strncat-c.c
@@ -1,2 +1,2 @@ 
 #define STRNCAT __strncat_sse2
-#include <string/strncat.c>
+#include <sysdeps/x86_64/strncat.c>
diff --git a/sysdeps/x86_64/multiarch/strncat.c b/sysdeps/x86_64/multiarch/strncat.c
index 841c165565..8bfc54a472 100644
--- a/sysdeps/x86_64/multiarch/strncat.c
+++ b/sysdeps/x86_64/multiarch/strncat.c
@@ -18,7 +18,7 @@ 
    <http://www.gnu.org/licenses/>.  */
 
 /* Define multiple versions only for the definition in libc.  */
-#if IS_IN (libc)
+#if IS_IN (libc) || IS_IN (libcpu_rt_c)
 # define strncat __redirect_strncat
 # include <string.h>
 # undef strncat
@@ -27,9 +27,11 @@ 
 # include "ifunc-unaligned-ssse3.h"
 
 libc_ifunc_redirected (__redirect_strncat, strncat, IFUNC_SELECTOR ());
+# if !IS_IN (libcpu_rt_c)
 strong_alias (strncat, __strncat);
-# ifdef SHARED
+#  ifdef SHARED
 __hidden_ver1 (strncat, __GI___strncat, __redirect_strncat)
   __attribute__((visibility ("hidden")));
+#  endif
 # endif
 #endif
diff --git a/sysdeps/x86_64/strncat.c b/sysdeps/x86_64/strncat.c
new file mode 100644
index 0000000000..ad6885514a
--- /dev/null
+++ b/sysdeps/x86_64/strncat.c
@@ -0,0 +1,9 @@ 
+#if IS_IN (libcpu_rt_c)
+# include <string.h>
+extern __typeof (strnlen) __strnlen attribute_hidden;
+# ifndef STRNCAT
+#  define STRNCAT strncat
+# endif
+#endif
+
+#include <string/strncat.c>