From 61995d3ed957937f013807529db63ddf29815053 Mon Sep 17 00:00:00 2001 From: Roland McGrath Date: Thu, 17 Mar 2005 21:06:39 +0000 Subject: [PATCH] * include/libc-symbols.h (__hidden_proto): Remove bogus declaration of internal. (__hidden_def1, __hidden_dot_def1): Remove. (__hidden_def2, __hidden_def3): Remove. (__hidden_ver1): New. (hidden_ver, hidden_def, hidden_weak): Use it. (hidden_data_ver, hidden_data_ver, hidden_data_weak): Use non-data version of the macro. * include/wchar.h (__wcscoll): Remove. * wcsmbs/wcscoll.c: Define wcscoll directly instead of via __wcscoll. * string/strcoll.c: Don't issue libc_hidden_def STRCOLL redefined. --- ChangeLog | 15 ++++++++ include/libc-symbols.h | 77 ++++++------------------------------------ include/wchar.h | 1 - string/strcoll.c | 6 ++-- wcsmbs/wcscoll.c | 3 +- 5 files changed, 31 insertions(+), 71 deletions(-) diff --git a/ChangeLog b/ChangeLog index d6f8b8fdd3..5e254b2951 100644 --- a/ChangeLog +++ b/ChangeLog @@ -2,6 +2,21 @@ * nscd/aicache.c (addhstaiX): Tweak type to avoid warning. +2005-03-16 Richard Henderson + + * include/libc-symbols.h (__hidden_proto): Remove bogus declaration + of internal. + (__hidden_def1, __hidden_dot_def1): Remove. + (__hidden_def2, __hidden_def3): Remove. + (__hidden_ver1): New. + (hidden_ver, hidden_def, hidden_weak): Use it. + (hidden_data_ver, hidden_data_ver, hidden_data_weak): Use non-data + version of the macro. + + * include/wchar.h (__wcscoll): Remove. + * wcsmbs/wcscoll.c: Define wcscoll directly instead of via __wcscoll. + * string/strcoll.c: Don't issue libc_hidden_def STRCOLL redefined. + 2005-03-16 Daniel Jacobowitz * elf/elf.h: Define MIPS TLS relocations. diff --git a/include/libc-symbols.h b/include/libc-symbols.h index f3526ca053..cdbc4ef202 100644 --- a/include/libc-symbols.h +++ b/include/libc-symbols.h @@ -583,78 +583,23 @@ for linking") # define hidden_proto(name, attrs...) \ __hidden_proto (name, __GI_##name, ##attrs) # define __hidden_proto(name, internal, attrs...) \ - extern __typeof (name) internal; \ extern __typeof (name) name __asm__ (__hidden_asmname (#internal)) \ __hidden_proto_hiddenattr (attrs); # define __hidden_asmname(name) \ __hidden_asmname1 (__USER_LABEL_PREFIX__, name) # define __hidden_asmname1(prefix, name) __hidden_asmname2(prefix, name) # define __hidden_asmname2(prefix, name) #prefix name -# ifdef HAVE_ASM_SET_DIRECTIVE -# define __hidden_def1(original, alias) \ - ASM_GLOBAL_DIRECTIVE C_SYMBOL_NAME (alias) ASM_LINE_SEP \ - .set C_SYMBOL_NAME (alias), C_SYMBOL_NAME (original) -# ifdef HAVE_ASM_GLOBAL_DOT_NAME -# define __hidden_dot_def1(original, alias) ASM_LINE_SEP \ - ASM_GLOBAL_DIRECTIVE C_SYMBOL_DOT_NAME (alias) ASM_LINE_SEP \ - .set C_SYMBOL_DOT_NAME (alias), C_SYMBOL_DOT_NAME (original) -# else -# define __hidden_dot_def1(original, alias) -# endif -# else -# define __hidden_def1(original, alias) \ - ASM_GLOBAL_DIRECTIVE C_SYMBOL_NAME (alias) ASM_LINE_SEP \ - C_SYMBOL_NAME (alias) = C_SYMBOL_NAME (original) -# ifdef HAVE_ASM_GLOBAL_DOT_NAME -# define __hidden_dot_def1(original, alias) ASM_LINE_SEP \ - ASM_GLOBAL_DIRECTIVE C_SYMBOL_DOT_NAME (alias) ASM_LINE_SEP \ - C_SYMBOL_DOT_NAME (alias) = C_SYMBOL_DOT_NAME (original) -# else -# define __hidden_dot_def1(original, alias) -# endif -# endif -# define __hidden_def2(...) #__VA_ARGS__ -# define __hidden_def3(...) __hidden_def2 (__VA_ARGS__) -# define hidden_def(name) \ - __asm__ (__hidden_def3 (__hidden_def1 (__GI_##name, name) \ - __hidden_dot_def1 (__GI_##name, name))); -# define hidden_data_def(name) \ - __asm__ (__hidden_def3 (__hidden_def1 (__GI_##name, name))); -# define hidden_ver(local, name) \ - __asm__ (__hidden_def3 (__hidden_def1 (local, __GI_##name) \ - __hidden_dot_def1 (local, __GI_##name))); -# define hidden_data_ver(local, name) \ - __asm__ (__hidden_def3 (__hidden_def1 (local, __GI_##name))); -# ifdef HAVE_WEAK_SYMBOLS -# ifdef HAVE_ASM_WEAKEXT_DIRECTIVE -# define __hidden_weak1(original, alias) \ - .weakext C_SYMBOL_NAME (alias), C_SYMBOL_NAME (original) -# ifdef HAVE_ASM_GLOBAL_DOT_NAME -# define __hidden_dot_weak1(original, alias) ASM_LINE_SEP \ - .weakext C_SYMBOL_DOT_NAME (alias), C_SYMBOL_DOT_NAME (original) -# else -# define __hidden_dot_weak1(original, alias) -# endif -# else /* ! HAVE_ASM_WEAKEXT_DIRECTIVE */ -# define __hidden_weak1(original, alias) \ - .weak C_SYMBOL_NAME (alias) ASM_LINE_SEP \ - C_SYMBOL_NAME (alias) = C_SYMBOL_NAME (original) -# ifdef HAVE_ASM_GLOBAL_DOT_NAME -# define __hidden_dot_weak1(original, alias) ASM_LINE_SEP \ - .weak C_SYMBOL_DOT_NAME (alias) ASM_LINE_SEP \ - C_SYMBOL_DOT_NAME (alias) = C_SYMBOL_DOT_NAME (original) -# else -# define __hidden_dot_weak1(original, alias) -# endif -# endif -# define hidden_weak(name) \ - __asm__ (__hidden_def3 (__hidden_weak1 (__GI_##name, name) \ - __hidden_dot_weak1 (__GI_##name, name))); -# define hidden_data_weak(name) \ - __asm__ (__hidden_def3 (__hidden_weak1 (__GI_##name, name))); -# else -# define hidden_weak(name) hidden_def (name) -# endif +# 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)))) +# 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_data_def(name) hidden_def(name) +# define hidden_weak(name) \ + __hidden_ver1(__GI_##name, name, name) __attribute__((weak)); +# define hidden_data_weak(name) hidden_weak(name) # else /* For assembly, we need to do the opposite of what we do in C: in assembly gcc __REDIRECT stuff is not in place, so functions diff --git a/include/wchar.h b/include/wchar.h index 73bd4a8fef..0f91114c41 100644 --- a/include/wchar.h +++ b/include/wchar.h @@ -56,7 +56,6 @@ extern int __wcscasecmp (__const wchar_t *__s1, __const wchar_t *__s2) extern int __wcsncasecmp (__const wchar_t *__s1, __const wchar_t *__s2, size_t __n) __attribute_pure__; -extern int __wcscoll (__const wchar_t *__s1, __const wchar_t *__s2); extern size_t __wcslen (__const wchar_t *__s) __attribute_pure__; extern size_t __wcsnlen (__const wchar_t *__s, size_t __maxlen) __attribute_pure__; diff --git a/string/strcoll.c b/string/strcoll.c index 8a73cae564..8e8fdc7792 100644 --- a/string/strcoll.c +++ b/string/strcoll.c @@ -23,6 +23,7 @@ # define STRING_TYPE char # define STRCOLL strcoll # define STRCOLL_L __strcoll_l +# define USE_HIDDEN_DEF #endif #include "../locale/localeinfo.h" @@ -35,6 +36,7 @@ STRCOLL (s1, s2) { return STRCOLL_L (s1, s2, _NL_CURRENT_LOCALE); } -#if !defined WIDE_CHAR_VERSION -libc_hidden_def (strcoll) + +#ifdef USE_HIDDEN_DEF +libc_hidden_def (STRCOLL) #endif diff --git a/wcsmbs/wcscoll.c b/wcsmbs/wcscoll.c index ed6db06e4e..ae3d48c623 100644 --- a/wcsmbs/wcscoll.c +++ b/wcsmbs/wcscoll.c @@ -22,12 +22,11 @@ #define STRING_TYPE wchar_t #define USTRING_TYPE wint_t -#define STRCOLL __wcscoll +#define STRCOLL wcscoll #define STRCOLL_L __wcscoll_l #include "../string/strcoll.c" #ifndef USE_IN_EXTENDED_LOCALE_MODEL -weak_alias (__wcscoll, wcscoll) libc_hidden_weak (wcscoll) #endif