(linenum→info "unix/slp.c:2238")

glibc/2.7/elf/Makefile

    1: # Copyright (C) 1995-2004, 2005, 2006, 2007 Free Software Foundation, Inc.
    2: # This file is part of the GNU C Library.
    3: 
    4: # The GNU C Library is free software; you can redistribute it and/or
    5: # modify it under the terms of the GNU Lesser General Public
    6: # License as published by the Free Software Foundation; either
    7: # version 2.1 of the License, or (at your option) any later version.
    8: 
    9: # The GNU C Library is distributed in the hope that it will be useful,
   10: # but WITHOUT ANY WARRANTY; without even the implied warranty of
   11: # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
   12: # Lesser General Public License for more details.
   13: 
   14: # You should have received a copy of the GNU Lesser General Public
   15: # License along with the GNU C Library; if not, write to the Free
   16: # Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
   17: # 02111-1307 USA.
   18: 
   19: # Makefile for elf subdirectory of GNU C Library.
   20: 
   21: subdir          := elf
   22: 
   23: headers         = elf.h bits/elfclass.h link.h bits/link.h
   24: routines        = $(dl-routines) dl-support dl-iteratephdr \
   25:                   dl-addr enbl-secure dl-profstub \
   26:                   dl-origin dl-libc dl-sym dl-tsd
   27: 
   28: # The core dynamic linking functions are in libc for the static and
   29: # profiled libraries.
   30: dl-routines     = $(addprefix dl-,load cache lookup object reloc deps \
   31:                                   runtime error init fini debug misc \
   32:                                   version profile conflict tls origin \
   33:                                   execstack caller open close trampoline)
   34: all-dl-routines = $(dl-routines) $(sysdep-dl-routines)
   35: # But they are absent from the shared libc, because that code is in ld.so.
   36: elide-routines.os = $(all-dl-routines) dl-support enbl-secure dl-origin
   37: shared-only-routines += dl-caller
   38: 
   39: # ld.so uses those routines, plus some special stuff for being the program
   40: # interpreter and operating independent of libc.
   41: rtld-routines   := rtld $(dl-routines) dl-sysdep dl-environ dl-minimal
   42: all-rtld-routines = $(rtld-routines) $(sysdep-rtld-routines)
   43: 
   44: distribute      := rtld-Rules \
   45:                    $(rtld-routines:=.c) dynamic-link.h do-rel.h dl-machine.h \
   46:                    dl-cache.h dl-hash.h soinit.c sofini.c ldd.bash.in \
   47:                    genrtldtbl.awk atomicity.h dl-procinfo.h ldsodefs.h \
   48:                    dl-librecon.h interp.c sln.c dl-dst.h hp-timing.h \
   49:                    do-lookup.h dl-lookupcfg.h sprof.c gen-trusted-dirs.awk \
   50:                    testobj1.c testobj2.c testobj3.c testobj4.c testobj5.c \
   51:                    testobj6.c testobj1_1.c failobj.c unloadmod.c \
   52:                    ldconfig.h ldconfig.c cache.c readlib.c readelflib.c \
   53:                    chroot_canon.c gccframe.h \
   54:                    dep1.c dep2.c dep3.c dep4.c dl-dtprocnum.h unsecvars.h \
   55:                    vismain.c vismod1.c vismod2.c vismod3.c \
   56:                    constload2.c constload3.c filtmod1.c filtmod2.c \
   57:                    nodlopenmod.c nodelete.c nodelmod1.c nodelmod2.c \
   58:                    nodelmod3.c nodelmod4.c nodlopen.c dl-osinfo.h \
   59:                    reldepmod1.c reldepmod2.c reldepmod3.c reldepmod4.c \
   60:                    reldepmod5.c reldepmod6.c \
   61:                    reldep4mod1.c reldep4mod2.c reldep4mod3.c reldep4mod4.c \
   62:                    nextmod1.c nextmod2.c pathoptobj.c tst-pathopt.sh \
   63:                    neededobj1.c neededobj2.c neededobj3.c neededobj4.c \
   64:                    neededobj5.c neededobj6.c firstobj.c \
   65:                    unload2mod.c unload2dep.c ltglobmod1.c ltglobmod2.c \
   66:                    testobj.h vismod.h globalmod1.c \
   67:                    dblloadmod1.c dblloadmod2.c dblloadmod3.c \
   68:                    reldep6mod4.c reldep6mod3.c reldep6mod2.c reldep6mod1.c \
   69:                    reldep6mod0.c reldep7mod1.c reldep7mod2.c \
   70:                    unwind-dw2.c unwind-dw2-fde.c unwind.h unwind-pe.h \
   71:                    unwind-dw2-fde.h dwarf2.h dl-procinfo.c tls.h dl-tls.h \
   72:                    tst-tlsmod1.c tst-tlsmod2.c tst-tlsmod3.c tst-tlsmod4.c \
   73:                    tst-tlsmod5.c tst-tlsmod6.c tst-tlsmod7.c tst-tlsmod8.c \
   74:                    tst-tlsmod9.c tst-tlsmod10.c tst-tlsmod11.c \
   75:                    tst-tlsmod12.c tst-tls10.h tst-alignmod.c tst-alignmod2.c \
   76:                    circlemod1.c circlemod1a.c circlemod2.c circlemod2a.c \
   77:                    circlemod3.c circlemod3a.c nodlopenmod2.c \
   78:                    tls-macros.h \
   79:                    reldep8mod1.c reldep8mod2.c reldep8mod3.c \
   80:                    nodel2mod1.c nodel2mod2.c nodel2mod3.c \
   81:                    reldep9.c reldep9mod1.c reldep9mod2.c reldep9mod3.c \
   82:                    tst-array1.exp tst-array2.exp tst-array4.exp \
   83:                    tst-array2dep.c tst-piemod1.c \
   84:                    tst-execstack-mod.c tst-dlmodcount.c \
   85:                    check-textrel.c dl-sysdep.h test-dlopenrpathmod.c \
   86:                    tst-deep1mod1.c tst-deep1mod2.c tst-deep1mod3.c \
   87:                    unload3mod1.c unload3mod2.c unload3mod3.c unload3mod4.c \
   88:                    unload4mod1.c unload4mod2.c unload4mod3.c unload4mod4.c \
   89:                    unload6mod1.c unload6mod2.c unload6mod3.c \
   90:                    unload7mod1.c unload7mod2.c \
   91:                    tst-auditmod1.c tst-audit.sh \
   92:                    order2mod1.c order2mod2.c order2mod3.c order2mod4.c \
   93:                    tst-stackguard1.c tst-stackguard1-static.c \
   94:                    tst-array5.c tst-array5-static.c tst-array5dep.c \
   95:                    tst-array5.exp tst-leaks1.c
   96: 
   97: CFLAGS-dl-runtime.c = -fexceptions -fasynchronous-unwind-tables
   98: CFLAGS-dl-lookup.c = -fexceptions -fasynchronous-unwind-tables
   99: CFLAGS-dl-iterate-phdr.c = $(uses-callbacks)
  100: 
  101: include ../Makeconfig
  102: 
  103: ifeq ($(unwind-find-fde),yes)
  104: routines += unwind-dw2-fde-glibc
  105: shared-only-routines += unwind-dw2-fde-glibc
  106: endif
  107: 
  108: before-compile  = $(objpfx)trusted-dirs.h
  109: generated       := trusted-dirs.h trusted-dirs.st for-renamed/renamed.so
  110: generated-dirs  := for-renamed
  111: 
  112: ifeq ($(versioning),yes)
  113: ld-map          = $(common-objpfx)ld.map
  114: endif
  115: 
  116: ifeq (yes,$(build-shared))
  117: extra-objs      = $(all-rtld-routines:%=%.os) soinit.os sofini.os interp.os
  118: generated       += librtld.os dl-allobjs.os ld.so ldd
  119: install-others  = $(inst_slibdir)/$(rtld-installed-name)
  120: install-bin-script = ldd
  121: endif
  122: 
  123: others          = sprof sln
  124: install-bin     = sprof
  125: others-static   = sln
  126: install-rootsbin = sln
  127: 
  128: ifeq (yes,$(use-ldconfig))
  129: ifeq (yes,$(build-shared))
  130: others-static   += ldconfig
  131: others          += ldconfig
  132: install-rootsbin += ldconfig
  133: 
  134: ldconfig-modules := cache readlib xmalloc xstrdup chroot_canon
  135: extra-objs      += $(ldconfig-modules:=.o)
  136: 
  137: # To find xmalloc.c and xstrdup.c
  138: vpath %.c ../locale/programs
  139: 
  140: endif
  141: endif
  142: 
  143: tests = tst-tls1 tst-tls2 tst-tls9 tst-leaks1
  144: ifeq (yes,$(have-initfini-array))
  145: tests += tst-array1 tst-array2 tst-array3 tst-array4 tst-array5
  146: endif
  147: ifeq (yes,$(build-static))
  148: tests-static = tst-tls1-static tst-tls2-static tst-stackguard1-static
  149: ifeq (yesyesyes,$(build-static)$(build-shared)$(elf))
  150: tests-static += tst-tls9-static
  151: tst-tls9-static-ENV = \
  152:        LD_LIBRARY_PATH=$(objpfx):$(common-objpfx):$(common-objpfx)dlfcn
  153: endif
  154: ifeq (yes,$(have-initfini-array))
  155: tests-static += tst-array1-static tst-array5-static
  156: endif
  157: tests += $(tests-static)
  158: endif
  159: ifeq (yes,$(build-shared))
  160: tests += loadtest restest1 preloadtest loadfail multiload origtest resolvfail \
  161:          constload1 order $(tests-vis-$(have-protected)) noload filter unload \
  162:          reldep reldep2 reldep3 reldep4 nodelete nodelete2 \
  163:          nodlopen nodlopen2 neededtest neededtest2 \
  164:          neededtest3 neededtest4 unload2 lateglobal initfirst global \
  165:          restest2 next dblload dblunload reldep5 reldep6 reldep7 reldep8 \
  166:          circleload1 tst-tls3 tst-tls4 tst-tls5 tst-tls6 tst-tls7 tst-tls8 \
  167:          tst-tls10 tst-tls11 tst-tls12 tst-tls13 tst-tls14 tst-tls15 \
  168:          tst-tls-dlinfo \
  169:          tst-align tst-align2 $(tests-execstack-$(have-z-execstack)) \
  170:          tst-dlmodcount tst-dlopenrpath tst-deep1 \
  171:          tst-dlmopen1 tst-dlmopen2 tst-dlmopen3 \
  172:          unload3 unload4 unload5 unload6 unload7 tst-global1 order2 \
  173:          tst-audit1 tst-audit2 \
  174:          tst-stackguard1 tst-addr1 tst-thrlock
  175: #        reldep9
  176: test-srcs = tst-pathopt
  177: tests-vis-yes = vismain
  178: tests-execstack-yes = tst-execstack tst-execstack-needed tst-execstack-prog
  179: endif
  180: ifeq (yesyes,$(have-fpie)$(build-shared))
  181: tests: $(objpfx)tst-pie1.out
  182: endif
  183: tests: $(objpfx)tst-leaks1-mem
  184: modules-names = testobj1 testobj2 testobj3 testobj4 testobj5 testobj6 \
  185:                 testobj1_1 failobj constload2 constload3 unloadmod \
  186:                 dep1 dep2 dep3 dep4 $(modules-vis-$(have-protected)) \
  187:                 nodelmod1 nodelmod2 nodelmod3 nodelmod4 \
  188:                 nodel2mod1 nodel2mod2 nodel2mod3 \
  189:                 nodlopenmod nodlopenmod2 filtmod1 filtmod2 \
  190:                 reldepmod1 reldepmod2 reldepmod3 reldepmod4 nextmod1 nextmod2 \
  191:                 reldep4mod1 reldep4mod2 reldep4mod3 reldep4mod4 \
  192:                 neededobj1 neededobj2 neededobj3 neededobj4 \
  193:                 neededobj5 neededobj6 firstobj globalmod1 \
  194:                 unload2mod unload2dep ltglobmod1 ltglobmod2 pathoptobj \
  195:                 dblloadmod1 dblloadmod2 dblloadmod3 reldepmod5 reldepmod6 \
  196:                 reldep6mod0 reldep6mod1 reldep6mod2 reldep6mod3 reldep6mod4 \
  197:                 reldep7mod1 reldep7mod2 \
  198:                 tst-tlsmod1 tst-tlsmod2 tst-tlsmod3 tst-tlsmod4 \
  199:                 tst-tlsmod5 tst-tlsmod6 tst-tlsmod7 tst-tlsmod8 \
  200:                 tst-tlsmod9 tst-tlsmod10 tst-tlsmod11 tst-tlsmod12 \
  201:                 tst-tlsmod13 tst-tlsmod13a tst-tlsmod14a tst-tlsmod14b \
  202:                 tst-tlsmod15a tst-tlsmod15b \
  203:                 circlemod1 circlemod1a circlemod2 circlemod2a \
  204:                 circlemod3 circlemod3a \
  205:                 reldep8mod1 reldep8mod2 reldep8mod3 \
  206:                 reldep9mod1 reldep9mod2 reldep9mod3 \
  207:                 tst-alignmod tst-alignmod2 \
  208:                 $(modules-execstack-$(have-z-execstack)) \
  209:                 tst-dlopenrpathmod tst-deep1mod1 tst-deep1mod2 tst-deep1mod3 \
  210:                 tst-dlmopen1mod tst-auditmod1 \
  211:                 unload3mod1 unload3mod2 unload3mod3 unload3mod4 \
  212:                 unload4mod1 unload4mod2 unload4mod3 unload4mod4 \
  213:                 unload6mod1 unload6mod2 unload6mod3 \
  214:                 unload7mod1 unload7mod2 \
  215:                 order2mod1 order2mod2 order2mod3 order2mod4
  216: ifeq (yes,$(have-initfini-array))
  217: modules-names += tst-array2dep tst-array5dep
  218: endif
  219: ifeq (yesyes,$(have-fpie)$(build-shared))
  220: modules-names += tst-piemod1
  221: endif
  222: modules-vis-yes = vismod1 vismod2 vismod3
  223: modules-execstack-yes = tst-execstack-mod
  224: extra-test-objs += $(addsuffix .os,$(strip $(modules-names)))
  225: # We need this variable to be sure the test modules get the right CPPFLAGS.
  226: test-extras += $(modules-names)
  227: 
  228: # filtmod1.so has a special rule
  229: modules-names-nobuild := filtmod1
  230: 
  231: 
  232: include ../Rules
  233: 
  234: check-abi: check-abi-ld
  235: update-abi: update-abi-ld
  236: 
  237: ifeq (yes,$(build-shared))
  238: # Make sure these things are built in the `make lib' pass so they can be used
  239: # to run programs during the `make others' pass.
  240: lib-noranlib: $(objpfx)$(rtld-installed-name) \
  241:               $(addprefix $(objpfx),$(extra-objs))
  242: endif
  243: 
  244: # Command to link into a larger single relocatable object.
  245: reloc-link = $(LINK.o) -nostdlib -nostartfiles -r
  246: 
  247: $(objpfx)dl-allobjs.os: $(all-rtld-routines:%=$(objpfx)%.os)
  248:         $(reloc-link) -o $@ $^
  249: 
  250: # Link together the dynamic linker into a single relocatable object.
  251: # First we do a link against libc_pic.a just to get a link map,
  252: # and discard the object produced by that link.  From the link map
  253: # we can glean all the libc modules that need to go into the dynamic
  254: # linker.  Then we do a recursive make that goes into all the subdirs
  255: # those modules come from and builds special rtld-foo.os versions that
  256: # are compiled with special flags, and puts these modules into rtld-libc.a
  257: # for us.  Then we do the real link using rtld-libc.a instead of libc_pic.a.
  258: 
  259: $(objpfx)librtld.map: $(objpfx)dl-allobjs.os $(common-objpfx)libc_pic.a
  260:         @-rm -f $@T
  261:         $(reloc-link) -o $@.o '-Wl,-(' $^ -lgcc '-Wl,-)' -Wl,-Map,$@T
  262:         rm -f $@.o
  263:         mv -f $@T $@
  264: 
  265: $(objpfx)librtld.mk: $(objpfx)librtld.map Makefile
  266:         LC_ALL=C \
  267:         sed -n 's@^$(common-objpfx)\([^(]*\)(\([^)]*\.os\)) *.*$$@\1 \2@p' \
  268:             $< | \
  269:         while read lib file; do \
  270:           case $$lib in \
  271:           libc_pic.a) \
  272:             LC_ALL=C fgrep -l /$$file \
  273:                   $(common-objpfx)stamp.os $(common-objpfx)*/stamp.os | \
  274:             LC_ALL=C \
  275:             sed 's@^$(common-objpfx)\([^/]*\)/stamp\.os$$@rtld-\1'" +=$$file@"\
  276:             ;; \
  277:           */*.a) \
  278:             echo rtld-$${lib%%/*} += $$file ;; \
  279:           *) echo "Wasn't expecting $$lib($$file)" >&2; exit 1 ;; \
  280:           esac; \
  281:         done > $@T
  282:         echo rtld-subdirs = `LC_ALL=C sed 's/^rtld-\([^ ]*\).*$$/\1/' $@T \
  283:                              | LC_ALL=C sort -u` >> $@T
  284:         mv -f $@T $@
  285: 
  286: $(objpfx)rtld-libc.a: $(objpfx)librtld.mk FORCE
  287:         $(MAKE) -f $< -f rtld-Rules
  288: 
  289: $(objpfx)librtld.os: $(objpfx)dl-allobjs.os $(objpfx)rtld-libc.a
  290:         $(LINK.o) -nostdlib -nostartfiles -r -o $@ '-Wl,-(' $^ -lgcc '-Wl,-)' \
  291:                   -Wl,-Map,$@.map
  292: 
  293: generated += librtld.map librtld.mk rtld-libc.a librtld.os.map
  294: 
  295: z-now-yes = -Wl,-z,now
  296: 
  297: $(objpfx)ld.so: $(objpfx)librtld.os $(ld-map)
  298:         @rm -f $@.lds
  299:         $(LINK.o) -nostdlib -nostartfiles -shared $(z-now-$(bind-now)) \
  300:                   $(LDFLAGS-rtld) -Wl,-z,defs -Wl,--verbose 2>&1 |    \
  301:                   LC_ALL=C \
  302:                   sed -e '/^=========/,/^=========/!d;/^=========/d'  \
  303:                       -e 's/\. = 0 + SIZEOF_HEADERS;/& _begin = . - SIZEOF_HEADERS;/' \
  304:                   > $@.lds
  305:         $(LINK.o) -nostdlib -nostartfiles -shared -o $@                        \
  306:                   $(LDFLAGS-rtld) -Wl,-z,defs $(z-now-$(bind-now))    \
  307:                   $(filter-out $(map-file),$^) $(load-map-file)               \
  308:                   -Wl,-soname=$(rtld-installed-name) -T $@.lds
  309:         rm -f $@.lds
  310:         readelf -s $@ \
  311:           | awk '($$7 ~ /^UND(|EF)$$/ && $$1 != "0:" && $$4 != "REGISTER") { print; p=1 } END { exit p != 0 }'
  312: 
  313: # interp.c exists just to get this string into the libraries.
  314: CFLAGS-interp.c = -D'RUNTIME_LINKER="$(slibdir)/$(rtld-installed-name)"' \
  315:                   -DNOT_IN_libc=1
  316: $(objpfx)interp.os: $(common-objpfx)config.make
  317: 
  318: ifneq (ld.so,$(rtld-installed-name))
  319: # Make sure ld.so.1 exists in the build directory so we can link
  320: # against it.
  321: $(objpfx)$(rtld-installed-name): $(objpfx)ld.so
  322:         rm -f $@
  323:         ln -s $(<F) $@
  324: generated += $(rtld-installed-name)
  325: endif
  326: 
  327: # Build a file mentioning all trustworthy directories to look for shared
  328: # libraries when using LD_LIBRARY_PATH in a setuid program.  The user can
  329: # add directories to the list by defining $(user-defined-trusted-dirs)
  330: # before starting make.
  331: $(objpfx)trusted-dirs.h: $(objpfx)trusted-dirs.st; @:
  332: $(objpfx)trusted-dirs.st: Makefile $(..)Makeconfig
  333:         $(make-target-directory)
  334:         echo "$(subst :, ,$(default-rpath) $(user-defined-trusted-dirs))"    \
  335:         | $(AWK) -f gen-trusted-dirs.awk > ${@:st=T};
  336:         echo '#define DL_DST_LIB "$(notdir $(slibdir))"' >> ${@:st=T}
  337:         $(move-if-change) ${@:st=T} ${@:st=h}
  338:         touch $@
  339: CPPFLAGS-dl-load.c = -I$(objpfx). -I$(csu-objpfx).
  340: 
  341: ifeq (yes,$(build-shared))
  342: $(inst_slibdir)/$(rtld-version-installed-name): $(objpfx)ld.so $(+force)
  343:         $(make-target-directory)
  344:         $(do-install-program)
  345: 
  346: $(inst_slibdir)/$(rtld-installed-name): \
  347:   $(inst_slibdir)/$(rtld-version-installed-name) \
  348:   $(inst_slibdir)/libc-$(version).so
  349:         $(make-shlib-link)
  350: 
  351: # Special target called by parent to install just the dynamic linker.
  352: .PHONY: ldso_install
  353: ldso_install: $(inst_slibdir)/$(rtld-installed-name)
  354: endif
  355: 
  356: 
  357: common-ldd-rewrite = -e 's%@RTLD@%$(slibdir)/$(rtld-installed-name)%g' \
  358:                      -e 's%@VERSION@%$(version)%g'
  359: sh-ldd-rewrite = $(common-ldd-rewrite) -e 's%@BASH@%/bin/sh%g;s/\$$"/"/g'
  360: bash-ldd-rewrite = $(common-ldd-rewrite) -e 's%@BASH@%$(BASH)%g' \
  361:                    -e 's%@TEXTDOMAINDIR@%$(msgcatdir)%g'
  362: 
  363: ifneq ($(have-bash2),yes)
  364: ldd-shell = sh
  365: else
  366: ldd-shell = bash
  367: endif
  368: 
  369: ifeq ($(ldd-rewrite-script),no)
  370: define gen-ldd
  371: LC_ALL=C sed $($(ldd-shell)-ldd-rewrite) < $< > $@.new
  372: endef
  373: else
  374: define gen-ldd
  375: LC_ALL=C sed $($(ldd-shell)-ldd-rewrite) < $< | LC_ALL=C sed -f $(ldd-rewrite-script) > $@.new
  376: endef
  377: endif
  378: 
  379: $(objpfx)ldd: ldd.bash.in $(common-objpfx)soversions.mk \
  380:               $(common-objpfx)config.make
  381:         $(gen-ldd)
  382:         chmod 555 $@.new
  383:         mv -f $@.new $@
  384: 
  385: $(objpfx)sprof: $(libdl)
  386: 
  387: $(objpfx)ldconfig: $(ldconfig-modules:%=$(objpfx)%.o)
  388: SYSCONF-FLAGS := -D'SYSCONFDIR="$(sysconfdir)"'
  389: CFLAGS-ldconfig.c = $(SYSCONF-FLAGS) -D'LIBDIR="$(libdir)"' \
  390:                     -D'SLIBDIR="$(slibdir)"' -DIS_IN_ldconfig=1
  391: CFLAGS-dl-cache.c = $(SYSCONF-FLAGS)
  392: CFLAGS-cache.c = $(SYSCONF-FLAGS)
  393: 
  394: CPPFLAGS-.os += $(if $(filter $(@F),$(patsubst %,%.os,$(all-rtld-routines))),-DNOT_IN_libc=1 -DIS_IN_rtld=1)
  395: 
  396: test-modules = $(addprefix $(objpfx),$(addsuffix .so,$(strip $(modules-names))))
  397: generated += $(addsuffix .so,$(strip $(modules-names)))
  398: 
  399: ifeq (yes,$(build-shared))
  400: ifeq ($(cross-compiling),no)
  401: tests: $(objpfx)tst-pathopt.out
  402: endif
  403: endif
  404: 
  405: $(objpfx)testobj1.so: $(libdl)
  406: $(objpfx)testobj1_1.so: $(objpfx)testobj1.so $(libdl)
  407: $(objpfx)testobj2.so: $(objpfx)testobj1.so $(libdl)
  408: $(objpfx)testobj3.so: $(libdl)
  409: $(objpfx)testobj4.so: $(libdl)
  410: $(objpfx)testobj5.so: $(libdl)
  411: $(objpfx)testobj6.so: $(objpfx)testobj1.so $(objpfx)testobj2.so $(libdl)
  412: $(objpfx)failobj.so: $(objpfx)testobj6.so
  413: $(objpfx)dep1.so: $(objpfx)dep2.so $(objpfx)dep4.so
  414: $(objpfx)dep2.so: $(objpfx)dep3.so $(objpfx)dep4.so
  415: $(objpfx)dep4.so: $(objpfx)dep3.so
  416: $(objpfx)nodelmod3.so: $(objpfx)nodelmod4.so
  417: $(objpfx)nextmod1.so: $(libdl)
  418: $(objpfx)neededobj1.so: $(libdl)
  419: $(objpfx)neededobj2.so: $(objpfx)neededobj1.so $(libdl)
  420: $(objpfx)neededobj3.so: $(objpfx)neededobj1.so $(objpfx)neededobj2.so $(libdl)
  421: $(objpfx)neededobj4.so: $(objpfx)neededobj1.so $(objpfx)neededobj2.so \
  422:                         $(objpfx)neededobj3.so $(libdl)
  423: $(objpfx)neededobj6.so: $(objpfx)neededobj5.so
  424: $(objpfx)unload2mod.so: $(objpfx)unload2dep.so
  425: $(objpfx)ltglobmod2.so: $(libdl)
  426: $(objpfx)firstobj.so: $(shared-thread-library)
  427: $(objpfx)globalmod1.so: $(libdl)
  428: $(objpfx)reldep4mod1.so: $(objpfx)reldep4mod3.so
  429: $(objpfx)reldep4mod2.so: $(objpfx)reldep4mod4.so
  430: $(objpfx)dblloadmod1.so: $(objpfx)dblloadmod3.so
  431: $(objpfx)dblloadmod2.so: $(objpfx)dblloadmod3.so
  432: $(objpfx)reldepmod5.so: $(objpfx)reldepmod2.so
  433: $(objpfx)reldepmod6.so: $(objpfx)reldepmod2.so
  434: $(objpfx)reldep6mod1.so: $(objpfx)reldep6mod0.so
  435: $(objpfx)reldep6mod2.so: $(objpfx)reldep6mod1.so
  436: $(objpfx)reldep6mod3.so: $(objpfx)reldep6mod2.so
  437: $(objpfx)reldep6mod4.so: $(objpfx)reldep6mod1.so
  438: $(objpfx)tst-tlsmod3.so: $(objpfx)tst-tlsmod2.so
  439: $(objpfx)tst-tlsmod8.so: $(objpfx)tst-tlsmod7.so
  440: $(objpfx)tst-tlsmod10.so: $(objpfx)tst-tlsmod9.so
  441: $(objpfx)tst-tlsmod12.so: $(objpfx)tst-tlsmod11.so
  442: $(objpfx)tst-tlsmod13a.so: $(objpfx)tst-tlsmod13.so
  443: # For tst-tls9-static, make sure the modules it dlopens have libc.so in DT_NEEDED
  444: $(objpfx)tst-tlsmod5.so: $(common-objpfx)libc.so
  445: $(objpfx)tst-tlsmod6.so: $(common-objpfx)libc.so
  446: $(objpfx)reldep8mod3.so: $(objpfx)reldep8mod1.so $(objpfx)reldep8mod2.so
  447: $(objpfx)nodel2mod3.so: $(objpfx)nodel2mod1.so $(objpfx)nodel2mod2.so
  448: $(objpfx)reldep9mod2.so: $(objpfx)reldep9mod1.so
  449: $(objpfx)reldep9mod3.so: $(objpfx)reldep9mod1.so $(objpfx)reldep9mod2.so
  450: $(objpfx)unload3mod1.so: $(objpfx)unload3mod3.so
  451: $(objpfx)unload3mod2.so: $(objpfx)unload3mod3.so
  452: $(objpfx)unload3mod3.so: $(objpfx)unload3mod4.so
  453: $(objpfx)unload4mod1.so: $(objpfx)unload4mod2.so $(objpfx)unload4mod3.so
  454: $(objpfx)unload4mod2.so: $(objpfx)unload4mod4.so $(objpfx)unload4mod3.so
  455: $(objpfx)unload6mod1.so: $(libdl)
  456: $(objpfx)unload6mod2.so: $(libdl)
  457: $(objpfx)unload6mod3.so: $(libdl)
  458: $(objpfx)unload7mod1.so: $(libdl)
  459: $(objpfx)unload7mod2.so: $(objpfx)unload7mod1.so
  460: 
  461: LDFLAGS-tst-tlsmod5.so = -nostdlib
  462: LDFLAGS-tst-tlsmod6.so = -nostdlib
  463: 
  464: testobj1.so-no-z-defs = yes
  465: testobj3.so-no-z-defs = yes
  466: testobj4.so-no-z-defs = yes
  467: testobj5.so-no-z-defs = yes
  468: testobj6.so-no-z-defs = yes
  469: failobj.so-no-z-defs = yes
  470: constload2.so-no-z-defs = yes
  471: constload3.so-no-z-defs = yes
  472: nodelmod1.so-no-z-defs = yes
  473: nodelmod2.so-no-z-defs = yes
  474: nodelmod4.so-no-z-defs = yes
  475: nodel2mod2.so-no-z-defs = yes
  476: reldepmod2.so-no-z-defs = yes
  477: reldepmod3.so-no-z-defs = yes
  478: reldepmod4.so-no-z-defs = yes
  479: reldep4mod4.so-no-z-defs = yes
  480: reldep4mod2.so-no-z-defs = yes
  481: ltglobmod2.so-no-z-defs = yes
  482: dblloadmod3.so-no-z-defs = yes
  483: tst-tlsmod1.so-no-z-defs = yes
  484: tst-tlsmod2.so-no-z-defs = yes
  485: tst-tlsmod3.so-no-z-defs = yes
  486: tst-tlsmod4.so-no-z-defs = yes
  487: tst-tlsmod7.so-no-z-defs = yes
  488: tst-tlsmod8.so-no-z-defs = yes
  489: tst-tlsmod9.so-no-z-defs = yes
  490: tst-tlsmod10.so-no-z-defs = yes
  491: tst-tlsmod12.so-no-z-defs = yes
  492: tst-tlsmod14a.so-no-z-defs = yes
  493: tst-tlsmod14b.so-no-z-defs = yes
  494: tst-tlsmod15a.so-no-z-defs = yes
  495: circlemod2.so-no-z-defs = yes
  496: circlemod3.so-no-z-defs = yes
  497: circlemod3a.so-no-z-defs = yes
  498: reldep8mod2.so-no-z-defs = yes
  499: reldep9mod1.so-no-z-defs = yes
  500: unload3mod4.so-no-z-defs = yes
  501: unload4mod1.so-no-z-defs = yes
  502: 
  503: ifeq ($(build-shared),yes)
  504: # Build all the modules even when not actually running test programs.
  505: tests: $(test-modules)
  506: endif
  507: 
  508: $(objpfx)loadtest: $(libdl)
  509: LDFLAGS-loadtest = -rdynamic
  510: 
  511: $(objpfx)loadtest.out: $(test-modules)
  512: 
  513: $(objpfx)neededtest: $(libdl)
  514: $(objpfx)neededtest.out: $(objpfx)neededobj1.so $(objpfx)neededobj2.so \
  515:                          $(objpfx)neededobj3.so
  516: 
  517: $(objpfx)neededtest2: $(libdl)
  518: $(objpfx)neededtest2.out: $(objpfx)neededobj1.so $(objpfx)neededobj2.so \
  519:                           $(objpfx)neededobj3.so
  520: 
  521: $(objpfx)neededtest3: $(libdl)
  522: $(objpfx)neededtest3.out: $(objpfx)neededobj1.so $(objpfx)neededobj2.so \
  523:                           $(objpfx)neededobj3.so $(objpfx)neededobj4.so
  524: 
  525: neededtest4-ENV = LC_ALL=C LANGUAGE=C
  526: $(objpfx)neededtest4: $(libdl) $(objpfx)neededobj1.so
  527: $(objpfx)neededtest4.out: $(objpfx)neededobj5.so $(objpfx)neededobj6.so
  528: 
  529: $(objpfx)restest1: $(objpfx)testobj1.so $(objpfx)testobj1_1.so $(libdl)
  530: LDFLAGS-restest1 = -rdynamic
  531: 
  532: $(objpfx)restest2: $(libdl)
  533: LDFLAGS-restest2 = -rdynamic
  534: 
  535: $(objpfx)restest1.out: $(test-modules)
  536: 
  537: preloadtest-preloads = testobj1 testobj2 testobj3 testobj4 testobj5
  538: $(objpfx)preloadtest: $(objpfx)testobj6.so
  539: LDFLAGS-preloadtest = -rdynamic
  540: $(objpfx)preloadtest.out: $(preloadtest-preloads:%=$(objpfx)%.so)
  541: preloadtest-ENV = \
  542:   LD_PRELOAD=$(subst $(empty) ,:,$(strip $(preloadtest-preloads:=.so)))
  543: 
  544: $(objpfx)loadfail: $(libdl)
  545: LDFLAGS-loadfail = -rdynamic
  546: 
  547: $(objpfx)loadfail.out: $(objpfx)failobj.so
  548: 
  549: $(objpfx)multiload: $(libdl)
  550: LDFLAGS-multiload = -rdynamic
  551: CFLAGS-multiload.c = -DOBJDIR=\"$(elf-objpfx)\"
  552: 
  553: $(objpfx)multiload.out: $(objpfx)testobj1.so
  554: 
  555: $(objpfx)origtest: $(libdl)
  556: LDFLAGS-origtest = -rdynamic
  557: $(objpfx)origtest.out: $(objpfx)testobj1.so
  558: 
  559: ifeq ($(have-thread-library),yes)
  560: $(objpfx)resolvfail: $(libdl) $(shared-thread-library)
  561: else
  562: $(objpfx)resolvfail: $(libdl)
  563: endif
  564: 
  565: $(objpfx)constload1: $(libdl)
  566: $(objpfx)constload1.out: $(objpfx)constload2.so $(objpfx)constload3.so
  567: 
  568: $(objpfx)circleload1: $(libdl)
  569: $(objpfx)circleload1.out: $(objpfx)circlemod1.so \
  570:                           $(objpfx)circlemod1a.so
  571: 
  572: $(objpfx)circlemod1.so: $(objpfx)circlemod2.so
  573: $(objpfx)circlemod2.so: $(objpfx)circlemod3.so
  574: $(objpfx)circlemod1a.so: $(objpfx)circlemod2a.so
  575: $(objpfx)circlemod2a.so: $(objpfx)circlemod3a.so
  576: 
  577: $(objpfx)order: $(addprefix $(objpfx),dep4.so dep3.so dep2.so dep1.so)
  578: 
  579: $(objpfx)order.out: $(objpfx)order
  580:         $(elf-objpfx)$(rtld-installed-name) \
  581:           --library-path $(rpath-link)$(patsubst %,:%,$(sysdep-library-path)) \
  582:           $(objpfx)order > $@
  583:         (echo "0123456789" | cmp $@ -) > /dev/null
  584: 
  585: $(objpfx)vismain: $(addprefix $(objpfx),vismod1.so vismod2.so)
  586: $(objpfx)vismain.out: $(addprefix $(objpfx),vismod3.so)
  587: vismain-ENV = LD_PRELOAD=$(addprefix $(objpfx),vismod3.so)
  588: 
  589: $(objpfx)noload: $(objpfx)testobj1.so
  590: LDFLAGS-noload = -rdynamic
  591: $(objpfx)noload.out: $(objpfx)testobj5.so
  592: 
  593: LDFLAGS-nodelete = -rdynamic
  594: LDFLAGS-nodelmod1.so = -Wl,--enable-new-dtags,-z,nodelete
  595: LDFLAGS-nodelmod4.so = -Wl,--enable-new-dtags,-z,nodelete
  596: $(objpfx)nodelete: $(libdl)
  597: $(objpfx)nodelete.out: $(objpfx)nodelmod1.so $(objpfx)nodelmod2.so \
  598:                        $(objpfx)nodelmod3.so
  599: 
  600: LDFLAGS-nodlopenmod.so = -Wl,--enable-new-dtags,-z,nodlopen
  601: $(objpfx)nodlopen: $(libdl)
  602: $(objpfx)nodlopen.out: $(objpfx)nodlopenmod.so
  603: 
  604: $(objpfx)nodlopenmod2.so: $(objpfx)nodlopenmod.so
  605: $(objpfx)nodlopen2: $(libdl)
  606: $(objpfx)nodlopen2.out: $(objpfx)nodlopenmod2.so
  607: 
  608: $(objpfx)filtmod1.so: $(objpfx)filtmod1.os $(objpfx)filtmod2.so
  609:         $(LINK.o) -shared -o $@ -B$(csu-objpfx) $(LDFLAGS.so) \
  610:                   -L$(subst :, -L,$(rpath-link)) \
  611:                   -Wl,-rpath-link=$(rpath-link) \
  612:                   $< -Wl,-F,$(objpfx)filtmod2.so
  613: $(objpfx)filter: $(objpfx)filtmod1.so
  614: 
  615: $(objpfx)unload: $(libdl)
  616: $(objpfx)unload.out: $(objpfx)unloadmod.so
  617: 
  618: $(objpfx)reldep: $(libdl)
  619: $(objpfx)reldep.out: $(objpfx)reldepmod1.so $(objpfx)reldepmod2.so
  620: 
  621: $(objpfx)reldep2: $(libdl)
  622: $(objpfx)reldep2.out: $(objpfx)reldepmod1.so $(objpfx)reldepmod3.so
  623: 
  624: $(objpfx)reldep3: $(libdl)
  625: $(objpfx)reldep3.out: $(objpfx)reldepmod1.so $(objpfx)reldepmod4.so
  626: 
  627: $(objpfx)reldep4: $(libdl)
  628: $(objpfx)reldep4.out: $(objpfx)reldep4mod1.so $(objpfx)reldep4mod2.so
  629: 
  630: $(objpfx)next: $(objpfx)nextmod1.so $(objpfx)nextmod2.so $(libdl)
  631: 
  632: $(objpfx)unload2: $(libdl)
  633: $(objpfx)unload2.out: $(objpfx)unload2mod.so $(objpfx)unload2dep.so
  634: 
  635: $(objpfx)lateglobal: $(libdl)
  636: $(objpfx)lateglobal.out: $(objpfx)ltglobmod1.so $(objpfx)ltglobmod2.so
  637: 
  638: $(objpfx)tst-pathopt: $(libdl)
  639: $(objpfx)tst-pathopt.out: tst-pathopt.sh $(objpfx)tst-pathopt \
  640:                           $(objpfx)pathoptobj.so
  641:         $(SHELL) -e $< $(common-objpfx)
  642: 
  643: $(objpfx)initfirst: $(libdl)
  644: $(objpfx)initfirst.out: $(objpfx)firstobj.so
  645: 
  646: $(objpfx)global: $(objpfx)globalmod1.so
  647: $(objpfx)global.out: $(objpfx)reldepmod1.so
  648: 
  649: $(objpfx)dblload: $(libdl)
  650: $(objpfx)dblload.out: $(objpfx)dblloadmod1.so $(objpfx)dblloadmod2.so
  651: 
  652: $(objpfx)dblunload: $(libdl)
  653: $(objpfx)dblunload.out: $(objpfx)dblloadmod1.so $(objpfx)dblloadmod2.so
  654: 
  655: $(objpfx)reldep5: $(libdl)
  656: $(objpfx)reldep5.out: $(objpfx)reldepmod5.so $(objpfx)reldepmod6.so
  657: 
  658: $(objpfx)reldep6: $(libdl)
  659: $(objpfx)reldep6.out: $(objpfx)reldep6mod3.so $(objpfx)reldep6mod4.so
  660: 
  661: $(objpfx)reldep7: $(libdl)
  662: $(objpfx)reldep7.out: $(objpfx)reldep7mod1.so $(objpfx)reldep7mod2.so
  663: 
  664: $(objpfx)reldep8: $(libdl)
  665: $(objpfx)reldep8.out: $(objpfx)reldep8mod3.so
  666: 
  667: LDFLAGS-nodel2mod2.so = -Wl,--enable-new-dtags,-z,nodelete
  668: $(objpfx)nodelete2: $(libdl)
  669: $(objpfx)nodelete2.out: $(objpfx)nodel2mod3.so
  670: 
  671: $(objpfx)reldep9: $(libdl)
  672: $(objpfx)reldep9.out: $(objpfx)reldep9mod3.so
  673: 
  674: $(objpfx)tst-tls3: $(objpfx)tst-tlsmod1.so
  675: 
  676: $(objpfx)tst-tls4: $(libdl)
  677: $(objpfx)tst-tls4.out: $(objpfx)tst-tlsmod2.so
  678: 
  679: $(objpfx)tst-tls5: $(libdl)
  680: $(objpfx)tst-tls5.out: $(objpfx)tst-tlsmod2.so
  681: 
  682: $(objpfx)tst-tls6: $(libdl)
  683: $(objpfx)tst-tls6.out: $(objpfx)tst-tlsmod2.so
  684: 
  685: $(objpfx)tst-tls7: $(libdl)
  686: $(objpfx)tst-tls7.out: $(objpfx)tst-tlsmod3.so
  687: 
  688: $(objpfx)tst-tls8: $(libdl)
  689: $(objpfx)tst-tls8.out: $(objpfx)tst-tlsmod3.so $(objpfx)tst-tlsmod4.so
  690: 
  691: $(objpfx)tst-tls9: $(libdl)
  692: $(objpfx)tst-tls9.out: $(objpfx)tst-tlsmod5.so $(objpfx)tst-tlsmod6.so
  693: 
  694: $(objpfx)tst-tls10: $(objpfx)tst-tlsmod8.so
  695: 
  696: $(objpfx)tst-tls11: $(objpfx)tst-tlsmod10.so
  697: 
  698: $(objpfx)tst-tls12: $(objpfx)tst-tlsmod12.so
  699: 
  700: $(objpfx)tst-tls13: $(libdl)
  701: $(objpfx)tst-tls13.out: $(objpfx)tst-tlsmod13a.so
  702: 
  703: $(objpfx)tst-tls14: $(objpfx)tst-tlsmod14a.so $(libdl)
  704: $(objpfx)tst-tls14.out: $(objpfx)tst-tlsmod14b.so
  705: 
  706: $(objpfx)tst-tls15: $(libdl)
  707: $(objpfx)tst-tls15.out: $(objpfx)tst-tlsmod15a.so $(objpfx)tst-tlsmod15b.so
  708: 
  709: $(objpfx)tst-tls-dlinfo: $(libdl)
  710: $(objpfx)tst-tls-dlinfo.out: $(objpfx)tst-tlsmod2.so
  711: 
  712: 
  713: 
  714: CFLAGS-tst-align.c = $(stack-align-test-flags)
  715: CFLAGS-tst-align2.c = $(stack-align-test-flags)
  716: CFLAGS-tst-alignmod.c = $(stack-align-test-flags)
  717: CFLAGS-tst-alignmod2.c = $(stack-align-test-flags)
  718: $(objpfx)tst-align: $(libdl)
  719: $(objpfx)tst-align.out: $(objpfx)tst-alignmod.so
  720: $(objpfx)tst-align2: $(objpfx)tst-alignmod2.so
  721: 
  722: $(objpfx)unload3: $(libdl)
  723: $(objpfx)unload3.out: $(objpfx)unload3mod1.so $(objpfx)unload3mod2.so \
  724:                       $(objpfx)unload3mod3.so $(objpfx)unload3mod4.so
  725: 
  726: $(objpfx)unload4: $(libdl)
  727: $(objpfx)unload4.out: $(objpfx)unload4mod1.so $(objpfx)unload4mod3.so
  728: 
  729: $(objpfx)unload5: $(libdl)
  730: $(objpfx)unload5.out: $(objpfx)unload3mod1.so $(objpfx)unload3mod2.so \
  731:                       $(objpfx)unload3mod3.so $(objpfx)unload3mod4.so
  732: 
  733: $(objpfx)unload6: $(libdl)
  734: $(objpfx)unload6.out: $(objpfx)unload6mod1.so $(objpfx)unload6mod2.so \
  735:                       $(objpfx)unload6mod3.so
  736: 
  737: $(objpfx)unload7: $(libdl)
  738: $(objpfx)unload7.out: $(objpfx)unload7mod1.so $(objpfx)unload7mod2.so
  739: unload7-ENV = MALLOC_PERTURB_=85
  740: 
  741: ifdef libdl
  742: $(objpfx)tst-tls9-static: $(common-objpfx)dlfcn/libdl.a
  743: $(objpfx)tst-tls9-static.out: $(objpfx)tst-tlsmod5.so $(objpfx)tst-tlsmod6.so
  744: endif
  745: 
  746: ifeq ($(have-z-execstack),yes)
  747: $(objpfx)tst-execstack: $(libdl)
  748: $(objpfx)tst-execstack.out: $(objpfx)tst-execstack-mod.so
  749: LDFLAGS-tst-execstack = -Wl,-z,noexecstack
  750: LDFLAGS-tst-execstack-mod = -Wl,-z,execstack
  751: 
  752: $(objpfx)tst-execstack-needed: $(objpfx)tst-execstack-mod.so
  753: LDFLAGS-tst-execstack-needed = -Wl,-z,noexecstack
  754: 
  755: LDFLAGS-tst-execstack-prog = -Wl,-z,execstack
  756: endif
  757: 
  758: $(objpfx)tst-array1.out: $(objpfx)tst-array1
  759:         $(elf-objpfx)$(rtld-installed-name) \
  760:           --library-path $(rpath-link)$(patsubst %,:%,$(sysdep-library-path)) \
  761:           $(objpfx)tst-array1 > $@
  762:         cmp $@ tst-array1.exp > /dev/null
  763: 
  764: $(objpfx)tst-array1-static.out: $(objpfx)tst-array1-static
  765:         $(objpfx)tst-array1-static > $@
  766:         cmp $@ tst-array1.exp > /dev/null
  767: 
  768: $(objpfx)tst-array2: $(objpfx)tst-array2dep.so
  769: $(objpfx)tst-array2.out: $(objpfx)tst-array2
  770:         $(elf-objpfx)$(rtld-installed-name) \
  771:           --library-path $(rpath-link)$(patsubst %,:%,$(sysdep-library-path)) \
  772:           $(objpfx)tst-array2 > $@
  773:         cmp $@ tst-array2.exp > /dev/null
  774: 
  775: $(objpfx)tst-array3.out: $(objpfx)tst-array3
  776:         $(elf-objpfx)$(rtld-installed-name) \
  777:           --library-path $(rpath-link)$(patsubst %,:%,$(sysdep-library-path)) \
  778:           $(objpfx)tst-array3 > $@
  779:         cmp $@ tst-array1.exp > /dev/null
  780: 
  781: $(objpfx)tst-array4: $(libdl)
  782: $(objpfx)tst-array4.out: $(objpfx)tst-array4 $(objpfx)tst-array2dep.so<