On 05/07/2013 02:18 AM, Bernhard Reutner-Fischer wrote: > On 6 May 2013 08:08:15 Vineet Gupta <[email protected]> wrote: >> Ping ? Any comments on this - it fixes a real issue - across arches ! >> >> -Vineet >> >> On 04/24/2013 03:27 PM, Vineet Gupta wrote: >> > This reverts commit 91450a8a3b3112066fd6d266a6c492365c9d8d61. >> > There's a namespace collision for config_{open,close,read} functions >> > between uClibc and Busybox. Callers in uClibc and busybox need to call >> > their local variants. In case of static linking, both the variants need >> > to be pulled in the final executable. >> > Turns out that the existing hidden attribute is not enough for static >> > linked Busybox where only it's local copy is included in the final link. >> > Thus causing the uClibc callers to crap out at runtime. >> > This can be fixed by restoring the libc_hidden_proto() annotation >> > which causes the libc variants to be aliased with __GI_ prefix and >> > makign both the symbols be available and properly referenced in the >> > final link. >> > This issue was found with ARC gcc 4.8 + uClibc trunk. >> > I can confirm the same thing with ARM uClibc buildroot build (when >> > switching to uClibc daily snapshot). >> > All the credit for debugging the issue goes to Anton,Joern and Jeremy - >> > I simply found the cure :-) >> > Signed-off-by: Vineet Gupta <[email protected]> >> > Cc: Anton Kolesov <[email protected]> >> > Cc: Jeremy Bennett <[email protected]> >> > Cc: Joern Rennecke <[email protected]> >> > Cc: Bernhard Reutner-Fischer <[email protected]> >> > Cc: [email protected] >> > --- >> > include/internal/parse_config.h | 3 +++ >> > libc/misc/internals/parse_config.c | 6 +++--- >> > 2 files changed, 6 insertions(+), 3 deletions(-) >> > diff --git a/include/internal/parse_config.h >> > b/include/internal/parse_config.h >> > index 69be0cb..ebfb87e 100644 >> > --- a/include/internal/parse_config.h >> > +++ b/include/internal/parse_config.h >> > @@ -46,9 +46,12 @@ typedef struct parser_t { >> > } parser_t; >> > parser_t* config_open(const char *filename) FAST_FUNC attribute_hidden; >> > +libc_hidden_proto(config_open) >> > int config_read(parser_t *parser, char ***tokens, unsigned flags, const >> > char >> *delims) FAST_FUNC attribute_hidden; >> > +libc_hidden_proto(config_read) >> > #define config_read(parser, tokens, max, min, str, flags) \ >> > config_read(parser, tokens, ((flags) | (((min) & 0xFF) << 8) | ((max) >> > & >> 0xFF)), str) >> > void config_close(parser_t *parser) FAST_FUNC attribute_hidden; >> > +libc_hidden_proto(config_close) >> > #endif /* __INTERNAL_PARSE_CONFIG_H */ >> > diff --git a/libc/misc/internals/parse_config.c >> b/libc/misc/internals/parse_config.c >> > index b79b7a0..4d21b5e 100644 >> > --- a/libc/misc/internals/parse_config.c >> > +++ b/libc/misc/internals/parse_config.c >> > @@ -129,7 +129,7 @@ static __always_inline parser_t * FAST_FUNC >> config_open2(const char *filename, >> > return parser; >> > } >> > -parser_t * FAST_FUNC config_open(const char *filename) >> > +parser_t attribute_hidden * FAST_FUNC config_open(const char *filename) > > This attribute_hidden should not be resurrected.
Is this because uClibc convention is to specify this only with prototypes which is already being done. -Vineet _______________________________________________ uClibc mailing list [email protected] http://lists.busybox.net/mailman/listinfo/uclibc
