Page MenuHomeFreeBSD

D32774.diff
No OneTemporary

D32774.diff

diff --git a/lib/libc/aarch64/string/Makefile.inc b/lib/libc/aarch64/string/Makefile.inc
--- a/lib/libc/aarch64/string/Makefile.inc
+++ b/lib/libc/aarch64/string/Makefile.inc
@@ -1,20 +1,41 @@
# $FreeBSD$
#
-# String handling from the Cortex Strings library
-# https://git.linaro.org/toolchain/cortex-strings.git
+# String handling from the Arm Optimized Routines
+# https://github.com/ARM-software/optimized-routines
#
-.PATH: ${SRCTOP}/contrib/cortex-strings/src/aarch64
+AARCH64_STRING_FUNCS= \
+ memchr \
+ memcmp \
+ memcpy \
+ memmove \
+ memrchr \
+ memset \
+ stpcpy \
+ strchr \
+ strchrnul \
+ strcmp \
+ strcpy \
+ strlen \
+ strncmp \
+ strnlen \
+ strrchr
-MDSRCS+= \
- memchr.S \
- memcmp.S \
- memcpy.S \
- memmove.S \
- memset.S \
- strchr.S \
- strcmp.S \
- strcpy.S \
- strlen.S \
- strncmp.S \
- strnlen.S
+#
+# Add the above functions. Generate an asm file that includes the needed
+# Arm Optimized Routines file defining the function name to the libc name.
+# Some file need multiple macros defined or a weak symbol added we can
+# override the generated file in these cases.
+#
+.for FUNC in ${AARCH64_STRING_FUNCS}
+.if !exists(${FUNC}.S)
+${FUNC}.S:
+ printf '/* %sgenerated by libc/aarch64/string/Makefile.inc */\n' @ > ${.TARGET}
+ printf '#define __%s_aarch64 %s\n' ${FUNC} ${FUNC} >> ${.TARGET}
+ printf '#include "aarch64/%s.S"\n' ${FUNC} >> ${.TARGET}
+CLEANFILES+= ${FUNC}.S
+.endif
+
+MDSRCS+= ${FUNC}.S
+CFLAGS.${FUNC}.S+=-I${SRCTOP}/contrib/arm-optimized-routines/string
+.endfor
diff --git a/lib/libc/aarch64/string/memcpy.S b/lib/libc/aarch64/string/memcpy.S
new file mode 100644
--- /dev/null
+++ b/lib/libc/aarch64/string/memcpy.S
@@ -0,0 +1,6 @@
+#define __memcpy_aarch64 memcpy
+#define __memmove_aarch64 memmove
+#include "aarch64/memcpy.S"
+
+.weak index
+.equ index, strchr
diff --git a/lib/libc/aarch64/string/memmove.S b/lib/libc/aarch64/string/memmove.S
new file mode 100644
--- /dev/null
+++ b/lib/libc/aarch64/string/memmove.S
@@ -0,0 +1,5 @@
+/*
+ * memmove is implemented in memcpy.S. Having this file simplifies the build
+ * as it stops MISRCS from picking up the C implementation and rtld expects
+ * to copy the memmove object file into its object directory.
+ */
diff --git a/lib/libc/aarch64/string/strchr.S b/lib/libc/aarch64/string/strchr.S
new file mode 100644
--- /dev/null
+++ b/lib/libc/aarch64/string/strchr.S
@@ -0,0 +1,5 @@
+#define __strchr_aarch64 strchr
+#include "aarch64/strchr.S"
+
+.weak index
+.equ index, strchr
diff --git a/lib/libc/aarch64/string/strrchr.S b/lib/libc/aarch64/string/strrchr.S
new file mode 100644
--- /dev/null
+++ b/lib/libc/aarch64/string/strrchr.S
@@ -0,0 +1,5 @@
+#define __strrchr_aarch64 strrchr
+#include "aarch64/strrchr.S"
+
+.weak rindex
+.equ rindex, strrchr

File Metadata

Mime Type
text/plain
Expires
Fri, Jan 17, 4:03 PM (21 h, 5 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
15840358
Default Alt Text
D32774.diff (2 KB)

Event Timeline