Fix erroneous (and circular) implied pattern rule for linkobj/libc.so.
[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.
This commit is contained in:
parent
b7f2d27dbd
commit
5f855e3598
|
@ -1,3 +1,9 @@
|
||||||
|
2013-10-03 Brooks Moses <bmoses@google.com>
|
||||||
|
|
||||||
|
[BZ #15915]
|
||||||
|
* Makefile (linkobj/libc_pic.a, linkobj/libc.so): Move rules to...
|
||||||
|
* Makerules: ...here, and adjust associated comments.
|
||||||
|
|
||||||
2013-10-02 Will Newton <will.newton@linaro.org>
|
2013-10-02 Will Newton <will.newton@linaro.org>
|
||||||
|
|
||||||
* malloc/Makefile: Add tst-pvalloc.
|
* malloc/Makefile: Add tst-pvalloc.
|
||||||
|
|
31
Makefile
31
Makefile
|
@ -123,36 +123,7 @@ lib-noranlib: subdir_lib
|
||||||
|
|
||||||
ifeq (yes,$(build-shared))
|
ifeq (yes,$(build-shared))
|
||||||
# Build the shared object from the PIC object library.
|
# Build the shared object from the PIC object library.
|
||||||
lib: $(common-objpfx)libc.so
|
lib: $(common-objpfx)libc.so $(common-objpfx)linkobj/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)
|
|
||||||
|
|
||||||
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
|
|
||||||
endif # $(build-shared)
|
endif # $(build-shared)
|
||||||
|
|
||||||
|
|
||||||
|
|
39
Makerules
39
Makerules
|
@ -565,16 +565,47 @@ generated += libc_pic.opts libc_pic.os.clean
|
||||||
libc_pic_clean := .clean
|
libc_pic_clean := .clean
|
||||||
endif
|
endif
|
||||||
|
|
||||||
# Do not filter ld.so out of libc.so link.
|
# Build a possibly-modified version of libc_pic.a for use in building
|
||||||
$(common-objpfx)libc.so: link-libc-deps = # empty
|
# 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
|
||||||
|
|
||||||
# Use our own special initializer and finalizer files for libc.so.
|
# 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 the libc.so
|
||||||
|
# libraries.
|
||||||
$(common-objpfx)libc.so: $(elfobjdir)/soinit.os \
|
$(common-objpfx)libc.so: $(elfobjdir)/soinit.os \
|
||||||
$(common-objpfx)libc_pic.os$(libc_pic_clean) \
|
$(common-objpfx)libc_pic.os$(libc_pic_clean) \
|
||||||
$(elfobjdir)/sofini.os \
|
$(elfobjdir)/sofini.os \
|
||||||
$(elfobjdir)/interp.os $(elfobjdir)/ld.so \
|
$(elfobjdir)/interp.os \
|
||||||
|
$(elfobjdir)/ld.so \
|
||||||
$(shlib-lds)
|
$(shlib-lds)
|
||||||
$(build-shlib)
|
$(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 ($(build-shared),yes)
|
ifeq ($(build-shared),yes)
|
||||||
$(common-objpfx)libc.so: $(common-objpfx)libc.map
|
$(common-objpfx)libc.so: $(common-objpfx)libc.map
|
||||||
endif
|
endif
|
||||||
|
|
Loading…
Reference in a new issue