Hi Yann, thx, committed and pushed,
best regards Waldemar Yann Sionneau wrote, > With new compiler (gcc >= 9 ?) building uClibc-ng now gives this sort of > warnings: > > ./include/libc-symbols.h:426:25: warning: '__EI_localeconv' specifies less > restrictive attribute than its target 'localeconv': 'nothrow' > [-Wmissing-attributes] > 426 | extern __typeof (name) __EI_##name __attribute__((alias > (__hidden_asmname1 (,#local)))) > | ^~~~~ > ./include/libc-symbols.h:429:29: note: in expansion of macro '__hidden_ver1' > 429 | # define hidden_def(name) __hidden_ver1(__GI_##name, name, name); > | ^~~~~~~~~~~~~ > ./include/libc-symbols.h:497:32: note: in expansion of macro 'hidden_def' > 497 | # define libc_hidden_def(name) hidden_def (name) > | ^~~~~~~~~~ > libc/misc/locale/locale.c:306:1: note: in expansion of macro 'libc_hidden_def' > 306 | libc_hidden_def(localeconv) > | ^~~~~~~~~~~~~~~ > In file included from libc/misc/locale/localeconv.c:8: > libc/misc/locale/locale.c:261:15: note: '__EI_localeconv' target declared here > 261 | struct lconv *localeconv(void) > | ^~~~~~~~~~ > > The fix is mostly being backported/adapted from glibc. > --- > include/libc-symbols.h | 14 ++++++++++---- > include/sys/cdefs.h | 11 +++++++++++ > 2 files changed, 21 insertions(+), 4 deletions(-) > > diff --git a/include/libc-symbols.h b/include/libc-symbols.h > index 4dc05c76e..2254375ad 100644 > --- a/include/libc-symbols.h > +++ b/include/libc-symbols.h > @@ -156,6 +156,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. */ > @@ -163,13 +168,13 @@ > /* 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); > /* Same, but does not check for type match. Use sparingly. > Example: strong_alias(stat,stat64) may fail, this one works: */ > # define strong_alias_untyped(name, aliasname) \ > _strong_alias_untyped(name, aliasname) > # define _strong_alias_untyped(name, aliasname) \ > - extern __typeof (aliasname) aliasname __attribute__ ((alias (#name))); > + extern __typeof (aliasname) aliasname __attribute__ ((alias (#name))) > __attribute_copy__ (name); > > # ifdef HAVE_WEAK_SYMBOLS > > @@ -182,7 +187,7 @@ > 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); > > /* Declare SYMBOL as weak undefined symbol (resolved to 0 if not defined). > */ > # define weak_extern(symbol) _weak_extern (weak symbol) > @@ -423,7 +428,8 @@ FIXME! - ? > # define __hidden_asmname2(prefix, name) #prefix name > # define __hidden_ver1(local, internal, name) \ > extern __typeof (name) __EI_##name __asm__(__hidden_asmname > (#internal)); \ > - extern __typeof (name) __EI_##name __attribute__((alias > (__hidden_asmname1 (,#local)))) > + extern __typeof (name) __EI_##name __attribute__((alias > (__hidden_asmname1 (,#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); > diff --git a/include/sys/cdefs.h b/include/sys/cdefs.h > index a4359a05c..5c4daebcd 100644 > --- a/include/sys/cdefs.h > +++ b/include/sys/cdefs.h > @@ -330,6 +330,17 @@ > # endif > #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 > + > + > /* GCC 4.3 and above allow passing all anonymous arguments of an > __extern_always_inline function to some other vararg function. */ > #if __GNUC_PREREQ (4,3) > -- > 2.17.1 > > _______________________________________________ > devel mailing list > [email protected] > https://mailman.uclibc-ng.org/cgi-bin/mailman/listinfo/devel > _______________________________________________ devel mailing list [email protected] https://mailman.uclibc-ng.org/cgi-bin/mailman/listinfo/devel
