diff options
-rw-r--r-- | ChangeLog | 25 | ||||
-rw-r--r-- | include/libc-symbols.h | 20 | ||||
-rw-r--r-- | misc/sys/cdefs.h | 10 | ||||
-rw-r--r-- | sysdeps/x86_64/multiarch/memchr.c | 2 | ||||
-rw-r--r-- | sysdeps/x86_64/multiarch/memcmp.c | 2 | ||||
-rw-r--r-- | sysdeps/x86_64/multiarch/mempcpy.c | 4 | ||||
-rw-r--r-- | sysdeps/x86_64/multiarch/memset.c | 2 | ||||
-rw-r--r-- | sysdeps/x86_64/multiarch/stpcpy.c | 4 | ||||
-rw-r--r-- | sysdeps/x86_64/multiarch/strcat.c | 2 | ||||
-rw-r--r-- | sysdeps/x86_64/multiarch/strchr.c | 2 | ||||
-rw-r--r-- | sysdeps/x86_64/multiarch/strcmp.c | 2 | ||||
-rw-r--r-- | sysdeps/x86_64/multiarch/strcpy.c | 2 | ||||
-rw-r--r-- | sysdeps/x86_64/multiarch/strcspn.c | 2 | ||||
-rw-r--r-- | sysdeps/x86_64/multiarch/strlen.c | 2 | ||||
-rw-r--r-- | sysdeps/x86_64/multiarch/strncat.c | 2 | ||||
-rw-r--r-- | sysdeps/x86_64/multiarch/strncmp.c | 2 | ||||
-rw-r--r-- | sysdeps/x86_64/multiarch/strncpy.c | 2 | ||||
-rw-r--r-- | sysdeps/x86_64/multiarch/strnlen.c | 4 | ||||
-rw-r--r-- | sysdeps/x86_64/multiarch/strpbrk.c | 2 | ||||
-rw-r--r-- | sysdeps/x86_64/multiarch/strrchr.c | 2 | ||||
-rw-r--r-- | sysdeps/x86_64/multiarch/strspn.c | 2 |
21 files changed, 71 insertions, 26 deletions
@@ -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 |