Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
Link extra-libs consistently with libc and ld.so.
  • Loading branch information
Joseph Myers committed May 31, 2013
1 parent eca5920 commit fab7ce3
Show file tree
Hide file tree
Showing 29 changed files with 144 additions and 143 deletions.
52 changes: 52 additions & 0 deletions ChangeLog
@@ -1,3 +1,55 @@
2013-05-31 Joseph Myers <joseph@codesourcery.com>

* Makefile ($(common-objpfx)linkobj/libc.so): Define
link-libc-deps to empty as target-specific variable.
* Makerules (link-libc-args): New variable.
(libc-for-link): Likewise.
(link-libc-deps): Likewise.
(lib%.so): Depend on $(link-libc-deps). Link with
$(link-libc-args).
(build-module): Link with $(link-libc-args).
(build-module-asneeded): Likewise.
(build-module-helper-objlist): Filter out $(link-libc-deps) from
list of objects.
($(common-objpfx)libc.so): Define link-libc-deps to empty as
target-specific variable.
($(extra-modules-build:%=$(objpfx)%.so)): Depend on
$(link-libc-deps) instead of libc.so and libc_nonshared.a.
* crypt/Makefile ($(objpfx)libcrypt.so): Remove dependencies on
libc.
* debug/Makefile ($(objpfx)libSegFault.so): Remove dependencies on
libc and ld.so.
($(objpfx)libpcprofile.so): Likewise.
* dlfcn/Makefile (LDLIBS-bug-atexit3-lib.so): Remove ld.so and
libc_nonshared.a.
($(objpfx)libdl.so): Remove dependencies on libc and ld.so.
* hesiod/Makefile ($(objpfx)libnss_hesiod.so): Likewise.
* iconvdata/extra-module.mk ($(objpfx)$(mod).so): Depend on
$(link-libc-deps).
($(objpfx)$(mod).so): Remove dependencies on libc and ld.so.
* locale/Makefile ($(objpfx)libBrokenLocale.so): Likewise.
* login/Makefile ($(objpfx)libutil.so): Likewise.
* malloc/Makefile ($(objpfx)libmemusage.so): Likewise.
* math/Makefile ($(objpfx)libm.so): Likewise.
* nis/Makefile ($(services:%=$(objpfx)libnss_%.so)
$(objpfx)libnsl.so): Define libc-for-link as target-specific
variable instead of depending directly on libc.
* nss/Makefile ($(services:%=$(objpfx)libnss_%.so)): Likewise.
($(objpfx)/libnss_test1.so): Change dependencies on libc to
$(link-libc-deps).
* resolv/Makefile ($(objpfx)libresolv.so): Remove dependencies on
libc.
[$(have-ssp) = yes] (LDLIBS-resolv.so): Remove variable.
($(objpfx)libnss_dns.so): Remove dependencies on libc.
($(objpfx)libanl.so): Likewise.
* rt/Makefile ($(objpfx)librt.so): Remove dependencies on libc and
ld.so.
* stdlib/Makefile ($(objpfx)tst-putenvmod.so): Depend on
$(link-libc-deps).
* sysdeps/i386/fpu/Makefile: Remove file.
* sysdeps/powerpc/fpu/Makefile [$(subdir) = math]
($(objpfx)libm.so): Remove dependency on ld.so.

2013-05-30 Patsy Franklin <pfrankli@redhat.com>

[BZ # 15553]
Expand Down
3 changes: 3 additions & 0 deletions Makefile
Expand Up @@ -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 \
Expand Down
40 changes: 32 additions & 8 deletions Makerules
Expand Up @@ -432,13 +432,33 @@ map-file = $(firstword $($(@F:.so=-map)) \
load-map-file = $(map-file:%=-Wl,--version-script=%)
endif

# Compiler arguments to use to link a shared object with libc and
# ld.so. This is intended to be as similar as possible to a default
# link with an installed libc.
link-libc-args = -Wl,--start-group \
$(libc-for-link) \
$(common-objpfx)libc_nonshared.a \
$(as-needed) $(elfobjdir)/ld.so $(no-as-needed) \
-Wl,--end-group

# The corresponding shared libc to use. This may be modified for a
# particular target.
libc-for-link = $(common-objpfx)libc.so

# The corresponding dependencies. As these are used in dependencies,
# not just commands, they cannot use target-specific variables so need
# to name both possible libc.so objects.
link-libc-deps = $(common-objpfx)libc.so $(common-objpfx)linkobj/libc.so \
$(common-objpfx)libc_nonshared.a $(elfobjdir)/ld.so

# Pattern rule to build a shared object from an archive of PIC objects.
# 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) $(+interp)
$(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) \
Expand Down Expand Up @@ -513,17 +533,19 @@ endef
# not for shared objects
define build-module
$(build-module-helper) -o $@ $(shlib-lds-flags) \
$(csu-objpfx)abi-note.o $(build-module-objlist)
$(csu-objpfx)abi-note.o $(build-module-objlist) $(link-libc-args)
endef
define build-module-asneeded
$(build-module-helper) -o $@ $(shlib-lds-flags) \
$(csu-objpfx)abi-note.o \
-Wl,--as-needed $(build-module-objlist) -Wl,--no-as-needed
-Wl,--as-needed $(build-module-objlist) -Wl,--no-as-needed \
$(link-libc-args)
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) \
Expand Down Expand Up @@ -566,6 +588,9 @@ generated += libc_pic.opts libc_pic.os.clean
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) \
Expand Down Expand Up @@ -621,8 +646,7 @@ include $(patsubst %,$(..)extra-modules.mk,$(modules-names))

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

Expand Down
5 changes: 0 additions & 5 deletions crypt/Makefile
Expand Up @@ -69,8 +69,3 @@ $(addprefix $(objpfx),$(tests)): $(objpfx)libcrypt.so
else
$(addprefix $(objpfx),$(tests)): $(objpfx)libcrypt.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
10 changes: 0 additions & 10 deletions debug/Makefile
Expand Up @@ -186,13 +186,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)
10 changes: 1 addition & 9 deletions dlfcn/Makefile
Expand Up @@ -117,14 +117,6 @@ $(objpfx)bug-atexit1.out: $(objpfx)bug-atexit1-lib.so
$(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


# 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
9 changes: 2 additions & 7 deletions hesiod/Makefile
Expand Up @@ -33,12 +33,7 @@ libnss_hesiod-inhibit-o = $(filter-out .os,$(object-suffixes))

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
9 changes: 1 addition & 8 deletions iconvdata/extra-module.mk
Expand Up @@ -4,16 +4,9 @@ extra-modules-left := $(strip $(filter-out $(mod),$(extra-modules-left)))
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
4 changes: 4 additions & 0 deletions libidn/ChangeLog
@@ -1,3 +1,7 @@
2013-05-31 Joseph Myers <joseph@codesourcery.com>

* Makefile ($(objpfx)libcidn.so): Remove dependencies on libc.

2013-05-16 Ryan S. Arnold <rsa@linux.vnet.ibm.com>

* idna.c: Add missing #include <stdint.h> due to uint64_t or uint32_t
Expand Down
2 changes: 0 additions & 2 deletions libidn/Makefile
Expand Up @@ -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
6 changes: 0 additions & 6 deletions locale/Makefile
Expand Up @@ -98,9 +98,3 @@ cpp-srcs-left := $(addsuffix .c,$(localedef-modules) $(localedef-aux) \
$(locale-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
5 changes: 0 additions & 5 deletions login/Makefile
Expand Up @@ -68,8 +68,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
2 changes: 1 addition & 1 deletion malloc/Makefile
Expand Up @@ -141,7 +141,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
5 changes: 0 additions & 5 deletions math/Makefile
Expand Up @@ -229,8 +229,3 @@ gmp-objs = $(patsubst %,$(common-objpfx)stdlib/%.o,\
$(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
10 changes: 5 additions & 5 deletions nis/Makefile
Expand Up @@ -76,12 +76,12 @@ $(objpfx)libnss_nis.so: $(objpfx)libnsl.so$(libnsl.so-version) \
$(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)
Expand Down
5 changes: 5 additions & 0 deletions nptl/ChangeLog
@@ -1,3 +1,8 @@
2013-05-31 Joseph Myers <joseph@codesourcery.com>

* Makefile ($(objpfx)libpthread.so): Remove dependencies on libc
and ld.so.

2013-05-16 Ryan S. Arnold <rsa@linux.vnet.ibm.com>

* pthread_create.c: Add missing #include <stdint.h> due to uint64_t or
Expand Down
8 changes: 0 additions & 8 deletions nptl/Makefile
Expand Up @@ -507,14 +507,6 @@ $(objpfx)libpthread.so: $(addprefix $(objpfx),$(crti-objs) $(crtn-objs))
$(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), \
Expand Down
5 changes: 5 additions & 0 deletions nptl_db/ChangeLog
@@ -1,3 +1,8 @@
2013-05-31 Joseph Myers <joseph@codesourcery.com>

* Makefile ($(objpfx)libthread_db.so): Remove dependencies on
libc.

2013-05-16 Ryan S. Arnold <rsa@linux.vnet.ibm.com>

* db_info.c: Add missing #include <stdint.h> due to uint64_t or
Expand Down
6 changes: 0 additions & 6 deletions nptl_db/Makefile
Expand Up @@ -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
Expand Down
12 changes: 5 additions & 7 deletions nss/Makefile
Expand Up @@ -84,12 +84,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

Expand All @@ -107,8 +106,7 @@ $(inst_vardbdir)/Makefile: db-Makefile $(+force)
$(do-install)

CFLAGS-nss_test1.c = -DNOT_IN_libc=1
$(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
Expand Down
6 changes: 6 additions & 0 deletions ports/ChangeLog.arm
@@ -1,3 +1,9 @@
2013-05-31 Joseph Myers <joseph@codesourcery.com>

* sysdeps/arm/Makefile [$(subdir) = malloc]
($(objpfx)libmemusage.so): Remove dependency on libc_nonshared.
[$(subdir) = math] ($(objpfx)libm.so): Remove dependency on ld.so.

2013-05-29 Siddhesh Poyarekar <siddhesh@redhat.com>

[BZ #15465]
Expand Down
18 changes: 18 additions & 0 deletions ports/ChangeLog.microblaze
@@ -1,3 +1,21 @@
2013-05-31 Joseph Myers <joseph@codesourcery.com>

* sysdeps/microblaze/Makefile ($(objpfx)libm.so): Remove
dependency on ld.so.
($(objpfx)libcrypt.so): Likewise.
($(objpfx)libresolv.so): Likewise.
($(objpfx)libnss_dns.so): Likewise.
($(objpfx)libnss_files.so): Likewise.
($(objpfx)libnss_db.so): Likewise.
($(objpfx)libnss_nis.so): Likewise.
($(objpfx)libnss_nisplus.so): Likewise.
($(objpfx)libnss_hesiod.so): Likewise.
($(objpfx)libnss_compat.so): Likewise.
($(objpfx)libanl.so): Likewise.
($(objpfx)libnsl.so): Likewise.
($(objpfx)libcidn.so): Likewise.
($(objpfx)libutil.so): Likewise.

2013-05-29 Siddhesh Poyarekar <siddhesh@redhat.com>

[BZ #15465]
Expand Down

0 comments on commit fab7ce3

Please sign in to comment.