summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorVineet Gupta <Vineet.Gupta1@synopsys.com>2013-05-30 14:27:33 +0530
committerBernhard Reutner-Fischer <rep.dot.nop@gmail.com>2013-06-07 12:44:01 +0200
commit588d35799af4b932de0df47bcdc2570103eecc1c (patch)
tree2ed8172418506fb1cc7a669b872ee4bec89cd1d4
parent215c2868aca096364a4725a42c3ffb46dc4e8b39 (diff)
Reinstate hidden protos for config_{open,close,read}()
Partially reverts "parser_config.[ch]: remove duplicated hidden functions" 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 the linker treats these symbols as duplicate and pulls in only the local (Busybox's own) variants in the final link. This obviously causes 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 thus making both the symbols distinct from linker's perspective. 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 <vgupta@synopsys.com> Cc: Anton Kolesov <akolesov@synopsys.com> Cc: Jeremy Bennett <jeremy.bennett@embecosm.com> Cc: Joern Rennecke <joern.rennecke@embecosm.com> Cc: Bernhard Reutner-Fischer <rep.dot.nop@gmail.com> Cc: Peter S. Mazinger <ps.m@gmx.net> Signed-off-by: Bernhard Reutner-Fischer <rep.dot.nop@gmail.com>
-rw-r--r--include/internal/parse_config.h3
1 files changed, 3 insertions, 0 deletions
diff --git a/include/internal/parse_config.h b/include/internal/parse_config.h
index 69be0cbca..ebfb87e5f 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 */