| Required to get access to _rtld_global_ro@@GLIBC_PRIVATE |
| since it's only available from ld.so. |
| |
| commit fab7ce3f5b4060bf62659e8b58529de4156b5a2f |
| Author: Joseph Myers <joseph@codesourcery.com> |
| Date: Fri May 31 16:16:33 2013 +0000 |
| |
| Link extra-libs consistently with libc and ld.so. |
| |
| |
| |
| |
| |
| @@ -127,6 +127,9 @@ 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 \ |
| |
| |
| |
| |
| @@ -470,9 +470,10 @@ link-libc-deps = $(common-objpfx)libc.so |
| # This must come after the installation rules so Make doesn't try to |
| # build shared libraries in place from the installed *_pic.a files. |
| # $(LDLIBS-%.so) may contain -l switches to generate run-time dependencies |
| -# on other shared objects. |
| -lib%.so: lib%_pic.a $(+preinit) $(+postinit) |
| - $(build-shlib) |
| +# on other shared objects. The linking with libc and ld.so is intended |
| +# to be as similar as possible to a default link with an installed libc. |
| +lib%.so: lib%_pic.a $(+preinit) $(+postinit) $(+interp) $(link-libc-deps) |
| + $(build-shlib) $(link-libc-args) |
| |
| define build-shlib-helper |
| $(LINK.o) -shared $(static-libgcc) -Wl,-O1 $(sysdep-LDFLAGS) \ |
| @@ -558,7 +559,8 @@ endef |
| |
| build-module-helper-objlist = \ |
| $(patsubst %_pic.a,$(whole-archive) %_pic.a $(no-whole-archive),\ |
| - $(filter-out %.lds $(map-file) $(+preinit) $(+postinit),$^)) |
| + $(filter-out %.lds $(map-file) $(+preinit) $(+postinit) \ |
| + $(link-libc-deps),$^)) |
| |
| build-module-objlist = $(build-module-helper-objlist) $(LDLIBS-$(@F:%.so=%).so) |
| build-shlib-objlist = $(build-module-helper-objlist) \ |
| @@ -601,6 +603,9 @@ generated += libc_pic.opts libc_pic.os.c |
| libc_pic_clean := .clean |
| endif |
| |
| +# Do not filter ld.so out of libc.so link. |
| +$(common-objpfx)libc.so: link-libc-deps = # empty |
| + |
| # Use our own special initializer and finalizer files for libc.so. |
| $(common-objpfx)libc.so: $(elfobjdir)/soinit.os \ |
| $(common-objpfx)libc_pic.os$(libc_pic_clean) \ |
| @@ -660,8 +665,7 @@ include $(patsubst %,$(..)extra-modules. |
| |
| extra-modules-build := $(filter-out $(modules-names-nobuild),$(modules-names)) |
| $(extra-modules-build:%=$(objpfx)%.so): $(objpfx)%.so: \ |
| - $(objpfx)%.os $(shlib-lds) \ |
| - $(common-objpfx)libc.so $(common-objpfx)libc_nonshared.a |
| + $(objpfx)%.os $(shlib-lds) $(link-libs-deps) |
| $(build-module) |
| endif |
| |
| |
| |
| |
| |
| @@ -72,8 +72,3 @@ endif |
| ifeq (yes,$(build-bounded)) |
| $(tests:%=$(objpfx)%-bp): $(objpfx)libcrypt_b.a |
| endif |
| - |
| -# Depend on libc.so so a DT_NEEDED is generated in the shared objects. |
| -# This ensures they will load libc.so for needed symbols if loaded by |
| -# a statically-linked program that hasn't already loaded it. |
| -$(objpfx)libcrypt.so: $(common-objpfx)libc.so $(common-objpfx)libc_nonshared.a |
| |
| |
| |
| |
| @@ -159,13 +159,3 @@ $(objpfx)xtrace: xtrace.sh |
| -e 's|@PKGVERSION@|$(PKGVERSION)|' \ |
| -e 's|@REPORT_BUGS_TO@|$(REPORT_BUGS_TO)|' $^ > $@.new \ |
| && rm -f $@ && mv $@.new $@ && chmod +x $@ |
| - |
| -# Depend on libc.so so a DT_NEEDED is generated in the shared objects. |
| -# This ensures they will load libc.so for needed symbols if loaded by |
| -# a statically-linked program that hasn't already loaded it. |
| -$(objpfx)libSegFault.so: $(common-objpfx)libc.so \ |
| - $(common-objpfx)libc_nonshared.a \ |
| - $(elf-objpfx)$(rtld-installed-name) |
| -$(objpfx)libpcprofile.so: $(common-objpfx)libc.so \ |
| - $(common-objpfx)libc_nonshared.a \ |
| - $(elf-objpfx)$(rtld-installed-name) |
| |
| |
| |
| |
| @@ -117,16 +117,9 @@ $(objpfx)bug-atexit1.out: $(objpfx)bug-a |
| $(objpfx)bug-atexit2: $(libdl) |
| $(objpfx)bug-atexit2.out: $(objpfx)bug-atexit2-lib.so |
| |
| -LDLIBS-bug-atexit3-lib.so = -lstdc++ -lgcc_eh $(elfobjdir)/ld.so \ |
| - $(common-objpfx)libc_nonshared.a |
| +LDLIBS-bug-atexit3-lib.so = -lstdc++ -lgcc_eh |
| $(objpfx)bug-atexit3: $(libdl) |
| $(objpfx)bug-atexit3.out: $(objpfx)bug-atexit3-lib.so |
| |
| $(objpfx)tst-rec-dlopen: $(libdl) |
| $(objpfx)tst-rec-dlopen.out: $(objpfx)moddummy1.so $(objpfx)moddummy2.so |
| - |
| -# Depend on libc.so so a DT_NEEDED is generated in the shared objects. |
| -# This ensures they will load libc.so for needed symbols if loaded by |
| -# a statically-linked program that hasn't already loaded it. |
| -$(objpfx)libdl.so: $(common-objpfx)libc.so $(common-objpfx)libc_nonshared.a \ |
| - $(elfobjdir)/ld.so |
| |
| |
| |
| |
| @@ -33,12 +33,7 @@ libnss_hesiod-inhibit-o = $(filter-out . |
| |
| include ../Rules |
| |
| -# Depend on libc.so so a DT_NEEDED is generated in the shared objects. |
| -# This ensures they will load libc.so for needed symbols if loaded by |
| -# a statically-linked program that hasn't already loaded it. |
| -# The Hesiod NSS modules also needs the resolver and some help from |
| +# The Hesiod NSS module also needs the resolver and some help from |
| # the file service. |
| $(objpfx)libnss_hesiod.so: $(common-objpfx)resolv/libresolv.so \ |
| - $(common-objpfx)nss/libnss_files.so \ |
| - $(common-objpfx)libc.so \ |
| - $(common-objpfx)libc_nonshared.a |
| + $(common-objpfx)nss/libnss_files.so |
| |
| |
| |
| |
| @@ -4,16 +4,9 @@ extra-modules-left := $(strip $(filter-o |
| extra-objs := $(extra-objs) $(patsubst %,%.os,$($(mod)-routines)) |
| |
| $(objpfx)$(mod).so: $(addprefix $(objpfx),$(addsuffix .os,$($(mod)-routines)))\ |
| - $(shlib-lds) |
| + $(shlib-lds) $(link-libc-deps) |
| $(build-module-asneeded) |
| |
| -# Depend on libc.so so a DT_NEEDED is generated in the shared objects. |
| -# This ensures they will load libc.so for needed symbols if loaded by |
| -# a statically-linked program that hasn't already loaded it. |
| -$(objpfx)$(mod).so: $(common-objpfx)libc.so \ |
| - $(common-objpfx)/elf/ld.so \ |
| - $(common-objpfx)libc_nonshared.a |
| - |
| ifneq (,$(extra-modules-left)) |
| include extra-module.mk |
| endif |
| |
| |
| |
| |
| @@ -33,5 +33,3 @@ include $(..)Makeconfig |
| libcidn-inhibit-o = $(filter-out .os,$(object-suffixes)) |
| |
| include $(..)Rules |
| - |
| -$(objpfx)libcidn.so: $(common-objpfx)libc.so $(common-objpfx)libc_nonshared.a |
| |
| |
| |
| |
| @@ -99,9 +99,3 @@ cpp-srcs-left := $(localedef-modules) $( |
| $(lib-modules) |
| lib := locale-programs |
| include $(patsubst %,$(..)cppflags-iterator.mk,$(cpp-srcs-left)) |
| - |
| -# Depend on libc.so so a DT_NEEDED is generated in the shared objects. |
| -# This ensures they will load libc.so for needed symbols if loaded by |
| -# a statically-linked program that hasn't already loaded it. |
| -$(objpfx)libBrokenLocale.so: $(common-objpfx)libc.so \ |
| - $(common-objpfx)libc_nonshared.a |
| |
| |
| |
| |
| @@ -76,8 +76,3 @@ endif |
| $(inst_libexecdir)/pt_chown: $(objpfx)pt_chown $(+force) |
| $(make-target-directory) |
| -$(INSTALL_PROGRAM) -m 4755 -o root $< $@ |
| - |
| -# Depend on libc.so so a DT_NEEDED is generated in the shared objects. |
| -# This ensures they will load libc.so for needed symbols if loaded by |
| -# a statically-linked program that hasn't already loaded it. |
| -$(objpfx)libutil.so: $(common-objpfx)libc.so $(common-objpfx)libc_nonshared.a |
| |
| |
| |
| |
| @@ -151,7 +151,7 @@ $(objpfx)memusage: memusage.sh |
| |
| |
| # The implementation uses `dlsym' |
| -$(objpfx)libmemusage.so: $(common-objpfx)dlfcn/libdl.so $(elfobjdir)/ld.so |
| +$(objpfx)libmemusage.so: $(common-objpfx)dlfcn/libdl.so |
| |
| # Extra dependencies |
| $(foreach o,$(all-object-suffixes),$(objpfx)malloc$(o)): arena.c hooks.c |
| |
| |
| |
| |
| @@ -203,8 +203,3 @@ gmp-objs = $(patsubst %,$(common-objpfx) |
| $(objpfx)atest-exp: $(gmp-objs) |
| $(objpfx)atest-sincos: $(gmp-objs) |
| $(objpfx)atest-exp2: $(gmp-objs) |
| - |
| -# Depend on libc.so so a DT_NEEDED is generated in the shared objects. |
| -# This ensures they will load libc.so for needed symbols if loaded by |
| -# a statically-linked program that hasn't already loaded it. |
| -$(objpfx)libm.so: $(common-objpfx)libc.so $(common-objpfx)libc_nonshared.a |
| |
| |
| |
| |
| @@ -77,12 +77,12 @@ $(objpfx)libnss_nis.so: $(objpfx)libnsl. |
| $(common-objpfx)nss/libnss_files.so |
| $(objpfx)libnss_nisplus.so: $(objpfx)libnsl.so$(libnsl.so-version) |
| |
| -# Depend on libc.so so a DT_NEEDED is generated in the shared objects. |
| -# This ensures they will load libc.so for needed symbols if loaded by |
| -# a statically-linked program that hasn't already loaded it. |
| libnsl-libc = $(common-objpfx)linkobj/libc.so |
| -$(services:%=$(objpfx)libnss_%.so) $(objpfx)libnsl.so: $(libnsl-libc) \ |
| - $(common-objpfx)libc_nonshared.a |
| +# Target-specific variable setting to link objects using deprecated |
| +# RPC interfaces with the version of libc.so that makes them available |
| +# for new links: |
| +$(services:%=$(objpfx)libnss_%.so) $(objpfx)libnsl.so: \ |
| + libc-for-link = $(libnsl-libc) |
| |
| |
| ifeq ($(build-shared),yes) |
| |
| |
| |
| |
| @@ -530,14 +530,6 @@ $(objpfx)libpthread.so: $(addprefix $(ob |
| $(objpfx)libpthread.so: +preinit += $(addprefix $(objpfx),$(crti-objs)) |
| $(objpfx)libpthread.so: +postinit += $(addprefix $(objpfx),$(crtn-objs)) |
| |
| -# Depend on libc.so so a DT_NEEDED is generated in the shared objects. |
| -# This ensures they will load libc.so for needed symbols if loaded by |
| -# a statically-linked program that hasn't already loaded it. |
| -# Depend on ld.so too to get proper versions of ld.so symbols. |
| -$(objpfx)libpthread.so: $(common-objpfx)libc.so \ |
| - $(common-objpfx)libc_nonshared.a \ |
| - $(elfobjdir)/ld.so |
| - |
| # Make sure we link with the thread library. |
| ifeq ($(build-shared),yes) |
| $(addprefix $(objpfx), \ |
| |
| |
| |
| |
| @@ -51,12 +51,6 @@ libthread_db.so-no-z-defs = yes |
| |
| include ../Rules |
| |
| -# Depend on libc.so so a DT_NEEDED is generated in the shared objects. |
| -# This ensures they will load libc.so for needed symbols if loaded by |
| -# a statically-linked program that hasn't already loaded it. |
| -$(objpfx)libthread_db.so: $(common-objpfx)libc.so \ |
| - $(common-objpfx)libc_nonshared.a |
| - |
| tests: $(objpfx)db-symbols.out |
| $(objpfx)db-symbols.out: $(objpfx)db-symbols.v.i \ |
| $(common-objpfx)nptl/libpthread.so |
| |
| |
| |
| |
| @@ -86,12 +86,11 @@ ifeq (yes,$(have-selinux)) |
| LDLIBS-makedb := -lselinux |
| endif |
| |
| -# Depend on libc.so so a DT_NEEDED is generated in the shared objects. |
| -# This ensures they will load libc.so for needed symbols if loaded by |
| -# a statically-linked program that hasn't already loaded it. |
| libnss-libc = $(common-objpfx)linkobj/libc.so |
| -$(services:%=$(objpfx)libnss_%.so): $(libnss-libc) \ |
| - $(common-objpfx)libc_nonshared.a |
| +# Target-specific variable setting to link objects using deprecated |
| +# RPC interfaces with the version of libc.so that makes them available |
| +# for new links: |
| +$(services:%=$(objpfx)libnss_%.so): libc-for-link = $(libnss-libc) |
| |
| $(objpfx)libnss_db.so: $(objpfx)libnss_files.so |
| |
| @@ -109,8 +108,7 @@ $(inst_vardbdir)/Makefile: db-Makefile $ |
| $(do-install) |
| |
| libof-nss_test1 = extramodules |
| -$(objpfx)/libnss_test1.so: $(objpfx)nss_test1.os $(common-objpfx)libc.so \ |
| - $(common-objpfx)libc_nonshared.a |
| +$(objpfx)/libnss_test1.so: $(objpfx)nss_test1.os $(link-libc-deps) |
| $(build-module) |
| ifdef libnss_test1.so-version |
| $(objpfx)/libnss_test1.so$(libnss_test1.so-version): $(objpfx)/libnss_test1.so |
| |
| |
| |
| |
| @@ -25,11 +25,6 @@ sysdep_routines += $(aeabi_constants) $( |
| static-only-routines += $(aeabi_constants) |
| endif |
| |
| -# to pull in __aeabi_read_tp, needed for tls |
| -ifeq ($(subdir),malloc) |
| -$(objpfx)libmemusage.so: $(common-objpfx)libc_nonshared.a |
| -endif |
| - |
| ifeq ($(subdir),gmon) |
| sysdep_routines += arm-mcount |
| endif |
| @@ -37,7 +32,3 @@ endif |
| ifeq ($(subdir),debug) |
| CFLAGS-backtrace.c += -funwind-tables |
| endif |
| - |
| -ifeq ($(subdir),math) |
| -$(objpfx)libm.so: $(elfobjdir)/ld.so |
| -endif |
| |
| |
| |
| |
| @@ -88,23 +88,11 @@ CFLAGS-res_hconf.c = -fexceptions |
| # The BIND code elicits some harmless warnings. |
| +cflags += -Wno-strict-prototypes -Wno-write-strings |
| |
| -# Depend on libc.so so a DT_NEEDED is generated in the shared objects. |
| -# This ensures they will load libc.so for needed symbols if loaded by |
| -# a statically-linked program that hasn't already loaded it. |
| -$(objpfx)libresolv.so: $(common-objpfx)libc.so $(common-objpfx)libc_nonshared.a |
| -# Some hosts need '__stack_chk_guard', so pull in the definition from |
| -# ld.so if required. |
| -ifeq (yes,$(have-ssp)) |
| -LDLIBS-resolv.so += $(as-needed) $(elfobjdir)/ld.so $(no-as-needed) |
| -endif |
| - |
| # The DNS NSS modules needs the resolver. |
| -$(objpfx)libnss_dns.so: $(objpfx)libresolv.so $(common-objpfx)libc.so \ |
| - $(common-objpfx)libc_nonshared.a |
| +$(objpfx)libnss_dns.so: $(objpfx)libresolv.so |
| |
| # The asynchronous name lookup code needs the thread library. |
| -$(objpfx)libanl.so: $(common-objpfx)libc.so $(common-objpfx)libc_nonshared.a \ |
| - $(shared-thread-library) |
| +$(objpfx)libanl.so: $(shared-thread-library) |
| |
| $(objpfx)ga_test: $(objpfx)libanl.so $(shared-thread-library) |
| |
| |
| |
| |
| |
| @@ -64,12 +64,7 @@ CFLAGS-librt-cancellation.c = -fasynchro |
| |
| LDFLAGS-rt.so = -Wl,--enable-new-dtags,-z,nodelete |
| |
| -# Depend on libc.so so a DT_NEEDED is generated in the shared objects. |
| -# This ensures they will load libc.so for needed symbols if loaded by |
| -# a statically-linked program that hasn't already loaded it. |
| -$(objpfx)librt.so: $(common-objpfx)libc.so $(common-objpfx)libc_nonshared.a \ |
| - $(shared-thread-library) \ |
| - $(elfobjdir)/ld.so |
| +$(objpfx)librt.so: $(shared-thread-library) |
| |
| ifeq (yes,$(build-shared)) |
| $(addprefix $(objpfx),$(tests)): $(objpfx)librt.so $(shared-thread-library) |
| |
| |
| |
| |
| @@ -136,7 +136,7 @@ $(objpfx)tst-fmtmsg.out: tst-fmtmsg.sh $ |
| $(objpfx)tst-putenv: $(objpfx)tst-putenvmod.so |
| LDFLAGS-tst-putenv = $(no-as-needed) |
| |
| -$(objpfx)tst-putenvmod.so: $(objpfx)tst-putenvmod.os |
| +$(objpfx)tst-putenvmod.so: $(objpfx)tst-putenvmod.os $(link-libc-deps) |
| $(build-module) |
| libof-tst-putenvmod = extramodules |
| |
| |
| |
| |
| |
| @@ -1,3 +0,0 @@ |
| -ifeq ($(subdir),math) |
| -$(objpfx)libm.so: $(elfobjdir)/ld.so |
| -endif |
| |
| |
| |
| |
| @@ -2,8 +2,6 @@ ifeq ($(subdir),math) |
| libm-support += fenv_const fe_nomask fe_mask t_sqrt |
| libm-tests += test-powerpc-snan |
| |
| -# libm needs ld.so to access dl_hwcap |
| -$(objpfx)libm.so: $(elfobjdir)/ld.so |
| endif |
| |
| ifeq ($(subdir),stdlib) |