]> git.ipfire.org Git - thirdparty/glibc.git/commitdiff
Fix erroneous (and circular) implied pattern rule for linkobj/libc.so.
authorBrooks Moses <bmoses@google.com>
Tue, 18 Feb 2014 17:18:44 +0000 (11:18 -0600)
committerAdhemerval Zanella <azanella@linux.vnet.ibm.com>
Tue, 18 Feb 2014 17:18:44 +0000 (11:18 -0600)
[BZ #15915] As described in the bug, the pattern rule for lib%.so files
in Makerules includes linkobj/libc.so as a dependency.  However, the
explicit rule for linkobj/libc.so is in the top-level Makefile.

Thus, the subdirectory makefiles that include Makerules end up with an
erroneous makefile pattern rule for linkobj/libc.so that includes
itself as a dependency.  The result is make warnings whenever rules
for other .so files are resolved -- and, on occasion, actual makefile
failures when a race condition causes the implicit rule to actually be
used.

This patch moves the explicit rules for linkobj/libc.so into Makerules
to clear up this problem.  It also elaborates a couple of comments
that I'd initially found confusing.

Backport of 5f855e3598a576c35e54623a13b256f3e87fcd4d

ChangeLog
Makefile
Makerules
NEWS

index 0afa5ca78bd506308283ed8907697c4de9ff73b6..c448dda711a7fdeb884e585276dbda031b07b375 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,9 @@
+2014-02-18  Brooks Moses  <bmoses@google.com>
+
+       [BZ #15915]
+       * Makefile (linkobj/libc_pic.a, linkobj/libc.so): Move rules to...
+       * Makerules: ...here, and adjust associated comments.
+
 2014-02-06  Adhemerval Zanella  <azanella@linux.vnet.ibm.com>
 
        * sysdeps/powerpc/powerpc64/power5/Implies: Remove inexistent
index 7d8eccf2e56874f2e9901e136c067abcb0c808d2..00e4394399768f1cc94aeaf54f49c43b200ba95a 100644 (file)
--- a/Makefile
+++ b/Makefile
@@ -123,30 +123,7 @@ lib-noranlib: subdir_lib
 
 ifeq (yes,$(build-shared))
 # Build the shared object from the PIC object library.
-lib: $(common-objpfx)libc.so
-
-lib: $(common-objpfx)linkobj/libc.so
-
-# Do not filter ld.so out of libc.so link.
-$(common-objpfx)linkobj/libc.so: link-libc-deps = # empty
-
-$(common-objpfx)linkobj/libc.so: $(elfobjdir)/soinit.os \
-                                $(common-objpfx)linkobj/libc_pic.a \
-                                $(elfobjdir)/sofini.os \
-                                $(elfobjdir)/interp.os \
-                                $(elfobjdir)/ld.so \
-                                $(shlib-lds)
-       $(build-shlib)
-
-$(common-objpfx)linkobj/libc_pic.a: $(common-objpfx)libc_pic.a \
-                                   $(common-objpfx)sunrpc/librpc_compat_pic.a
-       $(..)./scripts/mkinstalldirs $(common-objpfx)linkobj
-       (cd $(common-objpfx)linkobj; \
-        $(AR) x ../libc_pic.a; \
-        rm $$($(AR) t ../sunrpc/librpc_compat_pic.a | sed 's/^compat-//'); \
-        $(AR) x ../sunrpc/librpc_compat_pic.a; \
-        $(AR) cr libc_pic.a *.os; \
-        rm *.os)
+lib: $(common-objpfx)libc.so $(common-objpfx)linkobj/libc.so
 endif
 
 
index bd8642a47009a1d5da2018d2f5af2e21640ca65e..8ed458f94b03c558eac6754db4c0dc2008ea1d3e 100644 (file)
--- a/Makerules
+++ b/Makerules
@@ -565,16 +565,47 @@ generated += libc_pic.opts libc_pic.os.clean
 libc_pic_clean := .clean
 endif
 
-# Do not filter ld.so out of libc.so link.
+# Build a possibly-modified version of libc_pic.a for use in building
+# linkobj/libc.so.
+ifeq (,$(filter sunrpc,$(subdirs)))
+$(common-objpfx)linkobj/libc_pic.a: $(common-objpfx)libc_pic.a
+       $(make-target-directory)
+       ln -f $< $@
+else
+$(common-objpfx)linkobj/libc_pic.a: $(common-objpfx)libc_pic.a \
+                                   $(common-objpfx)sunrpc/librpc_compat_pic.a
+       $(make-target-directory)
+       (cd $(common-objpfx)linkobj; \
+        $(AR) x ../libc_pic.a; \
+        rm $$($(AR) t ../sunrpc/librpc_compat_pic.a | sed 's/^compat-//'); \
+        $(AR) x ../sunrpc/librpc_compat_pic.a; \
+        $(AR) cr libc_pic.a *.os; \
+        rm *.os)
+endif # $(subdirs) contains sunrpc
+
+# Clear link-libc-deps for the libc.so libraries so build-shlibs does not
+# filter ld.so out of the list of linked objects.
 $(common-objpfx)libc.so: link-libc-deps = # empty
+$(common-objpfx)linkobj/libc.so: link-libc-deps = # empty
 
-# Use our own special initializer and finalizer files for libc.so.
+# Use our own special initializer and finalizer files for the libc.so
+# libraries.
 $(common-objpfx)libc.so: $(elfobjdir)/soinit.os \
                         $(common-objpfx)libc_pic.os$(libc_pic_clean) \
                         $(elfobjdir)/sofini.os \
-                        $(elfobjdir)/interp.os $(elfobjdir)/ld.so \
+                        $(elfobjdir)/interp.os \
+                        $(elfobjdir)/ld.so \
+                        $(shlib-lds)
+       $(build-shlib)
+
+$(common-objpfx)linkobj/libc.so: $(elfobjdir)/soinit.os \
+                        $(common-objpfx)linkobj/libc_pic.a \
+                        $(elfobjdir)/sofini.os \
+                        $(elfobjdir)/interp.os \
+                        $(elfobjdir)/ld.so \
                         $(shlib-lds)
        $(build-shlib)
+
 ifeq ($(versioning),yes)
 $(common-objpfx)libc.so: $(common-objpfx)libc.map
 endif
diff --git a/NEWS b/NEWS
index 5c2f07ac0672e45b64e9f69a2061c6a94d3714ba..96df7a960a796dc0a5f75f0f67356f139a9d3cbd 100644 (file)
--- a/NEWS
+++ b/NEWS
@@ -10,8 +10,8 @@ Version 2.18.1
 * The following bugs are resolved with this release:
 
   14143, 14155, 14547, 14699, 15532, 15427, 15522, 15680, 15723, 15734,
-  15735, 15797, 15892, 15895, 15909, 15917, 15996, 16072, 16150, 16414,
-  16430, 16431.
+  15735, 15797, 15892, 15895, 15909, 15915, 15917, 15996, 16072, 16150,
+  16414, 16430, 16431.
 
 * Support for powerpc64le has been added.