+2016-02-18 H.J. Lu <hongjiu.lu@intel.com>
+ Wilco Dijkstra <wdijkstr@arm.com>
+
+ [BZ #19462]
+ * bits/string.h (_STRING_ARCH_unaligned): Renamed to ...
+ (_STRING_INLINE_unaligned): This.
+ * include/string.h: Include <string_private.h>.
+ * string/bits/string2.h: Replace _STRING_ARCH_unaligned with
+ _STRING_INLINE_unaligned.
+ * sysdeps/aarch64/bits/string.h (_STRING_ARCH_unaligned): Removed.
+ (_STRING_INLINE_unaligned): New.
+ * sysdeps/aarch64/string_private.h: New file.
+ * sysdeps/generic/string_private.h: Likewise.
+ * sysdeps/m68k/m680x0/m68020/string_private.h: Likewise.
+ * sysdeps/s390/string_private.h: Likewise.
+ * sysdeps/x86/string_private.h: Likewise.
+ * sysdeps/m68k/m680x0/m68020/bits/string.h
+ (_STRING_ARCH_unaligned): Renamed to ...
+ (_STRING_INLINE_unaligned): This.
+ * sysdeps/s390/bits/string.h (_STRING_ARCH_unaligned): Renamed
+ to ...
+ (_STRING_INLINE_unaligned): This.
+ * sysdeps/sparc/bits/string.h (_STRING_ARCH_unaligned): Renamed
+ to ...
+ (_STRING_INLINE_unaligned): This.
+ * sysdeps/x86/bits/string.h (_STRING_ARCH_unaligned): Renamed
+ to ...
+ (_STRING_INLINE_unaligned): This.
+
2016-02-17 Andrew Senkevich <andrew.senkevich@intel.com>
H.J. Lu <hongjiu.lu@intel.com>
#ifndef _BITS_STRING_H
#define _BITS_STRING_H 1
-/* Define if architecture can access unaligned multi-byte variables. */
-#define _STRING_ARCH_unaligned 0
+/* Define whether to use the unaligned string inline ABI.
+ The string inline functions are an external ABI, thus cannot be changed
+ after the first release of a new target (unlike _STRING_ARCH_unaligned
+ which may be changed from release to release). Targets must support
+ unaligned accesses in hardware if either define is set to true. */
+#define _STRING_INLINE_unaligned 0
#endif /* bits/string.h */
extern char *__strerror_r (int __errnum, char *__buf, size_t __buflen);
#endif
+/* Get _STRING_ARCH_unaligned. */
+#include <string_private.h>
+
/* Now the real definitions. We do this here since some of the functions
above are defined as macros in the headers. */
#include <string/string.h>
# endif
#endif
-#if _STRING_ARCH_unaligned
+#if _STRING_INLINE_unaligned
/* If we can do unaligned memory accesses we must know the endianess. */
# include <endian.h>
# include <bits/types.h>
/* Set N bytes of S to C. */
#if !defined _HAVE_STRING_ARCH_memset
# if !__GNUC_PREREQ (3, 0)
-# if _STRING_ARCH_unaligned
+# if _STRING_INLINE_unaligned
# define memset(s, c, n) \
(__extension__ (__builtin_constant_p (n) && (n) <= 16 \
? ((n) == 1 \
# endif
# if !__GNUC_PREREQ (3, 0) || defined _FORCE_INLINES
-# if _STRING_ARCH_unaligned
+# if _STRING_INLINE_unaligned
# ifndef _FORCE_INLINES
# define __mempcpy_args(src) \
((const char *) (src))[0], ((const char *) (src))[2], \
: strcpy (dest, src)))
# endif
-# if _STRING_ARCH_unaligned
+# if _STRING_INLINE_unaligned
# ifndef _FORCE_INLINES
# define __strcpy_args(src) \
__extension__ __STRING2_SMALL_GET16 (src, 0), \
# endif
# if !__GNUC_PREREQ (3, 0) || defined _FORCE_INLINES
-# if _STRING_ARCH_unaligned
+# if _STRING_INLINE_unaligned
# ifndef _FORCE_INLINES
# define __stpcpy_args(src) \
__extension__ __STRING2_SMALL_GET16 (src, 0), \
# error "Never use <bits/string.h> directly; include <string.h> instead."
#endif
-/* AArch64 implementations support efficient unaligned access. */
-#define _STRING_ARCH_unaligned 1
+/* AArch64 uses the aligned string inline ABI. */
+#define _STRING_INLINE_unaligned 0
--- /dev/null
+/* Define _STRING_ARCH_unaligned. AArch64 version.
+ Copyright (C) 2016 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
+ <http://www.gnu.org/licenses/>. */
+
+/* AArch64 implementations support efficient unaligned access. */
+#define _STRING_ARCH_unaligned 1
--- /dev/null
+/* Define _STRING_ARCH_unaligned. Generic version.
+ Copyright (C) 2016 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
+ <http://www.gnu.org/licenses/>. */
+
+/* Define to 1 if architecture can access unaligned multi-byte
+ variables. */
+#define _STRING_ARCH_unaligned 0
# error "Never use <bits/string.h> directly; include <string.h> instead."
#endif
-/* Currently the only purpose of this file is to tell the generic inline
- macros that unaligned memory access is possible. */
-#define _STRING_ARCH_unaligned 1
+/* Use the unaligned string inline ABI. */
+#define _STRING_INLINE_unaligned 1
--- /dev/null
+/* Define _STRING_ARCH_unaligned. m680x0 version, x >= 2.
+ Copyright (C) 2016 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
+ <http://www.gnu.org/licenses/>. */
+
+/* Tell the generic inline macros that unaligned memory access is
+ possible. */
+#define _STRING_ARCH_unaligned 1
# error "Never use <bits/string.h> directly; include <string.h> instead."
#endif
-/* The s390 processors can access unaligned multi-byte variables. */
-#define _STRING_ARCH_unaligned 1
+/* Use the unaligned string inline ABI. */
+#define _STRING_INLINE_unaligned 1
/* We only provide optimizations if the user selects them and if
GNU CC is used. */
--- /dev/null
+/* Define _STRING_ARCH_unaligned. S/390 version.
+ Copyright (C) 2016 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
+ <http://www.gnu.org/licenses/>. */
+
+/* The s390 processors can access unaligned multi-byte variables. */
+#define _STRING_ARCH_unaligned 1
# error "Never use <bits/string.h> directly; include <string.h> instead."
#endif
-/* Define if architecture can access unaligned multi-byte variables. */
-#define _STRING_ARCH_unaligned 0
+/* sparc uses the aligned string inline ABI. */
+#define _STRING_INLINE_unaligned 0
/* sparc32 and sparc64 strchr(x, '\0') perform better than
__rawmemchr(x, '\0'). */
# error "Never use <bits/string.h> directly; include <string.h> instead."
#endif
-/* The ix86 processors can access unaligned multi-byte variables. */
-#define _STRING_ARCH_unaligned 1
+/* Use the unaligned string inline ABI. */
+#define _STRING_INLINE_unaligned 1
/* Enable inline functions only for i486 or better when compiling for
ia32. */
--- /dev/null
+/* Define _STRING_ARCH_unaligned. i486/x86-64 version.
+ Copyright (C) 2016 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
+ <http://www.gnu.org/licenses/>. */
+
+/* The ix86 processors can access unaligned multi-byte variables. */
+#define _STRING_ARCH_unaligned 1