diff options
-rw-r--r-- | ChangeLog | 12 | ||||
-rw-r--r-- | Makerules | 6 | ||||
-rw-r--r-- | include/libc-symbols.h | 15 |
3 files changed, 26 insertions, 7 deletions
@@ -1,3 +1,15 @@ +2003-04-29 Roland McGrath <roland@redhat.com> + + * configure.in: Search for AUTOCONF unconditionally. + Just don't complain about missing it under --without-cvs. + * configure: Regenerated. + + * include/libc-symbols.h (__symbol_set_attribute): New macro, + give hidden for [SHARED] and weak for [! SHARED]. + (symbol_set_declare): Use that. Never need weak_extern these days. + * Makerules ($(common-objpfx)shlib.lds): Go back to using PROVIDE. + Depend on $(..)Makerules. + 2003-04-29 Ulrich Drepper <drepper@redhat.com> * sysdeps/unix/sysv/linux/ifaddrs.c (getifaddrs): Use __ protected @@ -511,7 +511,7 @@ endif ifeq (yes,$(elf)) # binutils only position loadable notes into the first page for binaries, # not for shared objects -$(common-objpfx)shlib.lds: $(common-objpfx)config.make +$(common-objpfx)shlib.lds: $(common-objpfx)config.make $(..)Makerules $(LINK.o) -shared -Wl,-O1 \ $(sysdep-LDFLAGS) $(config-LDFLAGS) $(LDFLAGS.so) \ -Wl,--verbose 2>&1 | \ @@ -519,9 +519,9 @@ $(common-objpfx)shlib.lds: $(common-objpfx)config.make -e '/^=========/,/^=========/!d;/^=========/d' \ -e 's/^.*\.hash[ ]*:.*$$/ .note.ABI-tag : { *(.note.ABI-tag) } &/' \ -e 's/^.*\*(\.dynbss).*$$/& \ - __start___libc_freeres_ptrs = .; \ + PROVIDE(__start___libc_freeres_ptrs = .); \ *(__libc_freeres_ptrs) \ - __stop___libc_freeres_ptrs = .;/' + PROVIDE(__stop___libc_freeres_ptrs = .);/' mv -f $@T $@ common-generated += shlib.lds diff --git a/include/libc-symbols.h b/include/libc-symbols.h index c4bd02835e..79add73307 100644 --- a/include/libc-symbols.h +++ b/include/libc-symbols.h @@ -345,11 +345,18 @@ be able to use the set's contents. */ # define symbol_set_define(set) symbol_set_declare(set) -/* Declare SET for use in this module, if defined in another module. */ +/* Declare SET for use in this module, if defined in another module. + In a shared library, this is always local to that shared object. + For static linking, the set might be wholly absent and so we use + weak references. */ # define symbol_set_declare(set) \ - extern void *const __start_##set __attribute__ ((__weak__)); \ - extern void *const __stop_##set __attribute__ ((__weak__)); \ - weak_extern (__start_##set) weak_extern (__stop_##set) + extern void *const __start_##set __symbol_set_attribute; \ + extern void *const __stop_##set __symbol_set_attribute; +# ifdef SHARED +# define __symbol_set_attribute attribute_hidden +# else +# define __symbol_set_attribute __attribute__ ((weak)) +# endif /* Return a pointer (void *const *) to the first element of SET. */ # define symbol_set_first_element(set) (&__start_##set) |