about summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog12
-rw-r--r--Makerules6
-rw-r--r--include/libc-symbols.h15
3 files changed, 26 insertions, 7 deletions
diff --git a/ChangeLog b/ChangeLog
index d47b2e5655..6f8c41661e 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -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
diff --git a/Makerules b/Makerules
index 0929e6e92c..d855ae344c 100644
--- a/Makerules
+++ b/Makerules
@@ -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)