summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog17
-rw-r--r--Makeconfig12
-rw-r--r--Makefile14
-rw-r--r--include/stub-tag.h7
-rw-r--r--include/stubs-biarch.h12
-rw-r--r--shlib-versions1
6 files changed, 56 insertions, 7 deletions
diff --git a/ChangeLog b/ChangeLog
index af6789bc43..2be28bacb5 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,22 @@
 2005-02-11  Roland McGrath  <roland@redhat.com>
 
+	[BZ #715]
+	* Makefile (installed-stubs): New variable.
+	Set to $(inst_includedir)/gnu/stubs.h if $(biarch) is no,
+	or to $(inst_includedir)/gnu/stubs-$(biarch).h if otherwise.
+	[$(biarch) != no] (install-others-nosubdir): Add $(installed-stubs).
+	($(inst_includedir)/gnu/stubs.h): Use $(installed-stubs) for this
+	rule's target.
+	($(inst_includedir)/gnu/stubs.h): New target, install from ...
+	* include/stubs-biarch.h: New file.
+
+	* shlib-versions (i.86-.*-.*): Add WORDSIZE64 line mapping to x86_64.
+
+	* Makeconfig ($(common-objpfx)soversions.mk): Depend on Makeconfig.
+	Emit defn for variable `biarch'.
+
+	* include/stub-tag.h: Update comment.
+
 	* scripts/soversions.awk: Fix default version set handling.
 
 2005-02-10  Roland McGrath  <roland@redhat.com>
diff --git a/Makeconfig b/Makeconfig
index 306053241d..4c3a4e344c 100644
--- a/Makeconfig
+++ b/Makeconfig
@@ -792,8 +792,10 @@ $(common-objpfx)soversions.i: $(..)scripts/soversions.awk \
 	       -v os='$(config-os)' \
 	       -f $^ > $@T
 	mv -f $@T $@
-$(common-objpfx)soversions.mk: $(common-objpfx)soversions.i
-	(while read which lib number setname; do \
+$(common-objpfx)soversions.mk: $(common-objpfx)soversions.i $(..)Makeconfig
+	(seen_DEFAULT=0; seen_WORDSIZE32=0; seen_WORDSIZE64=0; \
+	 while read which lib number setname; do \
+	   eval seen_$$which=1; \
 	   test x"$$which" = xDEFAULT || continue; \
 	   case $$number in \
 	     [0-9]*) echo "$$lib.so-version=.$$number"; \
@@ -802,6 +804,12 @@ $(common-objpfx)soversions.mk: $(common-objpfx)soversions.i
 		     echo "all-sonames+=$$lib=\$$($$lib.so-version)";;\
 	   esac; \
 	 done; \
+	 case "$$seen_DEFAULT$$seen_WORDSIZE32$$seen_WORDSIZE64" in \
+	   100) echo biarch = no;; \
+	   101) echo biarch = 32;; \
+	   ?1?) echo biarch = 64;; \
+	   *) echo >&2 BUG; exit 2;; \
+	 esac; \
 	 echo soversions.mk-done = t;) < $< > $@T; exit 0
 	mv -f $@T $@
 endif
diff --git a/Makefile b/Makefile
index c2f4ae32a5..dc7a6f177a 100644
--- a/Makefile
+++ b/Makefile
@@ -157,13 +157,25 @@ others: $(common-objpfx)testrun.sh
 
 subdir-stubs := $(foreach dir,$(subdirs),$(common-objpfx)$(dir)/stubs)
 
+ifeq ($(biarch),no)
+installed-stubs = $(inst_includedir)/gnu/stubs.h
+else
+installed-stubs = $(inst_includedir)/gnu/stubs-$(biarch).h
+
+$(inst_includedir)/gnu/stubs.h: include/stubs-biarch.h $(+force)
+	$(INSTALL_DATA) $< $@
+
+install-others-nosubdir: $(installed-stubs)
+endif
+
+
 # Since stubs.h is never needed when building the library, we simplify the
 # hairy installation process by producing it in place only as the last part
 # of the top-level `make install'.  It depends on subdir_install, which
 # iterates over all the subdirs; subdir_install in each subdir depends on
 # the subdir's stubs file.  Having more direct dependencies would result in
 # extra iterations over the list for subdirs and many recursive makes.
-$(inst_includedir)/gnu/stubs.h: include/stubs-prologue.h subdir_install
+$(installed-stubs): include/stubs-prologue.h subdir_install
 	$(make-target-directory)
 	@rm -f $(objpfx)stubs.h
 	(sed '/^@/d' $<; LC_ALL=C sort $(subdir-stubs)) > $(objpfx)stubs.h
diff --git a/include/stub-tag.h b/include/stub-tag.h
index 3004d6f429..d4d10c8341 100644
--- a/include/stub-tag.h
+++ b/include/stub-tag.h
@@ -1,5 +1,4 @@
 /* This header is included into every file that declares a stub function.
- * The build process looks for this header in .d files to decide whether
- * or not it needs to scan the corresponding .c file for entries to add to
- * <gnu/stubs.h>.
- */
+   It is obsolete now, but hasn't died to avoid removing all those
+   #include's.  Every such file should use the `stub_warning' macro for
+   each of its functions, and that is sufficient.  */
diff --git a/include/stubs-biarch.h b/include/stubs-biarch.h
new file mode 100644
index 0000000000..fc086bd894
--- /dev/null
+++ b/include/stubs-biarch.h
@@ -0,0 +1,12 @@
+/* This file selects the right generated file of `__stub_FUNCTION' macros
+   based on the architecture being compiled for.  */
+
+#include <bits/wordsize.h>
+
+#if __WORDSIZE == 32
+# include <gnu/stubs-32.h>
+#elif __WORDSIZE == 64
+# include <gnu/stubs-64.h>
+#else
+# error "unexpected value for __WORDSIZE macro"
+#endif
diff --git a/shlib-versions b/shlib-versions
index aaeb9669b2..58e923e717 100644
--- a/shlib-versions
+++ b/shlib-versions
@@ -35,6 +35,7 @@ powerpc64-.*-linux.*	DEFAULT			GLIBC_2.3
 # Configuration		WORDSIZE[32|64]		Alternate configuration
 # -------------		----------		-----------------------
 x86_64-.*-.*		WORDSIZE32		i686-@VENDOR@-@OS@
+i.86-.*-.*		WORDSIZE64		x86_64-@VENDOR@-@OS@
 s390x-.*-.*		WORDSIZE32		s390-@VENDOR@-@OS@
 s390-.*-.*		WORDSIZE64		s390x-@VENDOR@-@OS@
 powerpc64-.*-.*		WORDSIZE32		powerpc-@VENDOR@-@OS@