aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog25
-rw-r--r--include/libc-symbols.h20
-rw-r--r--misc/sys/cdefs.h10
-rw-r--r--sysdeps/x86_64/multiarch/memchr.c2
-rw-r--r--sysdeps/x86_64/multiarch/memcmp.c2
-rw-r--r--sysdeps/x86_64/multiarch/mempcpy.c4
-rw-r--r--sysdeps/x86_64/multiarch/memset.c2
-rw-r--r--sysdeps/x86_64/multiarch/stpcpy.c4
-rw-r--r--sysdeps/x86_64/multiarch/strcat.c2
-rw-r--r--sysdeps/x86_64/multiarch/strchr.c2
-rw-r--r--sysdeps/x86_64/multiarch/strcmp.c2
-rw-r--r--sysdeps/x86_64/multiarch/strcpy.c2
-rw-r--r--sysdeps/x86_64/multiarch/strcspn.c2
-rw-r--r--sysdeps/x86_64/multiarch/strlen.c2
-rw-r--r--sysdeps/x86_64/multiarch/strncat.c2
-rw-r--r--sysdeps/x86_64/multiarch/strncmp.c2
-rw-r--r--sysdeps/x86_64/multiarch/strncpy.c2
-rw-r--r--sysdeps/x86_64/multiarch/strnlen.c4
-rw-r--r--sysdeps/x86_64/multiarch/strpbrk.c2
-rw-r--r--sysdeps/x86_64/multiarch/strrchr.c2
-rw-r--r--sysdeps/x86_64/multiarch/strspn.c2
21 files changed, 71 insertions, 26 deletions
diff --git a/ChangeLog b/ChangeLog
index 7d723f5..e43fd3e 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,28 @@
+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
diff --git a/include/libc-symbols.h b/include/libc-symbols.h
index 8b9273c..e71a479 100644
--- a/include/libc-symbols.h
+++ b/include/libc-symbols.h
@@ -125,6 +125,11 @@
# 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. */
@@ -132,7 +137,8 @@
/* 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. */
@@ -143,14 +149,16 @@
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)
@@ -532,7 +540,8 @@ for linking")
# 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);
@@ -545,7 +554,8 @@ for linking")
# 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);
diff --git a/misc/sys/cdefs.h b/misc/sys/cdefs.h
index 3f6fe3c..8d58568 100644
--- a/misc/sys/cdefs.h
+++ b/misc/sys/cdefs.h
@@ -431,6 +431,16 @@
# 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__))
diff --git a/sysdeps/x86_64/multiarch/memchr.c b/sysdeps/x86_64/multiarch/memchr.c
index 016f578..372dd77 100644
--- a/sysdeps/x86_64/multiarch/memchr.c
+++ b/sysdeps/x86_64/multiarch/memchr.c
@@ -30,6 +30,6 @@ libc_ifunc_redirected (__redirect_memchr, memchr, IFUNC_SELECTOR ());
strong_alias (memchr, __memchr)
# ifdef SHARED
__hidden_ver1 (memchr, __GI_memchr, __redirect_memchr)
- __attribute__((visibility ("hidden")));
+ __attribute__((visibility ("hidden"))) __attribute_copy__ (memchr);
# endif
#endif
diff --git a/sysdeps/x86_64/multiarch/memcmp.c b/sysdeps/x86_64/multiarch/memcmp.c
index 6f3ca43..bbd3b01 100644
--- a/sysdeps/x86_64/multiarch/memcmp.c
+++ b/sysdeps/x86_64/multiarch/memcmp.c
@@ -32,6 +32,6 @@ weak_alias (memcmp, bcmp)
# ifdef SHARED
__hidden_ver1 (memcmp, __GI_memcmp, __redirect_memcmp)
- __attribute__ ((visibility ("hidden")));
+ __attribute__ ((visibility ("hidden"))) __attribute_copy__ (memcmp);
# endif
#endif
diff --git a/sysdeps/x86_64/multiarch/mempcpy.c b/sysdeps/x86_64/multiarch/mempcpy.c
index 9fe41dd..d2f7928 100644
--- a/sysdeps/x86_64/multiarch/mempcpy.c
+++ b/sysdeps/x86_64/multiarch/mempcpy.c
@@ -35,8 +35,8 @@ libc_ifunc_redirected (__redirect_mempcpy, __mempcpy, IFUNC_SELECTOR ());
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
diff --git a/sysdeps/x86_64/multiarch/memset.c b/sysdeps/x86_64/multiarch/memset.c
index 064841d..4b8f57f 100644
--- a/sysdeps/x86_64/multiarch/memset.c
+++ b/sysdeps/x86_64/multiarch/memset.c
@@ -30,6 +30,6 @@ libc_ifunc_redirected (__redirect_memset, memset, IFUNC_SELECTOR ());
# ifdef SHARED
__hidden_ver1 (memset, __GI_memset, __redirect_memset)
- __attribute__ ((visibility ("hidden")));
+ __attribute__ ((visibility ("hidden"))) __attribute_copy__ (memset);
# endif
#endif
diff --git a/sysdeps/x86_64/multiarch/stpcpy.c b/sysdeps/x86_64/multiarch/stpcpy.c
index 1e340fc..f74a54b 100644
--- a/sysdeps/x86_64/multiarch/stpcpy.c
+++ b/sysdeps/x86_64/multiarch/stpcpy.c
@@ -35,8 +35,8 @@ libc_ifunc_redirected (__redirect_stpcpy, __stpcpy, IFUNC_SELECTOR ());
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
diff --git a/sysdeps/x86_64/multiarch/strcat.c b/sysdeps/x86_64/multiarch/strcat.c
index 1f7f626..1922c0a 100644
--- a/sysdeps/x86_64/multiarch/strcat.c
+++ b/sysdeps/x86_64/multiarch/strcat.c
@@ -30,6 +30,6 @@ libc_ifunc_redirected (__redirect_strcat, strcat, IFUNC_SELECTOR ());
# ifdef SHARED
__hidden_ver1 (strcat, __GI_strcat, __redirect_strcat)
- __attribute__ ((visibility ("hidden")));
+ __attribute__ ((visibility ("hidden"))) __attribute_copy__ (strcat);
# endif
#endif
diff --git a/sysdeps/x86_64/multiarch/strchr.c b/sysdeps/x86_64/multiarch/strchr.c
index 76d64fb..87e99ba 100644
--- a/sysdeps/x86_64/multiarch/strchr.c
+++ b/sysdeps/x86_64/multiarch/strchr.c
@@ -50,6 +50,6 @@ libc_ifunc_redirected (__redirect_strchr, strchr, IFUNC_SELECTOR ());
weak_alias (strchr, index)
# ifdef SHARED
__hidden_ver1 (strchr, __GI_strchr, __redirect_strchr)
- __attribute__((visibility ("hidden")));
+ __attribute__((visibility ("hidden"))) __attribute_copy__ (strchr);
# endif
#endif
diff --git a/sysdeps/x86_64/multiarch/strcmp.c b/sysdeps/x86_64/multiarch/strcmp.c
index b903e41..e3cf39d 100644
--- a/sysdeps/x86_64/multiarch/strcmp.c
+++ b/sysdeps/x86_64/multiarch/strcmp.c
@@ -54,6 +54,6 @@ libc_ifunc_redirected (__redirect_strcmp, strcmp, IFUNC_SELECTOR ());
# ifdef SHARED
__hidden_ver1 (strcmp, __GI_strcmp, __redirect_strcmp)
- __attribute__ ((visibility ("hidden")));
+ __attribute__ ((visibility ("hidden"))) __attribute_copy__ (strcmp);
# endif
#endif
diff --git a/sysdeps/x86_64/multiarch/strcpy.c b/sysdeps/x86_64/multiarch/strcpy.c
index 12e0e3f..ce819dd 100644
--- a/sysdeps/x86_64/multiarch/strcpy.c
+++ b/sysdeps/x86_64/multiarch/strcpy.c
@@ -30,6 +30,6 @@ libc_ifunc_redirected (__redirect_strcpy, strcpy, IFUNC_SELECTOR ());
# ifdef SHARED
__hidden_ver1 (strcpy, __GI_strcpy, __redirect_strcpy)
- __attribute__ ((visibility ("hidden")));
+ __attribute__ ((visibility ("hidden"))) __attribute_copy__ (strcpy);
# endif
#endif
diff --git a/sysdeps/x86_64/multiarch/strcspn.c b/sysdeps/x86_64/multiarch/strcspn.c
index 9712e84..9d96526 100644
--- a/sysdeps/x86_64/multiarch/strcspn.c
+++ b/sysdeps/x86_64/multiarch/strcspn.c
@@ -30,6 +30,6 @@ libc_ifunc_redirected (__redirect_strcspn, strcspn, IFUNC_SELECTOR ());
# ifdef SHARED
__hidden_ver1 (strcspn, __GI_strcspn, __redirect_strcspn)
- __attribute__ ((visibility ("hidden")));
+ __attribute__ ((visibility ("hidden"))) __attribute_copy__ (strcspn);
# endif
#endif
diff --git a/sysdeps/x86_64/multiarch/strlen.c b/sysdeps/x86_64/multiarch/strlen.c
index 1758d22..a230740 100644
--- a/sysdeps/x86_64/multiarch/strlen.c
+++ b/sysdeps/x86_64/multiarch/strlen.c
@@ -29,6 +29,6 @@
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
diff --git a/sysdeps/x86_64/multiarch/strncat.c b/sysdeps/x86_64/multiarch/strncat.c
index 841c165..2546277 100644
--- a/sysdeps/x86_64/multiarch/strncat.c
+++ b/sysdeps/x86_64/multiarch/strncat.c
@@ -30,6 +30,6 @@ libc_ifunc_redirected (__redirect_strncat, strncat, IFUNC_SELECTOR ());
strong_alias (strncat, __strncat);
# ifdef SHARED
__hidden_ver1 (strncat, __GI___strncat, __redirect_strncat)
- __attribute__((visibility ("hidden")));
+ __attribute__((visibility ("hidden"))) __attribute_copy__ (strncat);
# endif
#endif
diff --git a/sysdeps/x86_64/multiarch/strncmp.c b/sysdeps/x86_64/multiarch/strncmp.c
index 02b6d0b..32f5c6c 100644
--- a/sysdeps/x86_64/multiarch/strncmp.c
+++ b/sysdeps/x86_64/multiarch/strncmp.c
@@ -55,6 +55,6 @@ libc_ifunc_redirected (__redirect_strncmp, strncmp, IFUNC_SELECTOR ());
# ifdef SHARED
__hidden_ver1 (strncmp, __GI_strncmp, __redirect_strncmp)
- __attribute__ ((visibility ("hidden")));
+ __attribute__ ((visibility ("hidden"))) __attribute_copy__ (strncmp);
# endif
#endif
diff --git a/sysdeps/x86_64/multiarch/strncpy.c b/sysdeps/x86_64/multiarch/strncpy.c
index 3c3de8b..37aae2c 100644
--- a/sysdeps/x86_64/multiarch/strncpy.c
+++ b/sysdeps/x86_64/multiarch/strncpy.c
@@ -30,6 +30,6 @@ libc_ifunc_redirected (__redirect_strncpy, strncpy, IFUNC_SELECTOR ());
# ifdef SHARED
__hidden_ver1 (strncpy, __GI_strncpy, __redirect_strncpy)
- __attribute__ ((visibility ("hidden")));
+ __attribute__ ((visibility ("hidden"))) __attribute_copy__ (strncpy);
# endif
#endif
diff --git a/sysdeps/x86_64/multiarch/strnlen.c b/sysdeps/x86_64/multiarch/strnlen.c
index 3ab94ce..9d64335 100644
--- a/sysdeps/x86_64/multiarch/strnlen.c
+++ b/sysdeps/x86_64/multiarch/strnlen.c
@@ -32,8 +32,8 @@ libc_ifunc_redirected (__redirect_strnlen, __strnlen, IFUNC_SELECTOR ());
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
diff --git a/sysdeps/x86_64/multiarch/strpbrk.c b/sysdeps/x86_64/multiarch/strpbrk.c
index a0d435a..f110367 100644
--- a/sysdeps/x86_64/multiarch/strpbrk.c
+++ b/sysdeps/x86_64/multiarch/strpbrk.c
@@ -30,6 +30,6 @@ libc_ifunc_redirected (__redirect_strpbrk, strpbrk, IFUNC_SELECTOR ());
# ifdef SHARED
__hidden_ver1 (strpbrk, __GI_strpbrk, __redirect_strpbrk)
- __attribute__ ((visibility ("hidden")));
+ __attribute__ ((visibility ("hidden"))) __attribute_copy__ (strpbrk);
# endif
#endif
diff --git a/sysdeps/x86_64/multiarch/strrchr.c b/sysdeps/x86_64/multiarch/strrchr.c
index a719edd..ba7458a 100644
--- a/sysdeps/x86_64/multiarch/strrchr.c
+++ b/sysdeps/x86_64/multiarch/strrchr.c
@@ -29,6 +29,6 @@ libc_ifunc_redirected (__redirect_strrchr, strrchr, IFUNC_SELECTOR ());
weak_alias (strrchr, rindex);
# ifdef SHARED
__hidden_ver1 (strrchr, __GI_strrchr, __redirect_strrchr)
- __attribute__((visibility ("hidden")));
+ __attribute__((visibility ("hidden"))) __attribute_copy__ (strrchr);
# endif
#endif
diff --git a/sysdeps/x86_64/multiarch/strspn.c b/sysdeps/x86_64/multiarch/strspn.c
index 56ab4d9..5b9654e 100644
--- a/sysdeps/x86_64/multiarch/strspn.c
+++ b/sysdeps/x86_64/multiarch/strspn.c
@@ -30,6 +30,6 @@ libc_ifunc_redirected (__redirect_strspn, strspn, IFUNC_SELECTOR ());
# ifdef SHARED
__hidden_ver1 (strspn, __GI_strspn, __redirect_strspn)
- __attribute__ ((visibility ("hidden")));
+ __attribute__ ((visibility ("hidden"))) __attribute_copy__ (strspn);
# endif
#endif