+2018-11-09 Martin Sebor <msebor@redhat.com>
+
+ * include/libc-symbols.h (__attribute_copy__): Define macro unless
+ it's already defined.
+ (_strong_alias): Use __attribute_copy__.
+ (_weak_alias, __hidden_ver1, __hidden_nolink2): Same.
+ * misc/sys/cdefs.h (__attribute_copy__): New macro.
+ * sysdeps/x86_64/multiarch/memchr.c (memchr): Use __attribute_copy__.
+ * sysdeps/x86_64/multiarch/memcmp.c (memcmp): Same.
+ * sysdeps/x86_64/multiarch/mempcpy.c (mempcpy): Same.
+ * sysdeps/x86_64/multiarch/memset.c (memset): Same.
+ * sysdeps/x86_64/multiarch/stpcpy.c (stpcpy): Same.
+ * sysdeps/x86_64/multiarch/strcat.c (strcat): Same.
+ * sysdeps/x86_64/multiarch/strchr.c (strchr): Same.
+ * sysdeps/x86_64/multiarch/strcmp.c (strcmp): Same.
+ * sysdeps/x86_64/multiarch/strcpy.c (strcpy): Same.
+ * sysdeps/x86_64/multiarch/strcspn.c (strcspn): Same.
+ * sysdeps/x86_64/multiarch/strlen.c (strlen): Same.
+ * sysdeps/x86_64/multiarch/strncmp.c (strncmp): Same.
+ * sysdeps/x86_64/multiarch/strncpy.c (strncpy): Same.
+ * sysdeps/x86_64/multiarch/strnlen.c (strnlen): Same.
+ * sysdeps/x86_64/multiarch/strpbrk.c (strpbrk): Same.
+ * sysdeps/x86_64/multiarch/strrchr.c (strrchr): Same.
+ * sysdeps/x86_64/multiarch/strspn.c (strspn): Same.
+
2018-11-09 Gabriel F. T. Gomes <gabriel@inconstante.eti.br>
* misc/tst-efgcvt.c: Include support/check.h and
# define ASM_LINE_SEP ;
#endif
+#ifndef __attribute_copy__
+/* Provide an empty definition when cdefs.h is not included. */
+# define __attribute_copy__(arg)
+#endif
+
#ifndef __ASSEMBLER__
/* GCC understands weak symbols and aliases; use its interface where
possible, instead of embedded assembly language. */
/* Define ALIASNAME as a strong alias for NAME. */
# define strong_alias(name, aliasname) _strong_alias(name, aliasname)
# define _strong_alias(name, aliasname) \
- extern __typeof (name) aliasname __attribute__ ((alias (#name)));
+ extern __typeof (name) aliasname __attribute__ ((alias (#name))) \
+ __attribute_copy__ (name);
/* This comes between the return type and function name in
a function definition to make that definition weak. */
If weak aliases are not available, this defines a strong alias. */
# define weak_alias(name, aliasname) _weak_alias (name, aliasname)
# define _weak_alias(name, aliasname) \
- extern __typeof (name) aliasname __attribute__ ((weak, alias (#name)));
+ extern __typeof (name) aliasname __attribute__ ((weak, alias (#name))) \
+ __attribute_copy__ (name);
/* Same as WEAK_ALIAS, but mark symbol as hidden. */
# define weak_hidden_alias(name, aliasname) \
_weak_hidden_alias (name, aliasname)
# define _weak_hidden_alias(name, aliasname) \
extern __typeof (name) aliasname \
- __attribute__ ((weak, alias (#name), __visibility__ ("hidden")));
+ __attribute__ ((weak, alias (#name), __visibility__ ("hidden"))) \
+ __attribute_copy__ (name);
/* Declare SYMBOL as weak undefined symbol (resolved to 0 if not defined). */
# define weak_extern(symbol) _weak_extern (weak symbol)
# define __hidden_ver1(local, internal, name) \
extern __typeof (name) __EI_##name __asm__(__hidden_asmname (#internal)); \
extern __typeof (name) __EI_##name \
- __attribute__((alias (__hidden_asmname (#local))))
+ __attribute__((alias (__hidden_asmname (#local)))) \
+ __attribute_copy__ (name)
# define hidden_ver(local, name) __hidden_ver1(local, __GI_##name, name);
# define hidden_data_ver(local, name) hidden_ver(local, name)
# define hidden_def(name) __hidden_ver1(__GI_##name, name, name);
# define __hidden_nolink1(local, internal, name, version) \
__hidden_nolink2 (local, internal, name, version)
# define __hidden_nolink2(local, internal, name, version) \
- extern __typeof (name) internal __attribute__ ((alias (#local))); \
+ extern __typeof (name) internal __attribute__ ((alias (#local))) \
+ __attribute_copy__ (name); \
__hidden_nolink3 (local, internal, #name "@" #version)
# define __hidden_nolink3(local, internal, vername) \
__asm__ (".symver " #internal ", " vername);
# define __attribute_nonstring__
#endif
+/* Undefine (also defined in libc-symbols.h). */
+#undef __attribute_copy__
+#if __GNUC_PREREQ (9, 0)
+/* Copies attributes from the declaration or type referenced by
+ the argument. */
+# define __attribute_copy__(arg) __attribute__ ((__copy__ (arg)))
+#else
+# define __attribute_copy__(arg)
+#endif
+
#if (!defined _Static_assert && !defined __cplusplus \
&& (defined __STDC_VERSION__ ? __STDC_VERSION__ : 0) < 201112 \
&& (!__GNUC_PREREQ (4, 6) || defined __STRICT_ANSI__))
strong_alias (memchr, __memchr)
# ifdef SHARED
__hidden_ver1 (memchr, __GI_memchr, __redirect_memchr)
- __attribute__((visibility ("hidden")));
+ __attribute__((visibility ("hidden"))) __attribute_copy__ (memchr);
# endif
#endif
# ifdef SHARED
__hidden_ver1 (memcmp, __GI_memcmp, __redirect_memcmp)
- __attribute__ ((visibility ("hidden")));
+ __attribute__ ((visibility ("hidden"))) __attribute_copy__ (memcmp);
# endif
#endif
weak_alias (__mempcpy, mempcpy)
# ifdef SHARED
__hidden_ver1 (__mempcpy, __GI___mempcpy, __redirect___mempcpy)
- __attribute__ ((visibility ("hidden")));
+ __attribute__ ((visibility ("hidden"))) __attribute_copy__ (mempcpy);
__hidden_ver1 (mempcpy, __GI_mempcpy, __redirect_mempcpy)
- __attribute__ ((visibility ("hidden")));
+ __attribute__ ((visibility ("hidden"))) __attribute_copy__ (mempcpy);
# endif
#endif
# ifdef SHARED
__hidden_ver1 (memset, __GI_memset, __redirect_memset)
- __attribute__ ((visibility ("hidden")));
+ __attribute__ ((visibility ("hidden"))) __attribute_copy__ (memset);
# endif
#endif
weak_alias (__stpcpy, stpcpy)
# ifdef SHARED
__hidden_ver1 (__stpcpy, __GI___stpcpy, __redirect___stpcpy)
- __attribute__ ((visibility ("hidden")));
+ __attribute__ ((visibility ("hidden"))) __attribute_copy__ (stpcpy);
__hidden_ver1 (stpcpy, __GI_stpcpy, __redirect_stpcpy)
- __attribute__ ((visibility ("hidden")));
+ __attribute__ ((visibility ("hidden"))) __attribute_copy__ (stpcpy);
# endif
#endif
# ifdef SHARED
__hidden_ver1 (strcat, __GI_strcat, __redirect_strcat)
- __attribute__ ((visibility ("hidden")));
+ __attribute__ ((visibility ("hidden"))) __attribute_copy__ (strcat);
# endif
#endif
weak_alias (strchr, index)
# ifdef SHARED
__hidden_ver1 (strchr, __GI_strchr, __redirect_strchr)
- __attribute__((visibility ("hidden")));
+ __attribute__((visibility ("hidden"))) __attribute_copy__ (strchr);
# endif
#endif
# ifdef SHARED
__hidden_ver1 (strcmp, __GI_strcmp, __redirect_strcmp)
- __attribute__ ((visibility ("hidden")));
+ __attribute__ ((visibility ("hidden"))) __attribute_copy__ (strcmp);
# endif
#endif
# ifdef SHARED
__hidden_ver1 (strcpy, __GI_strcpy, __redirect_strcpy)
- __attribute__ ((visibility ("hidden")));
+ __attribute__ ((visibility ("hidden"))) __attribute_copy__ (strcpy);
# endif
#endif
# ifdef SHARED
__hidden_ver1 (strcspn, __GI_strcspn, __redirect_strcspn)
- __attribute__ ((visibility ("hidden")));
+ __attribute__ ((visibility ("hidden"))) __attribute_copy__ (strcspn);
# endif
#endif
libc_ifunc_redirected (__redirect_strlen, strlen, IFUNC_SELECTOR ());
# ifdef SHARED
__hidden_ver1 (strlen, __GI_strlen, __redirect_strlen)
- __attribute__((visibility ("hidden")));
+ __attribute__((visibility ("hidden"))) __attribute_copy__ (strlen);
# endif
#endif
strong_alias (strncat, __strncat);
# ifdef SHARED
__hidden_ver1 (strncat, __GI___strncat, __redirect_strncat)
- __attribute__((visibility ("hidden")));
+ __attribute__((visibility ("hidden"))) __attribute_copy__ (strncat);
# endif
#endif
# ifdef SHARED
__hidden_ver1 (strncmp, __GI_strncmp, __redirect_strncmp)
- __attribute__ ((visibility ("hidden")));
+ __attribute__ ((visibility ("hidden"))) __attribute_copy__ (strncmp);
# endif
#endif
# ifdef SHARED
__hidden_ver1 (strncpy, __GI_strncpy, __redirect_strncpy)
- __attribute__ ((visibility ("hidden")));
+ __attribute__ ((visibility ("hidden"))) __attribute_copy__ (strncpy);
# endif
#endif
weak_alias (__strnlen, strnlen);
# ifdef SHARED
__hidden_ver1 (__strnlen, __GI___strnlen, __redirect___strnlen)
- __attribute__((visibility ("hidden")));
+ __attribute__((visibility ("hidden"))) __attribute_copy__ (strnlen);
__hidden_ver1 (strnlen, __GI_strnlen, __redirect_strnlen)
- __attribute__((weak, visibility ("hidden")));
+ __attribute__((weak, visibility ("hidden"))) __attribute_copy__ (strnlen);
# endif
#endif
# ifdef SHARED
__hidden_ver1 (strpbrk, __GI_strpbrk, __redirect_strpbrk)
- __attribute__ ((visibility ("hidden")));
+ __attribute__ ((visibility ("hidden"))) __attribute_copy__ (strpbrk);
# endif
#endif
weak_alias (strrchr, rindex);
# ifdef SHARED
__hidden_ver1 (strrchr, __GI_strrchr, __redirect_strrchr)
- __attribute__((visibility ("hidden")));
+ __attribute__((visibility ("hidden"))) __attribute_copy__ (strrchr);
# endif
#endif
# ifdef SHARED
__hidden_ver1 (strspn, __GI_strspn, __redirect_strspn)
- __attribute__ ((visibility ("hidden")));
+ __attribute__ ((visibility ("hidden"))) __attribute_copy__ (strspn);
# endif
#endif