From 65ae84177ac72724a1110b1c9909eb8403dd7926 Mon Sep 17 00:00:00 2001
From: "H.J. Lu" <hjl.tools@gmail.com>
Date: Thu, 20 Dec 2012 16:49:58 -0800
Subject: [PATCH 3/3] Add --enable-dynamic-test configure option

---
 ChangeLog.dynamic-test      | 167 ++++++++++++++++++++++++++++++++++++++++++++
 Makeconfig                  |  83 ++++++++++++++++++----
 Makefile                    |   2 +-
 Makerules                   |   8 +--
 Rules                       |  23 ++++--
 catgets/Makefile            |   2 +-
 catgets/test-gencat.sh      |   4 +-
 config.make.in              |   1 +
 configure                   |  13 ++++
 configure.in                |   7 ++
 elf/Makefile                |  32 ++++-----
 grp/Makefile                |   2 +-
 grp/tst_fgetgrent.sh        |  10 +--
 iconvdata/Makefile          |   2 +-
 iconvdata/tst-table.sh      |   6 +-
 iconvdata/tst-tables.sh     |   4 +-
 intl/Makefile               |  10 +--
 intl/tst-gettext.sh         |   4 +-
 intl/tst-gettext2.sh        |   4 +-
 intl/tst-gettext4.sh        |   4 +-
 intl/tst-gettext6.sh        |   4 +-
 intl/tst-translit.sh        |   4 +-
 io/Makefile                 |   2 +-
 libio/Makefile              |   2 +-
 libio/test-freopen.sh       |   4 +-
 localedata/Makefile         |  21 +++---
 localedata/sort-test.sh     |   6 +-
 localedata/tst-fmon.sh      |   5 +-
 localedata/tst-mbswcs.sh    |  12 ++--
 localedata/tst-numeric.sh   |   4 +-
 localedata/tst-trans.sh     |   3 +-
 malloc/Makefile             |   2 +-
 malloc/tst-mtrace.sh        |   4 +-
 nptl/Makefile               |  12 ++--
 nptl/tst-tls6.sh            |   6 +-
 posix/Makefile              |  12 ++--
 posix/globtest.sh           | 101 +++++++++++++--------------
 posix/wordexp-tst.sh        |  22 +++---
 rt/Makefile                 |   2 +-
 stdio-common/Makefile       |   6 +-
 stdio-common/tst-printf.sh  |   4 +-
 stdio-common/tst-unbputc.sh |   4 +-
 stdlib/Makefile             |   2 +-
 stdlib/tst-fmtmsg.sh        |   4 +-
 string/Makefile             |   2 +-
 45 files changed, 442 insertions(+), 196 deletions(-)
 create mode 100644 ChangeLog.dynamic-test

diff --git a/ChangeLog.dynamic-test b/ChangeLog.dynamic-test
new file mode 100644
index 0000000..1a719c0
--- /dev/null
+++ b/ChangeLog.dynamic-test
@@ -0,0 +1,167 @@
+2012-12-08  H.J. Lu  <hongjiu.lu@intel.com>
+
+	* Makeconfig (+link-pie-before-libc): New.
+	(+link-pie-after-libc): Likewise.
+	(+link-pie-tests): Likewise.
+	(+link-pie): Rewritten.
+	(link-before-libc): Remove $(config-LDFLAGS).
+	(+link): Add $(rtld-LDFLAGS) after $(+link-before-libc).
+	(+link-tests): Add $(rtld-tests-LDFLAGS) after $(+link-before-libc).
+	(config-LDFLAGS): Renamed to ...
+	(rtld-LDFLAGS): This.
+	(rtld-tests-LDFLAGS): New macro.
+	(link-libc-rpath-link): Likewise.
+	(link-libc-tests-rpath-link): Likewise.
+	(link-libc-before-gnulib): Remove -Wl,-rpath-link=$(rpath-link).
+	(link-libc): Prepand $(link-libc-rpath-link).
+	(link-libc-tests): Prepand $(link-libc-tests-rpath-link).
+	(test-program-prefix): New macro.
+	(test-via-rtld-prefix): Likewise.
+	(test-program-cmd): Likewise.
+	(host-test-program-cmd): Likewise.
+	* Makefile ($(common-objpfx)testrun.sh): Replace
+	$(run-program-prefix) with $(test-program-prefix).
+	* Makerules ($(LINK.o)): Replace $(config-LDFLAGS) with
+	$(rtld-LDFLAGS).
+	($(common-objpfx)shlib.lds): Likewise.
+	(build-module-helper): Likewise.
+	($(common-objpfx)format.lds): Likewise.
+	* Rules (binaries-pie-tests): New.
+	(binaries-pie-notests): Likewise.
+	(binaries-pie): Rewritten.
+	($(addprefix $(objpfx),$(binaries-pie))): Renamed to ...
+	($(addprefix $(objpfx),$(binaries-pie-notests))): This.
+	($(addprefix $(objpfx),$(binaries-pie-tests))): New.
+	(make-test-out): Replace $(host-built-program-cmd) with
+	$(host-test-program-cmd).
+	* config.make.in (build-dynamic-test): New variable.
+	* configure.in (--enable-dynamic-test): New configure option.
+	(dynamic_test): New AC_SUBST.
+	* configure: Regenerated.
+	* catgets/Makefile ($(objpfx)test-gencat.out): Replace
+	$(built-program-cmd) with $(test-program-cmd).
+	* catgets/test-gencat.sh (run_program_cmd): Renamed to ...
+	(test_program_cmd): This.
+	* elf/Makefile ($(objpfx)order.out): Run test with
+	$(test-program-prefix).
+	($(objpfx)order2.out): Likewise.
+	($(objpfx)tst-initorder.out): Likewise.
+	($(objpfx)tst-initorder2.out): Likewise.
+	($(objpfx)tst-array1.out): Replace $(built-program-cmd) with
+	$(test-program-cmd).
+	($(objpfx)tst-array1-static.out): Likewise.
+	($(objpfx)tst-array2.out): Likewise.
+	($(objpfx)tst-array3.out): Likewise.
+	($(objpfx)tst-array4.out): Likewise.
+	($(objpfx)tst-array5.out): Likewise.
+	($(objpfx)tst-array5-static.out): Likewise.
+	(tst-stackguard1-ARGS): Replace $(built-program-cmd) with
+	$(test-program-cmd).
+	* grp/Makefile ($(objpfx)tst_fgetgrent.out): Replace
+	$(run-program-prefix) with $(test-program-prefix).
+	* grp/tst_fgetgrent.sh (run_program_prefix): Renamed to ...
+	(test_program_prefix): This.
+	* iconvdata/Makefile ($(objpfx)tst-tables.out): Replace
+	$(run-program-prefix) with $(test-program-prefix).
+	* iconvdata/tst-table.sh (run_program_prefix): Renamed to ...
+	(test_program_prefix): This.
+	* iconvdata/tst-tables.sh: Likewise.
+	* intl/Makefile ($(objpfx)tst-gettext.out): Replace
+	$(run-program-prefix) with $(test-program-prefix).
+	($(objpfx)tst-translit.out): Likewise.
+	($(objpfx)tst-gettext2.out): Likewise.
+	($(objpfx)tst-gettext4.out): Likewise.
+	($(objpfx)tst-gettext6.out): Likewise.
+	* intl/tst-gettext.sh (run_program_prefix): Renamed to ...
+	(test_program_prefix): This.
+	* intl/tst-gettext2.sh: Likewise.
+	* intl/tst-gettext4.sh  Likewise.
+	* intl/tst-gettext6.sh: Likewise.
+	* intl/tst-translit.sh: Likewise.
+	* io/Makefile ($(objpfx)ftwtest.out): Replace $(run-program-cmd)
+	with $(test-program-cmd).
+	* libio/Makefile ($(objpfx)test-freopen.out): Replace
+	$(run-program-prefix) with $(test-program-prefix).
+	* libio/test-freopen.sh (run_program_prefix): Renamed to ...
+	(test_program_prefix): This.
+	* malloc/Makefile ($(objpfx)tst-mtrace.out): Replace
+	$(run-program-prefix) with $(test-program-prefix).
+	* malloc/tst-mtrace.sh (run_program_prefix): Renamed to ...
+	(test_program_prefix): This.
+	* posix/Makefile ($(objpfx)globtest.out): Replace
+	$(run-via-rtld-prefix) and $(test-wrapper) with
+	$(test-program-prefix) and $(test-via-rtld-prefix).
+	($(objpfx)wordexp-tst.out): Replace $(run-program-prefix) with
+	$(test-program-prefix).
+	(tst-exec-ARGS): Replace $(host-built-program-cmd) with
+	$(host-test-program-cmd).
+	(tst-spawn-ARGS): Likewise.
+	($(objpfx)tst-rxspencer-mem): Replace $(run-program-prefix) with
+	$(test-program-prefix).
+	* posix/globtest.sh (un_via_rtld_prefix): Renamed to ...
+	(test_via_rtld_prefix): This.
+	(test_wrapper): Renamed to ...
+	(test_program_prefix): This.
+	(run_program_prefix): Replaced by test_program_prefix.
+	* posix/wordexp-tst.sh (run_program_prefix): Renamed to ...
+	(test_program_prefix): This.
+	* rt/Makefile (tst-mqueue7-ARGS): Replace $(host-built-program-cmd)
+	with $(host-test-program-cmd).
+	* stdio-common/Makefile ($(objpfx)tst-unbputc.out): Replace
+	$(run-program-prefix) with $(test-program-prefix).
+	($(objpfx)tst-printf.out): Likewise.
+	($(objpfx)tst-setvbuf1.out): Replace $(built-program-cmd) with
+	$(test-program-cmd).
+	* stdio-common/tst-printf.sh (run_program_prefix): Renamed to ...
+	(test_program_prefix): This.
+	* stdio-common/tst-unbputc.sh: Likewise.
+	* stdlib/Makefile ($(objpfx)tst-fmtmsg.out): Replace
+	$(run-program-prefix) with $(test-program-prefix).
+	* stdlib/tst-fmtmsg.sh (run_program_prefix): Renamed to ...
+	(test_program_prefix): This.
+	* string/Makefile ($(objpfx)tst-svc.out):  Replace
+	$(built-program-cmd) with $(test-program-cmd).
+
+localedata/
+
+2012-12-08  H.J. Lu  <hongjiu.lu@intel.com>
+
+	* Makefile ($(objpfx)sort-test.out): Replace
+	$(run-program-prefix) with $(test-program-prefix).
+	($(objpfx)tst-numeric.out): Likewise.
+	($(objpfx)tst-mbswcs.out): Likewise.
+	($(objpfx)tst-fmon.out): Add $(test-program-prefix).
+	($(objpfx)tst-trans.out): Likewise.
+	($(objpfx)tst-rpmatch.out): Replace $(built-program-cmd) with
+	$(test-program-cmd).
+	($(objpfx)tst-ctype.out): Likewise.
+	($(objpfx)tst-wctype.out): Likewise.
+	($(objpfx)tst-langinfo.out): Likewise.
+	(bug-setlocale1-ARGS): Replace $(built-program-cmd) with
+	$(test-program-cmd).
+	* sort-test.sh (run_program_prefix): Renamed to ...
+	(test_program_prefix): This.
+	* tst-mbswcs.sh: Likewise.
+	* tst-numeric.sh: Likewise.
+	* tst-wctype.sh: Likewise.
+	* tst-fmon.sh (test_program_prefix): New. Replace
+	${run_program_prefix} with ${test_program_prefix} when running.
+	tst-fmon.
+	* tst-trans.sh: (test_program_prefix): New.  Replace
+	${run_program_prefix} with ${test_program_prefix} when running
+	tst-trans.
+
+nptl/
+
+2012-12-08  H.J. Lu  <hongjiu.lu@intel.com>
+
+	* Makefile (tst-cancel7-ARGS: Replace $(host-built-program-cmd)
+	with $(host-test-program-cmd).
+	(tst-exec4-ARGS): Likewise.
+	(tst-stackguard1-ARGS): Likewise.
+	($(objpfx)tst-tls6.out): Don't pass $(elf-objpfx) to tst-tls6.sh.
+	Replace $(rtld-installed-name) with $(test-via-rtld-prefix).
+	* tst-tls6.sh (elf_objpfx): Removed.
+	(rtld_installed_name): Renamed to ...
+	(test_via_rtld_prefix): This.
+	(tst_tls5): Prepend ${test_via_rtld_prefix}.
diff --git a/Makeconfig b/Makeconfig
index 70a3d9d..503244a 100644
--- a/Makeconfig
+++ b/Makeconfig
@@ -380,8 +380,8 @@ endif
 
 # Command for linking PIE programs with the C library.
 ifndef +link-pie
-+link-pie = $(CC) -pie -Wl,-O1 -nostdlib -nostartfiles -o $@ \
-	     $(sysdep-LDFLAGS) $(config-LDFLAGS) $(LDFLAGS) $(LDFLAGS-$(@F)) \
++link-pie-before-libc = $(CC) -pie -Wl,-O1 -nostdlib -nostartfiles -o $@ \
+	     $(sysdep-LDFLAGS) $(LDFLAGS) $(LDFLAGS-$(@F)) \
 	     $(combreloc-LDFLAGS) $(relro-LDFLAGS) $(hashstyle-LDFLAGS) \
 	     $(addprefix $(csu-objpfx),S$(start-installed-name)) \
 	     $(+preinit) $(+prectorS) \
@@ -389,7 +389,12 @@ ifndef +link-pie
 						    S$(start-installed-name))\
 			  $(+preinit) $(link-extra-libs) \
 			  $(common-objpfx)libc% $(+postinit),$^) \
-	     $(link-extra-libs) $(link-libc) $(+postctorS) $(+postinit)
+	     $(link-extra-libs)
++link-pie-after-libc = $(+postctorS) $(+postinit)
++link-pie = $(+link-pie-before-libc) $(rtld-LDFLAGS) $(link-libc) \
+	    $(+link-pie-after-libc)
++link-pie-tests = $(+link-pie-before-libc) $(rtld-tests-LDFLAGS) \
+		  $(link-libc-tests) $(+link-pie-after-libc)
 endif
 # Command for statically linking programs with the C library.
 ifndef +link-static
@@ -412,7 +417,7 @@ endif
 ifndef +link
 ifeq (yes,$(build-shared))
 +link-before-libc = $(CC) -nostdlib -nostartfiles -o $@ \
-	      $(sysdep-LDFLAGS) $(config-LDFLAGS) $(LDFLAGS) $(LDFLAGS-$(@F)) \
+	      $(sysdep-LDFLAGS) $(LDFLAGS) $(LDFLAGS-$(@F)) \
 	      $(combreloc-LDFLAGS) $(relro-LDFLAGS) $(hashstyle-LDFLAGS) \
 	      $(addprefix $(csu-objpfx),$(start-installed-name)) \
 	      $(+preinit) $(+prector) \
@@ -422,8 +427,10 @@ ifeq (yes,$(build-shared))
 			   $(common-objpfx)libc% $(+postinit),$^) \
 	      $(link-extra-libs)
 +link-after-libc = $(+postctor) $(+postinit)
-+link = $(+link-before-libc) $(link-libc) $(+link-after-libc)
-+link-tests = $(+link-before-libc) $(link-libc-tests) $(+link-after-libc)
++link = $(+link-before-libc) $(rtld-LDFLAGS) $(link-libc) \
+	$(+link-after-libc)
++link-tests = $(+link-before-libc) $(rtld-tests-LDFLAGS) \
+	      $(link-libc-tests) $(+link-after-libc)
 else
 +link = $(+link-static)
 +link-tests = $(+link-static-tests)
@@ -441,9 +448,16 @@ ifndef +link-bounded
 			   $(common-objpfx)libc% $(+postinit),$^) \
 	      $(link-extra-libs-bounded) $(link-libc-bounded) $(+postctorT) $(+postinit)
 endif
-ifndef config-LDFLAGS
 ifeq (yes,$(build-shared))
-config-LDFLAGS = -Wl,-dynamic-linker=$(slibdir)/$(rtld-installed-name)
+ifndef rtld-LDFLAGS
+rtld-LDFLAGS = -Wl,-dynamic-linker=$(slibdir)/$(rtld-installed-name)
+endif
+ifndef rtld-tests-LDFLAGS
+ifeq (yes,$(build-dynamic-test))
+rtld-tests-LDFLAGS = -Wl,-dynamic-linker=$(common-objpfx)elf/ld.so
+else
+rtld-tests-LDFLAGS = $(rtld-LDFLAGS)
+endif
 endif
 endif
 ifndef link-libc
@@ -451,12 +465,19 @@ ifeq (yes,$(build-shared))
 # We need the versioned name of libc.so in the deps of $(others) et al
 # so that the symlink to libc.so is created before anything tries to
 # run the linked programs.
-link-libc-before-gnulib = -Wl,-rpath-link=$(rpath-link) \
-	    $(common-objpfx)libc.so$(libc.so-version) \
-	    $(common-objpfx)$(patsubst %,$(libtype.oS),c) \
-	    $(as-needed) $(common-objpfx)elf/ld.so $(no-as-needed)
-link-libc = $(link-libc-before-gnulib) $(gnulib)
-link-libc-tests = $(link-libc-before-gnulib) $(gnulib-tests)
+link-libc-rpath-link = -Wl,-rpath-link=$(rpath-link)
+ifeq (yes,$(build-dynamic-test))
+link-libc-tests-rpath-link = -Wl,-rpath=$(rpath-link)
+else
+link-libc-tests-rpath-link = $(link-libc-rpath-link)
+endif
+link-libc-before-gnulib = $(common-objpfx)libc.so$(libc.so-version) \
+			  $(common-objpfx)$(patsubst %,$(libtype.oS),c) \
+			  $(as-needed) $(common-objpfx)elf/ld.so \
+			  $(no-as-needed)
+link-libc = $(link-libc-rpath-link) $(link-libc-before-gnulib) $(gnulib)
+link-libc-tests = $(link-libc-tests-rpath-link) \
+		  $(link-libc-before-gnulib) $(gnulib-tests)
 # This is how to find at build-time things that will be installed there.
 rpath-dirs = math elf dlfcn nss nis rt resolv crypt
 rpath-link = \
@@ -629,6 +650,40 @@ ifndef LD
 LD := ld -X
 endif
 
+# $(test-via-rtld-prefix) is a command that, when prepended to the name
+# of a test program built with the newly built library, produces a command
+# that, executed on the host for which the library is built, runs that
+# program.  For the statically-linked %-bp test programs, and for
+# tests listed in tests-static or xtests-static as well as when test
+# programs are hardcoded to the newly built libraries, it is empty.
+
+# $(test-program-prefix) is a command that, when prepended to the name
+# of a test program built with the newly built library, produces a command
+# that, executed on the build system on which "make" is run, runs that
+# test program.
+
+# $(test-program-cmd) is a command that, executed on the build system
+# on which "make" is run, runs the newly built test program that is the
+# second dependency of the makefile target in which
+# $(test-program-cmd) is used.
+
+# $(host-test-program-cmd) is a command that, executed on the host
+# for which the library is built, runs the newly built test program that
+# is the second dependency of the makefile target in which
+# $(host-test-program-cmd) is used.
+
+ifeq (yes,$(build-dynamic-test))
+test-via-rtld-prefix = 
+test-program-prefix = $(test-wrapper)
+test-program-cmd = $(test-wrapper) $(built-program-file)
+host-test-program-cmd = $(built-program-file)
+else
+test-via-rtld-prefix = $(run-via-rtld-prefix)
+test-program-prefix = $(run-program-prefix)
+test-program-cmd = $(built-program-cmd)
+host-test-program-cmd = $(host-built-program-cmd)
+endif
+
 # Extra flags to pass to GCC.
 ifeq ($(all-warnings),yes)
 +gccwarn := -Wall -Wwrite-strings -Winline -Wcast-qual -Wbad-function-cast -Wmissing-noreturn -Wmissing-prototypes -Wmissing-declarations -Wcomment -Wcomments -Wtrigraphs -Wsign-compare -Wfloat-equal -Wmultichar
diff --git a/Makefile b/Makefile
index 6c1e392..a68ca21 100644
--- a/Makefile
+++ b/Makefile
@@ -155,7 +155,7 @@ $(common-objpfx)testrun.sh: $(common-objpfx)config.make \
 	 echo 'builddir=`dirname "$$0"`'; \
 	 echo 'GCONV_PATH="$${builddir}/iconvdata" \'; \
 	 echo 'exec $(subst $(common-objdir),"$${builddir}",\
-			    $(run-program-prefix)) $${1+"$$@"}'; \
+			    $(test-program-prefix)) $${1+"$$@"}'; \
 	) > $@T
 	chmod a+x $@T
 	mv -f $@T $@
diff --git a/Makerules b/Makerules
index 56dc60b..159d386 100644
--- a/Makerules
+++ b/Makerules
@@ -447,7 +447,7 @@ lib%.so: lib%_pic.a $(+preinit) $(+postinit) $(+interp)
 
 define build-shlib-helper
 $(LINK.o) -shared $(static-libgcc) -Wl,-O1 $(sysdep-LDFLAGS) \
-	  $(if $($(@F)-no-z-defs)$(no-z-defs),,-Wl,-z,defs) $(config-LDFLAGS) \
+	  $(if $($(@F)-no-z-defs)$(no-z-defs),,-Wl,-z,defs) $(rtld-LDFLAGS) \
 	  $(extra-B-$(@F:lib%.so=%).so) -B$(csu-objpfx) \
 	  $(extra-B-$(@F:lib%.so=%).so) $(load-map-file) \
 	  -Wl,-soname=lib$(libprefix)$(@F:lib%.so=%).so$($(@F)-version) \
@@ -465,7 +465,7 @@ else
 $(common-objpfx)shlib.lds: $(common-objpfx)config.make $(..)Makerules
 	$(LINK.o) -shared -Wl,-O1 \
 		  -nostdlib -nostartfiles \
-		  $(sysdep-LDFLAGS) $(config-LDFLAGS) $(LDFLAGS.so) \
+		  $(sysdep-LDFLAGS) $(rtld-LDFLAGS) $(LDFLAGS.so) \
 		  -Wl,--verbose 2>&1 | \
 	  sed > $@T \
 	      -e '/^=========/,/^=========/!d;/^=========/d' \
@@ -505,7 +505,7 @@ $(build-shlib-helper) -o $@ $(shlib-lds-flags) \
 endef
 
 define build-module-helper
-$(LINK.o) -shared $(static-libgcc) $(sysdep-LDFLAGS) $(config-LDFLAGS) \
+$(LINK.o) -shared $(static-libgcc) $(sysdep-LDFLAGS) $(rtld-LDFLAGS) \
 	  $(if $($(@F)-no-z-defs)$(no-z-defs),,-Wl,-z,defs) \
 	  -B$(csu-objpfx) $(load-map-file) \
 	  $(LDFLAGS.so) $(LDFLAGS-$(@F:%.so=%).so) \
@@ -909,7 +909,7 @@ $(common-objpfx)format.lds: $(..)scripts/output-format.sed \
 ifneq (unknown,$(output-format))
 	echo > $@.new 'OUTPUT_FORMAT($(output-format))'
 else
-	$(LINK.o) -shared $(sysdep-LDFLAGS) $(config-LDFLAGS) $(LDFLAGS.so) \
+	$(LINK.o) -shared $(sysdep-LDFLAGS) $(rtld-LDFLAGS) $(LDFLAGS.so) \
 		  -x c /dev/null -o $@.so -Wl,--verbose -v 2>&1 \
 	| sed -n -f $< > $@.new
 	test -s $@.new
diff --git a/Rules b/Rules
index 35e6ce0..6f2b031 100644
--- a/Rules
+++ b/Rules
@@ -114,9 +114,11 @@ binaries-static-notests = $(others-static)
 binaries-static-tests = $(tests-static) $(xtests-static)
 binaries-static = $(binaries-static-notests) $(binaries-static-tests)
 ifeq (yesyes,$(have-fpie)$(build-shared))
-binaries-pie = $(others-pie) $(tests-pie) $(xtests-pie)
+binaries-pie-tests = $(tests-pie) $(xtests-pie)
+binaries-pie-notests = $(others-pie)
 else
-binaries-pie =
+binaries-pie-tests =
+binaries-pie-notests =
 endif
 else
 binaries-all-notests =
@@ -125,9 +127,11 @@ binaries-all = $(binaries-all-tests)
 binaries-static-notests =
 binaries-static-tests =
 binaries-static =
-binaries-pie =
+binaries-pie-tests =
+binaries-pie-notests =
 endif
 
+binaries-pie = $(binaries-pie-tests) $(binaries-pie-notests)
 binaries-shared-tests = $(filter-out $(binaries-pie) $(binaries-static), \
 				     $(binaries-all-tests))
 binaries-shared-notests = $(filter-out $(binaries-pie) $(binaries-static), \
@@ -147,8 +151,15 @@ $(addprefix $(objpfx),$(binaries-shared-tests)): %: %.o \
 	$(+link-tests)
 endif
 
-ifneq "$(strip $(binaries-pie))" ""
-$(addprefix $(objpfx),$(binaries-pie)): %: %.o \
+ifneq "$(strip $(binaries-pie-tests))" ""
+$(addprefix $(objpfx),$(binaries-pie-tests)): %: %.o \
+  $(sort $(filter $(common-objpfx)lib%,$(link-libc))) \
+  $(addprefix $(csu-objpfx),start.o) $(+preinit) $(+postinit)
+	$(+link-pie-tests)
+endif
+
+ifneq "$(strip $(binaries-pie-notests))" ""
+$(addprefix $(objpfx),$(binaries-pie-notests)): %: %.o \
   $(sort $(filter $(common-objpfx)lib%,$(link-libc))) \
   $(addprefix $(csu-objpfx),start.o) $(+preinit) $(+postinit)
 	$(+link-pie)
@@ -182,7 +193,7 @@ ifneq "$(strip $(tests) $(xtests) $(test-srcs))" ""
 
 make-test-out = $(test-wrapper-env) \
 		GCONV_PATH=$(common-objpfx)iconvdata LC_ALL=C \
-		$($*-ENV) $(host-built-program-cmd) $($*-ARGS)
+		$($*-ENV) $(host-test-program-cmd) $($*-ARGS)
 $(objpfx)%-bp.out: %.input $(objpfx)%-bp
 	$(make-test-out) > $@ < $(word 1,$^)
 $(objpfx)%.out: %.input $(objpfx)%
diff --git a/catgets/Makefile b/catgets/Makefile
index bbd438a..ef3079f 100644
--- a/catgets/Makefile
+++ b/catgets/Makefile
@@ -75,7 +75,7 @@ $(objpfx)de.msg: xopen-msg.awk $(..)po/de.po
 
 $(objpfx)test-gencat.out: test-gencat.sh $(objpfx)test-gencat \
 			  $(objpfx)sample.SJIS.cat
-	$(SHELL) $< $(common-objpfx) '$(built-program-cmd)'
+	$(SHELL) $< $(common-objpfx) '$(test-program-cmd)'
 
 $(objpfx)sample.SJIS.cat: sample.SJIS $(objpfx)gencat
 	GCONV_PATH=$(common-objpfx)iconvdata LC_ALL=C \
diff --git a/catgets/test-gencat.sh b/catgets/test-gencat.sh
index 8557a3f..8129553 100755
--- a/catgets/test-gencat.sh
+++ b/catgets/test-gencat.sh
@@ -20,12 +20,12 @@
 set -e
 
 common_objpfx=$1
-run_program_cmd=$2
+test_program_cmd=$2
 
 # Run the test program.
 LOCPATH=${common_objpfx}localedata GCONV_PATH=${common_objpfx}iconvdata \
 NLSPATH=${common_objpfx}catgets/%N.%c.cat LC_ALL=ja_JP.SJIS \
-  ${run_program_cmd} \
+  ${test_program_cmd} \
     > ${common_objpfx}catgets/test-gencat.out
 
 # Compare with the expected result.
diff --git a/config.make.in b/config.make.in
index 7f1bbb5..efdfd84 100644
--- a/config.make.in
+++ b/config.make.in
@@ -101,6 +101,7 @@ force-install = @force_install@
 link-obsolete-rpc = @link_obsolete_rpc@
 build-nscd = @build_nscd@
 use-nscd = @use_nscd@
+build-dynamic-test= @dynamic_test@
 
 # Build tools.
 CC = @CC@
diff --git a/configure b/configure
index 8799b7d..7b7c0c7 100755
--- a/configure
+++ b/configure
@@ -659,6 +659,7 @@ libc_cv_nss_crypt
 all_warnings
 force_install
 bindnow
+dynamic_test
 oldest_abi
 use_default_link
 sysheaders
@@ -745,6 +746,7 @@ enable_shared
 enable_profile
 enable_versioning
 enable_oldest_abi
+enable_dynamic_test
 enable_stackguard_randomization
 enable_add_ons
 enable_hidden_plt
@@ -1397,6 +1399,8 @@ Optional Features:
                           objects [default=yes if supported]
   --enable-oldest-abi=ABI configure the oldest ABI supported [e.g. 2.2]
                           [default=glibc default]
+  --enable-dynamic-test   link dynamic tests with newly built glibc
+                          [default=no]
   --enable-stackguard-randomization
                           initialize __stack_chk_guard canary with a random
                           number at program start
@@ -3698,6 +3702,15 @@ _ACEOF
 fi
 
 
+# Check whether --enable-dynamic-test was given.
+if test "${enable_dynamic_test+set}" = set; then :
+  enableval=$enable_dynamic_test; dynamic_test=$enableval
+else
+  dynamic_test=no
+fi
+
+
+
 # Check whether --enable-stackguard-randomization was given.
 if test "${enable_stackguard_randomization+set}" = set; then :
   enableval=$enable_stackguard_randomization; enable_stackguard_randomize=$enableval
diff --git a/configure.in b/configure.in
index d369382..65ba4a3 100644
--- a/configure.in
+++ b/configure.in
@@ -146,6 +146,13 @@ else
 fi
 AC_SUBST(oldest_abi)
 
+AC_ARG_ENABLE([dynamic-test],
+	      AC_HELP_STRING([--enable-dynamic-test],
+			     [link dynamic tests with newly built glibc @<:@default=no@:>@]),
+	      [dynamic_test=$enableval],
+	      [dynamic_test=no])
+AC_SUBST(dynamic_test)
+
 AC_ARG_ENABLE([stackguard-randomization],
 	      AC_HELP_STRING([--enable-stackguard-randomization],
 			     [initialize __stack_chk_guard canary with a random number at program start]),
diff --git a/elf/Makefile b/elf/Makefile
index 6c7bc97..66e8ac5 100644
--- a/elf/Makefile
+++ b/elf/Makefile
@@ -642,9 +642,7 @@ $(objpfx)circlemod2a.so: $(objpfx)circlemod3a.so
 $(objpfx)order: $(addprefix $(objpfx),dep4.so dep3.so dep2.so dep1.so)
 
 $(objpfx)order.out: $(objpfx)order
-	$(test-wrapper) \
-	$(elf-objpfx)$(rtld-installed-name) \
-	  --library-path $(rpath-link)$(patsubst %,:%,$(sysdep-library-path)) \
+	$(test-program-prefix) \
 	  $(objpfx)order > $@
 	(echo "0123456789" | cmp $@ -) > /dev/null
 
@@ -852,36 +850,36 @@ LDFLAGS-tst-execstack-prog = -Wl,-z,execstack
 endif
 
 $(objpfx)tst-array1.out: tst-array1.exp $(objpfx)tst-array1
-	$(built-program-cmd) > $@
+	$(test-program-cmd) > $@
 	cmp $@ tst-array1.exp > /dev/null
 
 $(objpfx)tst-array1-static.out: tst-array1.exp $(objpfx)tst-array1-static
-	$(built-program-cmd) > $@
+	$(test-program-cmd) > $@
 	cmp $@ tst-array1.exp > /dev/null
 
 $(objpfx)tst-array2: $(objpfx)tst-array2dep.so
 $(objpfx)tst-array2.out: tst-array2.exp $(objpfx)tst-array2
-	$(built-program-cmd) > $@
+	$(test-program-cmd) > $@
 	cmp $@ tst-array2.exp > /dev/null
 
 $(objpfx)tst-array3.out: tst-array1.exp $(objpfx)tst-array3
-	$(built-program-cmd) > $@
+	$(test-program-cmd) > $@
 	cmp $@ tst-array1.exp > /dev/null
 
 $(objpfx)tst-array4: $(libdl)
 $(objpfx)tst-array4.out: tst-array4.exp $(objpfx)tst-array4 \
 			 $(objpfx)tst-array2dep.so
-	$(built-program-cmd) > $@
+	$(test-program-cmd) > $@
 	cmp $@ tst-array4.exp > /dev/null
 
 $(objpfx)tst-array5: $(objpfx)tst-array5dep.so
 $(objpfx)tst-array5.out: tst-array5.exp $(objpfx)tst-array5
-	$(built-program-cmd) > $@
+	$(test-program-cmd) > $@
 	cmp $@ tst-array5.exp > /dev/null
 
 $(objpfx)tst-array5-static.out: tst-array5-static.exp \
 				$(objpfx)tst-array5-static
-	$(built-program-cmd) > $@
+	$(test-program-cmd) > $@
 	cmp $@ tst-array5-static.exp > /dev/null
 
 CFLAGS-tst-pie1.c += $(pie-ccflag)
@@ -1030,9 +1028,7 @@ $(objpfx)tst-global1.out: $(objpfx)testobj6.so $(objpfx)testobj2.so
 $(objpfx)order2: $(libdl)
 $(objpfx)order2.out: $(objpfx)order2 $(objpfx)order2mod1.so \
 		     $(objpfx)order2mod2.so
-	$(test-wrapper) \
-	$(elf-objpfx)$(rtld-installed-name) \
-	  --library-path $(rpath-link)$(patsubst %,:%,$(sysdep-library-path)) \
+	$(test-program-prefix) \
 	  $(objpfx)order2 > $@
 	(echo "12345" | cmp $@ -) > /dev/null
 $(objpfx)order2mod1.so: $(objpfx)order2mod4.so
@@ -1042,7 +1038,7 @@ order2mod2.so-no-z-defs = yes
 LDFLAGS-order2mod1.so = $(no-as-needed)
 LDFLAGS-order2mod2.so = $(no-as-needed)
 
-tst-stackguard1-ARGS = --command "$(host-built-program-cmd) --child"
+tst-stackguard1-ARGS = --command "$(host-test-program-cmd) --child"
 tst-stackguard1-static-ARGS = --command "$(objpfx)tst-stackguard1-static --child"
 
 $(objpfx)tst-leaks1: $(libdl)
@@ -1125,9 +1121,7 @@ $(objpfx)tst-unique3.out: $(objpfx)tst-unique3lib2.so
 $(objpfx)tst-unique4: $(objpfx)tst-unique4lib.so
 
 $(objpfx)tst-initorder.out: $(objpfx)tst-initorder
-	$(test-wrapper) \
-	$(elf-objpfx)${rtld-installed-name} \
-	  --library-path $(rpath-link)$(patsubst %,:%,$(sysdep-library-path)) \
+	$(test-program-prefix) \
 	  $< > $@
 	cmp $@ tst-initorder.exp > /dev/null
 
@@ -1147,9 +1141,7 @@ object-suffixes-left := a b c d
 include $(o-iterator)
 
 $(objpfx)tst-initorder2.out: $(objpfx)tst-initorder2
-	$(test-wrapper) \
-	$(elf-objpfx)${rtld-installed-name} \
-	  --library-path $(rpath-link)$(patsubst %,:%,$(sysdep-library-path)) \
+	$(test-program-prefix) \
 	  $< > $@
 	cmp $@ tst-initorder2.exp > /dev/null
 
diff --git a/grp/Makefile b/grp/Makefile
index 99ea3a2..9585af4 100644
--- a/grp/Makefile
+++ b/grp/Makefile
@@ -55,7 +55,7 @@ ifeq ($(run-built-tests),yes)
 ifeq (yes,$(build-shared))
 tests: $(objpfx)tst_fgetgrent.out
 $(objpfx)tst_fgetgrent.out: tst_fgetgrent.sh $(objpfx)tst_fgetgrent
-	$(SHELL) $< $(common-objpfx) '$(run-program-prefix)'
+	$(SHELL) $< $(common-objpfx) '$(test-program-prefix)'
 
 endif
 endif
diff --git a/grp/tst_fgetgrent.sh b/grp/tst_fgetgrent.sh
index 0f21ee8..dc3a7d4 100644
--- a/grp/tst_fgetgrent.sh
+++ b/grp/tst_fgetgrent.sh
@@ -20,22 +20,22 @@
 set -e
 
 common_objpfx=$1; shift
-run_program_prefix=$1; shift
+test_program_prefix=$1; shift
 
 testout=${common_objpfx}/grp/tst_fgetgrent.out
 
 result=0
 
-${run_program_prefix} \
+${test_program_prefix} \
 ${common_objpfx}grp/tst_fgetgrent 0 > ${testout} || result=1
 
-${run_program_prefix} \
+${test_program_prefix} \
 ${common_objpfx}grp/tst_fgetgrent 1 >> ${testout} || result=1
 
-${run_program_prefix} \
+${test_program_prefix} \
 ${common_objpfx}grp/tst_fgetgrent 2 >> ${testout} || result=1
 
-${run_program_prefix} \
+${test_program_prefix} \
 ${common_objpfx}grp/tst_fgetgrent 3 >> ${testout} || result=1
 
 exit $result
diff --git a/iconvdata/Makefile b/iconvdata/Makefile
index 2840cff..ee83556 100644
--- a/iconvdata/Makefile
+++ b/iconvdata/Makefile
@@ -305,7 +305,7 @@ $(objpfx)tst-tables.out: tst-tables.sh $(objpfx)gconv-modules \
 			 $(addprefix $(objpfx),$(modules.so)) \
 			 $(objpfx)tst-table-from $(objpfx)tst-table-to
 	$(SHELL) $< $(common-objpfx) $(common-objpfx)iconvdata/ \
-		'$(run-program-prefix)' > $@
+		'$(test-program-prefix)' > $@
 
 do-tests-clean common-mostlyclean: tst-tables-clean
 
diff --git a/iconvdata/tst-table.sh b/iconvdata/tst-table.sh
index 5283ad5..1bd0a18 100755
--- a/iconvdata/tst-table.sh
+++ b/iconvdata/tst-table.sh
@@ -23,7 +23,7 @@
 
 common_objpfx=$1
 objpfx=$2
-run_program_prefix=$3
+test_program_prefix=$3
 charset=$4
 charmap=$5
 
@@ -60,12 +60,12 @@ else
 fi
 
 # iconv in one direction.
-${run_program_prefix} \
+${test_program_prefix} \
 ${objpfx}tst-table-from ${charset} \
   > ${objpfx}tst-${charset}.table
 
 # iconv in the other direction.
-${run_program_prefix} \
+${test_program_prefix} \
 ${objpfx}tst-table-to ${charset} | sort \
   > ${objpfx}tst-${charset}.inverse.table
 
diff --git a/iconvdata/tst-tables.sh b/iconvdata/tst-tables.sh
index 77d9d18..422a4ff 100755
--- a/iconvdata/tst-tables.sh
+++ b/iconvdata/tst-tables.sh
@@ -23,7 +23,7 @@
 
 common_objpfx=$1
 objpfx=$2
-run_program_prefix=$3
+test_program_prefix=$3
 
 status=0
 
@@ -262,7 +262,7 @@ while read charset charmap; do
   if test "$charset" = GB18030; then echo "This might take a while" 1>&2; fi
   case ${charset} in \#*) continue;; esac
   echo -n "Testing ${charset}" 1>&2
-  if ./tst-table.sh ${common_objpfx} ${objpfx} "${run_program_prefix}" \
+  if ./tst-table.sh ${common_objpfx} ${objpfx} "${test_program_prefix}" \
       ${charset} ${charmap} < /dev/null; then
     echo 1>&2
   else
diff --git a/intl/Makefile b/intl/Makefile
index c2a1698..b3167d0 100644
--- a/intl/Makefile
+++ b/intl/Makefile
@@ -74,18 +74,18 @@ $(codeset_mo): tstcodeset.po
 $(objpfx)mtrace-tst-gettext: $(objpfx)tst-gettext.out
 	$(common-objpfx)malloc/mtrace $(objpfx)tst-gettext.mtrace > $@
 $(objpfx)tst-gettext.out: tst-gettext.sh $(objpfx)tst-gettext
-	$(SHELL) $< $(common-objpfx) '$(run-program-prefix)' \
+	$(SHELL) $< $(common-objpfx) '$(test-program-prefix)' \
 	  $(common-objpfx)intl/ $(objpfx)tst-gettext.mtrace
 $(objpfx)tst-translit.out: tst-translit.sh $(objpfx)tst-translit
-	$(SHELL) $< $(common-objpfx) '$(run-program-prefix)' \
+	$(SHELL) $< $(common-objpfx) '$(test-program-prefix)' \
 	  $(common-objpfx)intl/
 $(objpfx)tst-gettext2.out: tst-gettext2.sh $(objpfx)tst-gettext2
-	$(SHELL) $< $(common-objpfx) '$(run-program-prefix)' \
+	$(SHELL) $< $(common-objpfx) '$(test-program-prefix)' \
 	  $(common-objpfx)intl/
 $(objpfx)tst-gettext4.out: tst-gettext4.sh $(objpfx)tst-gettext4
-	$(SHELL) $< $(common-objpfx) '$(run-program-prefix)' $(common-objpfx)intl/
+	$(SHELL) $< $(common-objpfx) '$(test-program-prefix)' $(common-objpfx)intl/
 $(objpfx)tst-gettext6.out: tst-gettext6.sh $(objpfx)tst-gettext6
-	$(SHELL) $< $(common-objpfx) '$(run-program-prefix)' $(common-objpfx)intl/
+	$(SHELL) $< $(common-objpfx) '$(test-program-prefix)' $(common-objpfx)intl/
 
 $(objpfx)tst-codeset.out: $(codeset_mo)
 $(objpfx)tst-gettext3.out: $(codeset_mo)
diff --git a/intl/tst-gettext.sh b/intl/tst-gettext.sh
index a3bb0a6..0d687e5 100755
--- a/intl/tst-gettext.sh
+++ b/intl/tst-gettext.sh
@@ -20,7 +20,7 @@
 set -e
 
 common_objpfx=$1
-run_program_prefix=$2
+test_program_prefix=$2
 objpfx=$3
 malloc_trace=$4
 
@@ -54,7 +54,7 @@ export LOCPATH
 
 # Now run the test.
 MALLOC_TRACE=$malloc_trace LOCPATH=${objpfx}localedir:$LOCPATH \
-${run_program_prefix} \
+${test_program_prefix} \
 ${objpfx}tst-gettext > ${objpfx}tst-gettext.out ${objpfx}domaindir
 
 exit $?
diff --git a/intl/tst-gettext2.sh b/intl/tst-gettext2.sh
index 833b979..d23993d 100644
--- a/intl/tst-gettext2.sh
+++ b/intl/tst-gettext2.sh
@@ -20,7 +20,7 @@
 set -e
 
 common_objpfx=$1
-run_program_prefix=$2
+test_program_prefix=$2
 objpfx=$3
 
 LC_ALL=C
@@ -67,7 +67,7 @@ LOCPATH=${objpfx}domaindir
 export LOCPATH
 
 # Now run the test.
-${run_program_prefix} \
+${test_program_prefix} \
 ${objpfx}tst-gettext2 > ${objpfx}tst-gettext2.out ${objpfx}domaindir &&
 cmp ${objpfx}tst-gettext2.out - <<EOF
 String1 - Lang1: 1st string
diff --git a/intl/tst-gettext4.sh b/intl/tst-gettext4.sh
index 4067071..3bce60c 100755
--- a/intl/tst-gettext4.sh
+++ b/intl/tst-gettext4.sh
@@ -21,7 +21,7 @@
 set -e
 
 common_objpfx=$1
-run_program_prefix=$2
+test_program_prefix=$2
 objpfx=$3
 
 LC_ALL=C
@@ -39,6 +39,6 @@ export GCONV_PATH
 LOCPATH=${common_objpfx}localedata
 export LOCPATH
 
-${run_program_prefix} ${objpfx}tst-gettext4 > ${objpfx}tst-gettext4.out
+${test_program_prefix} ${objpfx}tst-gettext4 > ${objpfx}tst-gettext4.out
 
 exit $?
diff --git a/intl/tst-gettext6.sh b/intl/tst-gettext6.sh
index 2db0cd6..3fc79bf 100644
--- a/intl/tst-gettext6.sh
+++ b/intl/tst-gettext6.sh
@@ -20,7 +20,7 @@
 set -e
 
 common_objpfx=$1
-run_program_prefix=$2
+test_program_prefix=$2
 objpfx=$3
 
 LC_ALL=C
@@ -36,6 +36,6 @@ export GCONV_PATH
 LOCPATH=${common_objpfx}localedata
 export LOCPATH
 
-${run_program_prefix} ${objpfx}tst-gettext6 > ${objpfx}tst-gettext6.out
+${test_program_prefix} ${objpfx}tst-gettext6 > ${objpfx}tst-gettext6.out
 
 exit $?
diff --git a/intl/tst-translit.sh b/intl/tst-translit.sh
index 27cd1bf..a81706a 100755
--- a/intl/tst-translit.sh
+++ b/intl/tst-translit.sh
@@ -20,7 +20,7 @@
 set -e
 
 common_objpfx=$1
-run_program_prefix=$2
+test_program_prefix=$2
 objpfx=$3
 
 LC_ALL=C
@@ -37,7 +37,7 @@ export GCONV_PATH
 LOCPATH=${common_objpfx}localedata
 export LOCPATH
 
-${run_program_prefix} \
+${test_program_prefix} \
 ${objpfx}tst-translit > ${objpfx}tst-translit.out ${objpfx}domaindir
 
 exit $?
diff --git a/io/Makefile b/io/Makefile
index a2d6a7a..233fd5c 100644
--- a/io/Makefile
+++ b/io/Makefile
@@ -104,5 +104,5 @@ ifeq ($(run-built-tests),yes)
 tests: $(objpfx)ftwtest.out
 
 $(objpfx)ftwtest.out: ftwtest-sh $(objpfx)ftwtest
-	$(SHELL) $< $(common-objpfx) '$(built-program-cmd)' > $@
+	$(SHELL) $< $(common-objpfx) '$(test-program-cmd)' > $@
 endif
diff --git a/libio/Makefile b/libio/Makefile
index 379d5f7..2c46033 100644
--- a/libio/Makefile
+++ b/libio/Makefile
@@ -186,7 +186,7 @@ endif
 endif
 
 $(objpfx)test-freopen.out: test-freopen.sh $(objpfx)test-freopen
-	$(SHELL) $< $(common-objpfx) '$(run-program-prefix)'	\
+	$(SHELL) $< $(common-objpfx) '$(test-program-prefix)'	\
 	$(common-objpfx)libio/
 
 $(objpfx)tst-fopenloc.check: $(objpfx)tst-fopenloc.out
diff --git a/libio/test-freopen.sh b/libio/test-freopen.sh
index 9ee4530..b33c478 100755
--- a/libio/test-freopen.sh
+++ b/libio/test-freopen.sh
@@ -20,10 +20,10 @@
 set -e
 
 common_objpfx=$1
-run_program_prefix=$2
+test_program_prefix=$2
 objpfx=$3
 
-${run_program_prefix} ${objpfx}test-freopen ${objpfx}test-freopen.out &&
+${test_program_prefix} ${objpfx}test-freopen ${objpfx}test-freopen.out &&
 cmp ${objpfx}test-freopen.out - <<"EOF"
 Hello world (mb)
 Hello world (wc)
diff --git a/localedata/Makefile b/localedata/Makefile
index cbe6055..05ffc97 100644
--- a/localedata/Makefile
+++ b/localedata/Makefile
@@ -145,17 +145,18 @@ tests: $(objpfx)sort-test.out $(objpfx)tst-fmon.out $(objpfx)tst-locale.out \
 
 $(objpfx)sort-test.out: sort-test.sh $(objpfx)collate-test $(objpfx)xfrm-test \
 		       $(test-input-data) $(addprefix $(objpfx),$(CTYPE_FILES))
-	$(SHELL) $< $(common-objpfx) '$(run-program-prefix)' $(test-input) \
+	$(SHELL) $< $(common-objpfx) '$(test-program-prefix)' $(test-input) \
 	  > $@
 $(objpfx)tst-fmon.out: tst-fmon.sh $(objpfx)tst-fmon tst-fmon.data \
 		       $(objpfx)sort-test.out \
 		       $(addprefix $(objpfx),$(CTYPE_FILES))
-	$(SHELL) $< $(common-objpfx) '$(run-program-prefix)' tst-fmon.data \
+	$(SHELL) $< $(common-objpfx) '$(run-program-prefix)' \
+		'$(test-program-prefix)' tst-fmon.data  \
 	  > $@
 $(objpfx)tst-numeric.out: tst-numeric.sh $(objpfx)tst-numeric tst-numeric.data \
 		       $(objpfx)sort-test.out \
 		       $(addprefix $(objpfx),$(CTYPE_FILES))
-	$(SHELL) $< $(common-objpfx) '$(run-program-prefix)' tst-numeric.data \
+	$(SHELL) $< $(common-objpfx) '$(test-program-prefix)' tst-numeric.data \
 	  > $@
 $(objpfx)tst-locale.out: tst-locale.sh $(common-objpfx)locale/localedef \
 			 $(ld-test-srcs) $(addprefix $(objpfx),$(CTYPE_FILES))
@@ -163,27 +164,27 @@ $(objpfx)tst-locale.out: tst-locale.sh $(common-objpfx)locale/localedef \
 $(objpfx)tst-rpmatch.out: tst-rpmatch.sh $(objpfx)tst-rpmatch \
 			  $(objpfx)tst-fmon.out \
 			  $(addprefix $(objpfx),$(CTYPE_FILES))
-	$(SHELL) $< $(common-objpfx) '$(built-program-cmd)' > $@
+	$(SHELL) $< $(common-objpfx) '$(test-program-cmd)' > $@
 $(objpfx)tst-trans.out: tst-trans.sh $(objpfx)tst-trans \
 			$(addprefix $(objpfx),$(CTYPE_FILES))
-	$(SHELL) $< $(common-objpfx) '$(run-program-prefix)'
+	$(SHELL) $< $(common-objpfx) '$(run-program-prefix)' '$(test-program-prefix)'
 $(objpfx)tst-mbswcs.out: tst-mbswcs.sh $(objpfx)tst-mbswcs1 \
 			 $(objpfx)tst-mbswcs2 $(objpfx)tst-mbswcs3 \
 			 $(objpfx)tst-mbswcs4 $(objpfx)tst-mbswcs5 \
 			 $(addprefix $(objpfx),$(CTYPE_FILES))
-	$(SHELL) $< $(common-objpfx) '$(run-program-prefix)'
+	$(SHELL) $< $(common-objpfx) '$(test-program-prefix)'
 $(objpfx)tst-ctype.out: tst-ctype.sh $(objpfx)tst-ctype \
 			$(objpfx)sort-test.out \
 			$(addprefix $(objpfx),$(CTYPE_FILES))
-	$(SHELL) $< $(common-objpfx) '$(built-program-cmd)'
+	$(SHELL) $< $(common-objpfx) '$(test-program-cmd)'
 $(objpfx)tst-wctype.out: tst-wctype.sh $(objpfx)tst-wctype \
 			$(objpfx)sort-test.out tst-wctype.input \
 			$(addprefix $(objpfx),$(CTYPE_FILES))
-	$(SHELL) $< $(common-objpfx) '$(built-program-cmd)'
+	$(SHELL) $< $(common-objpfx) '$(test-program-cmd)'
 $(objpfx)tst-langinfo.out: tst-langinfo.sh $(objpfx)tst-langinfo \
 			$(objpfx)sort-test.out \
 			$(addprefix $(objpfx),$(CTYPE_FILES))
-	$(SHELL) $< $(common-objpfx) '$(built-program-cmd)'
+	$(SHELL) $< $(common-objpfx) '$(test-program-cmd)'
 $(objpfx)tst-digits.out: $(objpfx)tst-locale.out
 $(objpfx)tst-mbswcs6.out: $(addprefix $(objpfx),$(CTYPE_FILES))
 endif
@@ -285,7 +286,7 @@ $(objpfx)mtrace-tst-leaks: $(objpfx)tst-leaks.out
 	$(common-objpfx)malloc/mtrace $(objpfx)tst-leaks.mtrace > $@
 
 bug-setlocale1-ENV = LOCPATH=$(common-objpfx)localedata
-bug-setlocale1-ARGS = -- $(built-program-cmd)
+bug-setlocale1-ARGS = -- $(test-program-cmd)
 tst-setlocale2-ENV = LOCPATH=$(common-objpfx)localedata
 
 $(objdir)/iconvdata/gconv-modules:
diff --git a/localedata/sort-test.sh b/localedata/sort-test.sh
index 8f8be8f..494e6e3 100644
--- a/localedata/sort-test.sh
+++ b/localedata/sort-test.sh
@@ -20,7 +20,7 @@
 set -e
 
 common_objpfx=$1; shift
-run_program_prefix=$1; shift
+test_program_prefix=$1; shift
 lang=$*
 
 id=${PPID:-100}
@@ -32,7 +32,7 @@ for l in $lang; do
   here=0
   cns=`echo $l | sed 's/\(.*\)[.][^.]*/\1/'`
   LOCPATH=${common_objpfx}localedata GCONV_PATH=${common_objpfx}/iconvdata \
-   LC_ALL=$l ${run_program_prefix} \
+   LC_ALL=$l ${test_program_prefix} \
    ${common_objpfx}localedata/collate-test $id < $cns.in \
    > ${common_objpfx}localedata/$cns.out || here=1
   cmp -s $cns.in ${common_objpfx}localedata/$cns.out || here=1
@@ -45,7 +45,7 @@ for l in $lang; do
   fi
 
   LOCPATH=${common_objpfx}localedata GCONV_PATH=${common_objpfx}/iconvdata \
-   LC_ALL=$l ${run_program_prefix} \
+   LC_ALL=$l ${test_program_prefix} \
    ${common_objpfx}localedata/xfrm-test $id < $cns.in \
    > ${common_objpfx}localedata/$cns.xout || here=1
   cmp -s $cns.in ${common_objpfx}localedata/$cns.xout || here=1
diff --git a/localedata/tst-fmon.sh b/localedata/tst-fmon.sh
index 52d32d0..90b0daf 100755
--- a/localedata/tst-fmon.sh
+++ b/localedata/tst-fmon.sh
@@ -22,7 +22,8 @@ set -e
 
 common_objpfx=$1
 run_program_prefix=$2
-datafile=$3
+test_program_prefix=$3
+datafile=$4
 
 here=`pwd`
 
@@ -47,7 +48,7 @@ while IFS="	" read locale format value expect; do
 	expect=`echo "$expect" | sed 's/^\"\(.*\)\"$/\1/'`
 	LOCPATH=${common_objpfx}localedata \
 	GCONV_PATH=${common_objpfx}/iconvdata \
-	${run_program_prefix} ${common_objpfx}localedata/tst-fmon \
+	${test_program_prefix} ${common_objpfx}localedata/tst-fmon \
 	"$locale" "$format" "$value" "$expect" < /dev/null ||
 	errcode=$?
     fi
diff --git a/localedata/tst-mbswcs.sh b/localedata/tst-mbswcs.sh
index 5a067ec..f879f40 100755
--- a/localedata/tst-mbswcs.sh
+++ b/localedata/tst-mbswcs.sh
@@ -20,29 +20,29 @@
 set -e
 
 common_objpfx=$1; shift
-run_program_prefix=$1; shift
+test_program_prefix=$1; shift
 
 status=0
 
 # Run the test programs.
 LOCPATH=${common_objpfx}localedata GCONV_PATH=${common_objpfx}iconvdata \
-${run_program_prefix} ${common_objpfx}localedata/tst-mbswcs1 \
+${test_program_prefix} ${common_objpfx}localedata/tst-mbswcs1 \
   > ${common_objpfx}localedata/tst-mbswcs.out || status=1
 
 LOCPATH=${common_objpfx}localedata GCONV_PATH=${common_objpfx}iconvdata \
-${run_program_prefix} ${common_objpfx}localedata/tst-mbswcs2 \
+${test_program_prefix} ${common_objpfx}localedata/tst-mbswcs2 \
   >> ${common_objpfx}localedata/tst-mbswcs.out || status=1
 
 LOCPATH=${common_objpfx}localedata GCONV_PATH=${common_objpfx}iconvdata \
-${run_program_prefix} ${common_objpfx}localedata/tst-mbswcs3 \
+${test_program_prefix} ${common_objpfx}localedata/tst-mbswcs3 \
   >> ${common_objpfx}localedata/tst-mbswcs.out || status=1
 
 LOCPATH=${common_objpfx}localedata GCONV_PATH=${common_objpfx}iconvdata \
-${run_program_prefix} ${common_objpfx}localedata/tst-mbswcs4 \
+${test_program_prefix} ${common_objpfx}localedata/tst-mbswcs4 \
   >> ${common_objpfx}localedata/tst-mbswcs.out || status=1
 
 LOCPATH=${common_objpfx}localedata GCONV_PATH=${common_objpfx}iconvdata \
-${run_program_prefix} ${common_objpfx}localedata/tst-mbswcs5 \
+${test_program_prefix} ${common_objpfx}localedata/tst-mbswcs5 \
   >> ${common_objpfx}localedata/tst-mbswcs.out || status=1
 
 exit $status
diff --git a/localedata/tst-numeric.sh b/localedata/tst-numeric.sh
index 70ddc40..f0d6aeb 100644
--- a/localedata/tst-numeric.sh
+++ b/localedata/tst-numeric.sh
@@ -21,7 +21,7 @@
 set -e
 
 common_objpfx=$1
-run_program_prefix=$2
+test_program_prefix=$2
 datafile=$3
 
 # Run the tests.
@@ -32,7 +32,7 @@ while IFS="	" read locale format value expect; do
     if [ -n "$format" ]; then
 	if LOCPATH=${common_objpfx}localedata \
 	    GCONV_PATH=${common_objpfx}/iconvdata \
-	    ${run_program_prefix} ${common_objpfx}localedata/tst-numeric \
+	    ${test_program_prefix} ${common_objpfx}localedata/tst-numeric \
 	    "$locale" "$format" "$value" "$expect" < /dev/null
 	then
 	    echo "Locale: \"${locale}\" Format: \"${format}\"" \
diff --git a/localedata/tst-trans.sh b/localedata/tst-trans.sh
index e90b653..42c2477 100755
--- a/localedata/tst-trans.sh
+++ b/localedata/tst-trans.sh
@@ -21,6 +21,7 @@ set -e
 
 common_objpfx=$1
 run_program_prefix=$2
+test_program_prefix=$3
 
 # Generate the necessary locale data.
 I18NPATH=. GCONV_PATH=${common_objpfx}/iconvdata \
@@ -32,7 +33,7 @@ exit 1
 
 # Run the test program.
 LOCPATH=${common_objpfx}localedata GCONV_PATH=${common_objpfx}iconvdata \
-LC_ALL=tt_TT ${run_program_prefix} \
+LC_ALL=tt_TT ${test_program_prefix} \
 ${common_objpfx}localedata/tst-trans > ${common_objpfx}localedata/tst-trans.out
 
 exit $?
diff --git a/malloc/Makefile b/malloc/Makefile
index e193899..4d59cf1 100644
--- a/malloc/Makefile
+++ b/malloc/Makefile
@@ -109,7 +109,7 @@ ifeq (yes,$(build-shared))
 ifneq ($(PERL),no)
 tests: $(objpfx)tst-mtrace.out
 $(objpfx)tst-mtrace.out: tst-mtrace.sh $(objpfx)tst-mtrace
-	$(SHELL) $< $(common-objpfx) '$(run-program-prefix)'
+	$(SHELL) $< $(common-objpfx) '$(test-program-prefix)'
 endif
 endif
 endif
diff --git a/malloc/tst-mtrace.sh b/malloc/tst-mtrace.sh
index d81e550..c22c2ae 100755
--- a/malloc/tst-mtrace.sh
+++ b/malloc/tst-mtrace.sh
@@ -20,14 +20,14 @@
 set -e
 
 common_objpfx=$1; shift
-run_program_prefix=$1; shift
+test_program_prefix=$1; shift
 
 status=0
 trap "rm -f ${common_objpfx}malloc/tst-mtrace.leak; exit 1" 1 2 15
 
 MALLOC_TRACE=${common_objpfx}malloc/tst-mtrace.leak \
 LOCPATH=${common_objpfx}localedata GCONV_PATH=${common_objpfx}iconvdata \
-${run_program_prefix} \
+${test_program_prefix} \
   ${common_objpfx}malloc/tst-mtrace || status=1
 
 if test $status -eq 0 && test -f ${common_objpfx}malloc/mtrace; then
diff --git a/nptl/Makefile b/nptl/Makefile
index e33432e..e3dfb99 100644
--- a/nptl/Makefile
+++ b/nptl/Makefile
@@ -437,7 +437,7 @@ CFLAGS-tst-initializers1-c99.c = $(CFLAGS-tst-initializers1-<)
 CFLAGS-tst-initializers1-gnu89.c = $(CFLAGS-tst-initializers1-<)
 CFLAGS-tst-initializers1-gnu99.c = $(CFLAGS-tst-initializers1-<)
 
-tst-cancel7-ARGS = --command "exec $(host-built-program-cmd)"
+tst-cancel7-ARGS = --command "exec $(host-test-program-cmd)"
 tst-cancelx7-ARGS = $(tst-cancel7-ARGS)
 tst-umask1-ARGS = $(objpfx)tst-umask1.temp
 
@@ -477,8 +477,8 @@ $(objpfx)tst-tls6.out: tst-tls6.sh $(objpfx)tst-tls5 \
 		       $(objpfx)tst-tls5moda.so $(objpfx)tst-tls5modb.so \
 		       $(objpfx)tst-tls5modc.so $(objpfx)tst-tls5modd.so \
 		       $(objpfx)tst-tls5mode.so $(objpfx)tst-tls5modf.so
-	$(BASH) $< $(common-objpfx) $(elf-objpfx) \
-		    $(rtld-installed-name) '$(test-wrapper-env)'
+	$(BASH) $< $(common-objpfx) '$(test-via-rtld-prefix)' \
+	  '$(test-wrapper-env)'
 endif
 
 $(objpfx)tst-dlsym1: $(libdl) $(shared-thread-library)
@@ -580,7 +580,7 @@ $(objpfx)tst-cancel-wrappers.out: tst-cancel-wrappers.sh
 endif
 endif
 
-tst-exec4-ARGS = $(host-built-program-cmd)
+tst-exec4-ARGS = $(host-test-program-cmd)
 
 $(objpfx)tst-execstack: $(libdl)
 $(objpfx)tst-execstack.out: $(objpfx)tst-execstack-mod.so
@@ -588,14 +588,14 @@ LDFLAGS-tst-execstack = -Wl,-z,noexecstack
 
 $(objpfx)tst-fini1mod.so: $(shared-thread-library)
 
-tst-stackguard1-ARGS = --command "$(host-built-program-cmd) --child"
+tst-stackguard1-ARGS = --command "$(host-test-program-cmd) --child"
 tst-stackguard1-static-ARGS = --command "$(objpfx)tst-stackguard1-static --child"
 
 ifeq ($(run-built-tests),yes)
 tests: $(objpfx)tst-oddstacklimit.out
 
 $(objpfx)tst-oddstacklimit.out: $(objpfx)tst-oddstacklimit $(objpfx)tst-basic1
-	$(run-program-prefix) $< --command '$(host-built-program-cmd)' > $@
+	$(test-program-prefix) $< --command '$(host-test-program-cmd)' > $@
 endif
 
 # The tests here better do not run in parallel
diff --git a/nptl/tst-tls6.sh b/nptl/tst-tls6.sh
index 27450c3..edc3f0d 100755
--- a/nptl/tst-tls6.sh
+++ b/nptl/tst-tls6.sh
@@ -20,15 +20,13 @@
 set -e
 
 common_objpfx=$1; shift
-elf_objpfx=$1; shift
-rtld_installed_name=$1; shift
+test_via_rtld_prefix=$1; shift
 test_wrapper_env=$1; shift
 logfile=$common_objpfx/nptl/tst-tls6.out
 
 # We have to find libc and nptl
 library_path=${common_objpfx}:${common_objpfx}nptl
-tst_tls5="${elf_objpfx}${rtld_installed_name} --library-path ${library_path} \
-	  ${common_objpfx}/nptl/tst-tls5"
+tst_tls5="${test_via_rtld_prefix} ${common_objpfx}/nptl/tst-tls5"
 
 LC_ALL=C
 export LC_ALL
diff --git a/posix/Makefile b/posix/Makefile
index de200ee..90d70dd 100644
--- a/posix/Makefile
+++ b/posix/Makefile
@@ -119,10 +119,10 @@ ifeq ($(run-built-tests),yes)
 ifeq (yes,$(build-shared))
 tests: $(objpfx)globtest.out $(objpfx)wordexp-tst.out
 $(objpfx)globtest.out: globtest.sh $(objpfx)globtest
-	$(SHELL) $< $(common-objpfx) '$(run-via-rtld-prefix)' \
-		'$(test-wrapper)' '$(test-wrapper-env)'
+	$(SHELL) $< $(common-objpfx) '$(test-via-rtld-prefix)' \
+		'$(test-program-prefix)' '$(test-wrapper-env)'
 $(objpfx)wordexp-tst.out: wordexp-tst.sh $(objpfx)wordexp-test
-	$(SHELL) $< $(common-objpfx) '$(run-program-prefix)'
+	$(SHELL) $< $(common-objpfx) '$(test-program-prefix)'
 endif
 endif
 
@@ -173,9 +173,9 @@ CFLAGS-execlp.os = -fomit-frame-pointer
 tstgetopt-ARGS = -a -b -cfoobar --required foobar --optional=bazbug \
 		--none random --col --color --colour
 
-tst-exec-ARGS = -- $(host-built-program-cmd)
+tst-exec-ARGS = -- $(host-test-program-cmd)
 tst-exec-static-ARGS = $(tst-exec-ARGS)
-tst-spawn-ARGS = -- $(host-built-program-cmd)
+tst-spawn-ARGS = -- $(host-test-program-cmd)
 tst-spawn-static-ARGS = $(tst-spawn-ARGS)
 tst-dir-ARGS = `pwd` `cd $(common-objdir)/$(subdir); pwd` `cd $(common-objdir); pwd` $(objpfx)tst-dir
 tst-chmod-ARGS = $(objdir)
@@ -268,7 +268,7 @@ $(objpfx)tst-vfork3-mem: $(objpfx)tst-vfork3.out
 # time to process.
 $(objpfx)tst-rxspencer-mem: $(objpfx)tst-rxspencer.out
 	MALLOC_TRACE=$(objpfx)tst-rxspencer.mtrace $(tst-rxspencer-ENV) \
-	  $(run-program-prefix) $(objpfx)tst-rxspencer rxspencer/tests \
+	  $(test-program-prefix) $(objpfx)tst-rxspencer rxspencer/tests \
 	  > /dev/null
 	$(common-objpfx)malloc/mtrace $(objpfx)tst-rxspencer.mtrace > $@
 
diff --git a/posix/globtest.sh b/posix/globtest.sh
index 121be85..fd57e4f 100755
--- a/posix/globtest.sh
+++ b/posix/globtest.sh
@@ -20,10 +20,9 @@
 set -e
 
 common_objpfx=$1; shift
-run_via_rtld_prefix=$1; shift
-test_wrapper=$1; shift
+test_via_rtld_prefix=$1; shift
+test_program_prefix=$1; shift
 test_wrapper_env=$1; shift
-run_program_prefix="${test_wrapper} ${run_via_rtld_prefix}"
 logfile=$common_objpfx/posix/globtest.out
 
 #CMP=cmp
@@ -78,7 +77,7 @@ rm -f $logfile
 
 # Normal test
 failed=0
-${run_program_prefix} \
+${test_program_prefix} \
 ${common_objpfx}posix/globtest "$testdir" "*" |
 sort > $testout
 cat <<"EOF" | $CMP - $testout >> $logfile || failed=1
@@ -105,7 +104,7 @@ fi
 
 # Don't let glob sort it
 failed=0
-${run_program_prefix} \
+${test_program_prefix} \
 ${common_objpfx}posix/globtest -s "$testdir" "*" |
 sort > $testout
 cat <<"EOF" | $CMP - $testout >> $logfile || failed=1
@@ -132,7 +131,7 @@ fi
 
 # Mark directories
 failed=0
-${run_program_prefix} \
+${test_program_prefix} \
 ${common_objpfx}posix/globtest -m "$testdir" "*" |
 sort > $testout
 cat <<"EOF" | $CMP - $testout >> $logfile || failed=1
@@ -159,7 +158,7 @@ fi
 
 # Find files starting with .
 failed=0
-${run_program_prefix} \
+${test_program_prefix} \
 ${common_objpfx}posix/globtest -p "$testdir" "*" |
 sort > $testout
 cat <<"EOF" | $CMP - $testout >> $logfile || failed=1
@@ -189,7 +188,7 @@ fi
 
 # Test braces
 failed=0
-${run_program_prefix} \
+${test_program_prefix} \
 ${common_objpfx}posix/globtest -b "$testdir" "file{1,2}" |
 sort > $testout
 cat <<"EOF" | $CMP - $testout >> $logfile || failed=1
@@ -202,7 +201,7 @@ if test $failed -ne 0; then
 fi
 
 failed=0
-${run_program_prefix} \
+${test_program_prefix} \
 ${common_objpfx}posix/globtest -b "$testdir" "{file{1,2},-file3}" |
 sort > $testout
 cat <<"EOF" | $CMP - $testout >> $logfile || failed=1
@@ -216,7 +215,7 @@ if test $failed -ne 0; then
 fi
 
 failed=0
-${run_program_prefix} \
+${test_program_prefix} \
 ${common_objpfx}posix/globtest -b "$testdir" "{" |
 sort > $testout
 cat <<"EOF" | $CMP - $testout >> $logfile || failed=1
@@ -229,7 +228,7 @@ fi
 
 # Test NOCHECK
 failed=0
-${run_program_prefix} \
+${test_program_prefix} \
 ${common_objpfx}posix/globtest -c "$testdir" "abc" |
 sort > $testout
 cat <<"EOF" | $CMP - $testout >> $logfile || failed=1
@@ -242,7 +241,7 @@ fi
 
 # Test NOMAGIC without magic characters
 failed=0
-${run_program_prefix} \
+${test_program_prefix} \
 ${common_objpfx}posix/globtest -g "$testdir" "abc" |
 sort > $testout
 cat <<"EOF" | $CMP - $testout >> $logfile || failed=1
@@ -255,7 +254,7 @@ fi
 
 # Test NOMAGIC with magic characters
 failed=0
-${run_program_prefix} \
+${test_program_prefix} \
 ${common_objpfx}posix/globtest -g "$testdir" "abc*" |
 sort > $testout
 cat <<"EOF" | $CMP - $testout >> $logfile || failed=1
@@ -268,7 +267,7 @@ fi
 
 # Test NOMAGIC for subdirs
 failed=0
-${run_program_prefix} \
+${test_program_prefix} \
 ${common_objpfx}posix/globtest -g "$testdir" "*/does-not-exist" |
 sort > $testout
 cat <<"EOF" | $CMP - $testout >> $logfile || failed=1
@@ -281,7 +280,7 @@ fi
 
 # Test subdirs correctly
 failed=0
-${run_program_prefix} \
+${test_program_prefix} \
 ${common_objpfx}posix/globtest "$testdir" "*/*" |
 sort > $testout
 cat <<"EOF" | $CMP - $testout >> $logfile || failed=1
@@ -297,7 +296,7 @@ fi
 
 # Test subdirs for invalid names
 failed=0
-${run_program_prefix} \
+${test_program_prefix} \
 ${common_objpfx}posix/globtest "$testdir" "*/1" |
 sort > $testout
 cat <<"EOF" | $CMP - $testout >> $logfile || failed=1
@@ -310,7 +309,7 @@ fi
 
 # Test subdirs with wildcard
 failed=0
-${run_program_prefix} \
+${test_program_prefix} \
 ${common_objpfx}posix/globtest "$testdir" "*/*1_1" |
 sort > $testout
 cat <<"EOF" | $CMP - $testout >> $logfile || failed=1
@@ -324,7 +323,7 @@ fi
 
 # Test subdirs with ?
 failed=0
-${run_program_prefix} \
+${test_program_prefix} \
 ${common_objpfx}posix/globtest "$testdir" "*/*?_?" |
 sort > $testout
 cat <<"EOF" | $CMP - $testout >> $logfile || failed=1
@@ -339,7 +338,7 @@ if test $failed -ne 0; then
 fi
 
 failed=0
-${run_program_prefix} \
+${test_program_prefix} \
 ${common_objpfx}posix/globtest "$testdir" "*/file1_1" |
 sort > $testout
 cat <<"EOF" | $CMP - $testout >> $logfile || failed=1
@@ -352,7 +351,7 @@ if test $failed -ne 0; then
 fi
 
 failed=0
-${run_program_prefix} \
+${test_program_prefix} \
 ${common_objpfx}posix/globtest "$testdir" "*-/*" |
 sort > $testout
 cat <<"EOF" | $CMP - $testout >> $logfile || failed=1
@@ -364,7 +363,7 @@ if test $failed -ne 0; then
 fi
 
 failed=0
-${run_program_prefix} \
+${test_program_prefix} \
 ${common_objpfx}posix/globtest "$testdir" "*-" |
 sort > $testout
 cat <<"EOF" | $CMP - $testout >> $logfile || failed=1
@@ -377,7 +376,7 @@ fi
 
 # Test subdirs with ?
 failed=0
-${run_program_prefix} \
+${test_program_prefix} \
 ${common_objpfx}posix/globtest "$testdir" "*/*?_?" |
 sort > $testout
 cat <<"EOF" | $CMP - $testout >> $logfile || failed=1
@@ -393,7 +392,7 @@ fi
 
 # Test subdirs with [ .. ]
 failed=0
-${run_program_prefix} \
+${test_program_prefix} \
 ${common_objpfx}posix/globtest "$testdir" "*/file1_[12]" |
 sort > $testout
 cat <<"EOF" | $CMP - $testout >> $logfile || failed=1
@@ -409,7 +408,7 @@ fi
 
 # Test ']' inside bracket expression
 failed=0
-${run_program_prefix} \
+${test_program_prefix} \
 ${common_objpfx}posix/globtest "$testdir" "dir1/file1_[]12]" |
 sort > $testout
 cat <<"EOF" | $CMP - $testout >> $logfile || failed=1
@@ -423,7 +422,7 @@ fi
 
 # Test tilde expansion
 failed=0
-${run_program_prefix} \
+${test_program_prefix} \
 ${common_objpfx}posix/globtest -q -t "$testdir" "~" |
 sort >$testout
 echo ~ | $CMP - $testout >> $logfile || failed=1
@@ -438,7 +437,7 @@ fi
 
 # Test tilde expansion with trailing slash
 failed=0
-${run_program_prefix} \
+${test_program_prefix} \
 ${common_objpfx}posix/globtest -q -t "$testdir" "~/" |
 sort > $testout
 # Some shell incorrectly(?) convert ~/ into // if ~ expands to /.
@@ -458,7 +457,7 @@ fi
 
 # Test tilde expansion with username
 failed=0
-${run_program_prefix} \
+${test_program_prefix} \
 ${common_objpfx}posix/globtest -q -t "$testdir" "~"$USER |
 sort > $testout
 eval echo ~$USER | $CMP - $testout >> $logfile || failed=1
@@ -473,7 +472,7 @@ fi
 
 # Tilde expansion shouldn't match a file
 failed=0
-${run_program_prefix} \
+${test_program_prefix} \
 ${common_objpfx}posix/globtest -T "$testdir" "~file4" |
 sort > $testout
 cat <<"EOF" | $CMP - $testout >> $logfile || failed=1
@@ -486,7 +485,7 @@ fi
 
 # Matching \** should only find *file6
 failed=0
-${run_program_prefix} \
+${test_program_prefix} \
 ${common_objpfx}posix/globtest "$testdir" "\**" |
 sort > $testout
 cat <<"EOF" | $CMP - $testout >> $logfile || failed=1
@@ -500,7 +499,7 @@ fi
 # ... unless NOESCAPE is used, in which case it should entries with a
 # leading \.
 failed=0
-${run_program_prefix} \
+${test_program_prefix} \
 ${common_objpfx}posix/globtest -e "$testdir" "\**" |
 sort > $testout
 cat <<"EOF" | $CMP - $testout >> $logfile || failed=1
@@ -515,7 +514,7 @@ fi
 
 # Matching \*file6 should find *file6
 failed=0
-${run_program_prefix} \
+${test_program_prefix} \
 ${common_objpfx}posix/globtest "$testdir" "\*file6" |
 sort > $testout
 cat <<"EOF" | $CMP - $testout >> $logfile || failed=1
@@ -528,7 +527,7 @@ fi
 
 # GLOB_BRACE alone
 failed=0
-${run_program_prefix} \
+${test_program_prefix} \
 ${common_objpfx}posix/globtest -b "$testdir" '\{file7\,\}' |
 sort > $testout
 cat <<"EOF" | $CMP - $testout >> $logfile || failed=1
@@ -541,7 +540,7 @@ fi
 
 # GLOB_BRACE and GLOB_NOESCAPE
 failed=0
-${run_program_prefix} \
+${test_program_prefix} \
 ${common_objpfx}posix/globtest -b -e "$testdir" '\{file9\,file9b\}' |
 sort > $testout
 cat <<"EOF" | $CMP - $testout >> $logfile || failed=1
@@ -554,7 +553,7 @@ fi
 
 # Escaped comma
 failed=0
-${run_program_prefix} \
+${test_program_prefix} \
 ${common_objpfx}posix/globtest -b "$testdir" '{filea\,}' |
 sort > $testout
 cat <<"EOF" | $CMP - $testout >> $logfile || failed=1
@@ -567,7 +566,7 @@ fi
 
 # Escaped closing brace
 failed=0
-${run_program_prefix} \
+${test_program_prefix} \
 ${common_objpfx}posix/globtest -b "$testdir" '{fileb\}c}' |
 sort > $testout
 cat <<"EOF" | $CMP - $testout >> $logfile || failed=1
@@ -580,7 +579,7 @@ fi
 
 # Try a recursive failed search
 failed=0
-${run_program_prefix} \
+${test_program_prefix} \
 ${common_objpfx}posix/globtest -e "$testdir" "a*/*" |
 sort > $testout
 cat <<"EOF" | $CMP - $testout >> $logfile || failed=1
@@ -593,7 +592,7 @@ fi
 
 # ... with GLOB_ERR
 failed=0
-${run_program_prefix} \
+${test_program_prefix} \
 ${common_objpfx}posix/globtest -E "$testdir" "a*/*" |
 sort > $testout
 cat <<"EOF" | $CMP - $testout >> $logfile || failed=1
@@ -606,7 +605,7 @@ fi
 
 # Try a recursive search in unreadable directory
 failed=0
-${run_program_prefix} \
+${test_program_prefix} \
 ${common_objpfx}posix/globtest "$testdir" "noread/*" |
 sort > $testout
 cat <<"EOF" | $CMP - $testout >> $logfile || failed=1
@@ -618,7 +617,7 @@ if test $failed -ne 0; then
 fi
 
 failed=0
-${run_program_prefix} \
+${test_program_prefix} \
 ${common_objpfx}posix/globtest "$testdir" "noread*/*" |
 sort > $testout
 cat <<"EOF" | $CMP - $testout >> $logfile || failed=1
@@ -636,14 +635,14 @@ if test -z "$user"; then
 fi
 if test "$user" != root; then
     # ... with GLOB_ERR
-    ${run_program_prefix} \
+    ${test_program_prefix} \
     ${common_objpfx}posix/globtest -E "$testdir" "noread/*" |
     sort > $testout
     cat <<"EOF" | $CMP - $testout >> $logfile || failed=1
 GLOB_ABORTED
 EOF
 
-    ${run_program_prefix} \
+    ${test_program_prefix} \
     ${common_objpfx}posix/globtest -E "$testdir" "noread*/*" |
     sort > $testout
     cat <<"EOF" | $CMP - $testout >> $logfile || failed=1
@@ -657,7 +656,7 @@ fi # not run as root
 
 # Try multiple patterns (GLOB_APPEND)
 failed=0
-${run_program_prefix} \
+${test_program_prefix} \
 ${common_objpfx}posix/globtest "$testdir" "file1" "*/*" |
 sort > $testout
 cat <<"EOF" | $CMP - $testout >> $logfile || failed=1
@@ -674,7 +673,7 @@ fi
 
 # Try multiple patterns (GLOB_APPEND) with offset (GLOB_DOOFFS)
 failed=0
-${run_program_prefix} \
+${test_program_prefix} \
 ${common_objpfx}posix/globtest -o "$testdir" "file1" "*/*" |
 sort > $testout
 cat <<"EOF" | $CMP - $testout >> $logfile || failed=1
@@ -692,7 +691,7 @@ fi
 
 # Test NOCHECK with non-existing file in subdir.
 failed=0
-${run_program_prefix} \
+${test_program_prefix} \
 ${common_objpfx}posix/globtest -c "$testdir" "*/blahblah" |
 sort > $testout
 cat <<"EOF" | $CMP - $testout >> $logfile || failed=1
@@ -705,7 +704,7 @@ fi
 
 # Test [[:punct:]] not matching leading period.
 failed=0
-${run_program_prefix} \
+${test_program_prefix} \
 ${common_objpfx}posix/globtest -c "$testdir" "[[:punct:]]*" |
 sort > $testout
 cat <<"EOF" | $CMP - $testout >> $logfile || failed=1
@@ -734,10 +733,10 @@ mkdir $testdir/dir6
 echo 6 > $testdir/dir6/'file1[a'
 echo 7 > $testdir/dir6/'file1[ab]'
 failed=0
-v=`${run_program_prefix} \
+v=`${test_program_prefix} \
    ${common_objpfx}posix/globtest "$testdir" 'dir3\*/file2'`
 test "$v" != 'GLOB_NOMATCH' && echo "$v" >> $logfile && failed=1
-${run_program_prefix} \
+${test_program_prefix} \
 ${common_objpfx}posix/globtest -c "$testdir" \
 'dir3\*/file1' 'dir3\*/file2' 'dir1/file\1_1' 'dir1/file\1_9' \
 'dir2\/' 'nondir\/' 'dir4[a/fil*1' 'di*r4[a/file2' 'dir5[ab]/file[12]' \
@@ -763,7 +762,7 @@ cat <<"EOF" | $CMP - $testout >> $logfile || failed=1
 EOF
 ${test_wrapper_env} \
 HOME="$testdir" \
-${run_via_rtld_prefix} \
+${test_via_rtld_prefix} \
 ${common_objpfx}posix/globtest -ct "$testdir" \
 '~/dir1/file1_1' '~/dir1/file1_9' '~/dir3\*/file1' '~/dir3\*/file2' \
 '~\/dir1/file1_2' |
@@ -778,15 +777,15 @@ EOF
 if eval test -d ~"$USER"/; then
   user=`echo "$USER" | sed -n -e 's/^\([^\\]\)\([^\\][^\\]*\)$/~\1\\\\\2/p'`
   if test -n "$user"; then
-    ${run_program_prefix} \
+    ${test_program_prefix} \
     ${common_objpfx}posix/globtest -ctq "$testdir" "$user/" |
     sort > $testout
     eval echo ~$USER/ | $CMP - $testout >> $logfile || failed=1
-    ${run_program_prefix} \
+    ${test_program_prefix} \
     ${common_objpfx}posix/globtest -ctq "$testdir" "$user\\/" |
     sort > $testout
     eval echo ~$USER/ | $CMP - $testout >> $logfile || failed=1
-    ${run_program_prefix} \
+    ${test_program_prefix} \
     ${common_objpfx}posix/globtest -ctq "$testdir" "$user" |
     sort > $testout
     eval echo ~$USER | $CMP - $testout >> $logfile || failed=1
diff --git a/posix/wordexp-tst.sh b/posix/wordexp-tst.sh
index f669195..39b5520 100755
--- a/posix/wordexp-tst.sh
+++ b/posix/wordexp-tst.sh
@@ -24,7 +24,7 @@ set -e
 # The others are just there to be parameters.
 
 common_objpfx=$1; shift
-run_program_prefix=$1; shift
+test_program_prefix=$1; shift
 logfile=${common_objpfx}posix/wordexp-tst.out
 testout=${common_objpfx}posix/wordexp-test-result
 
@@ -38,7 +38,7 @@ IFS=" 	\
 export IFS
 
 failed=0
-${run_program_prefix} \
+${test_program_prefix} \
 ${common_objpfx}posix/wordexp-test '$*' > ${testout}1
 cat <<"EOF" | cmp - ${testout}1 >> $logfile || failed=1
 wordexp returned 0
@@ -50,7 +50,7 @@ if test $failed -ne 0; then
 fi
 
 failed=0
-${run_program_prefix} \
+${test_program_prefix} \
 ${common_objpfx}posix/wordexp-test '${*}' unquoted > ${testout}2
 cat <<"EOF" | cmp - ${testout}2 >> $logfile || failed=1
 wordexp returned 0
@@ -63,7 +63,7 @@ if test $failed -ne 0; then
 fi
 
 failed=0
-${run_program_prefix} \
+${test_program_prefix} \
 ${common_objpfx}posix/wordexp-test '$@' unquoted > ${testout}3
 cat <<"EOF" | cmp - ${testout}3 >> $logfile || failed=1
 wordexp returned 0
@@ -76,7 +76,7 @@ if test $failed -ne 0; then
 fi
 
 failed=0
-${run_program_prefix} \
+${test_program_prefix} \
 ${common_objpfx}posix/wordexp-test '"$* quoted"' param > ${testout}4
 cat <<"EOF" | cmp - ${testout}4 >> $logfile || failed=1
 wordexp returned 0
@@ -88,7 +88,7 @@ if test $failed -ne 0; then
 fi
 
 failed=0
-${run_program_prefix} \
+${test_program_prefix} \
 ${common_objpfx}posix/wordexp-test '"$@ quoted"' param > ${testout}5
 cat <<"EOF" | cmp - ${testout}5 >> $logfile || failed=1
 wordexp returned 0
@@ -102,7 +102,7 @@ fi
 # Why?  Because bash does it that way..
 
 failed=0
-${run_program_prefix} \
+${test_program_prefix} \
 ${common_objpfx}posix/wordexp-test '$#' 2 3 4 5 > ${testout}6
 cat <<"EOF" | cmp - ${testout}6 >> $logfile || failed=1
 wordexp returned 0
@@ -114,7 +114,7 @@ if test $failed -ne 0; then
 fi
 
 failed=0
-${run_program_prefix} \
+${test_program_prefix} \
 ${common_objpfx}posix/wordexp-test '$2 ${3} $4' 2nd 3rd "4 th" > ${testout}7
 cat <<"EOF" | cmp - ${testout}7 >> $logfile || failed=1
 wordexp returned 0
@@ -129,7 +129,7 @@ if test $failed -ne 0; then
 fi
 
 failed=0
-${run_program_prefix} \
+${test_program_prefix} \
 ${common_objpfx}posix/wordexp-test '${11}' 2 3 4 5 6 7 8 9 10 11 > ${testout}8
 cat <<"EOF" | cmp - ${testout}8 >> $logfile || failed=1
 wordexp returned 0
@@ -141,7 +141,7 @@ if test $failed -ne 0; then
 fi
 
 failed=0
-${run_program_prefix} \
+${test_program_prefix} \
 ${common_objpfx}posix/wordexp-test '"a $@ b"' c d > ${testout}9
 cat <<"EOF" | cmp - ${testout}9 >> $logfile || failed=1
 wordexp returned 0
@@ -154,7 +154,7 @@ if test $failed -ne 0; then
   status=1
 fi
 
-${run_program_prefix} \
+${test_program_prefix} \
 ${common_objpfx}posix/wordexp-test '${#@} ${#2} *$**' two 3 4 > ${testout}10
 cat <<"EOF" | cmp - ${testout}10 || failed=1
 wordexp returned 0
diff --git a/rt/Makefile b/rt/Makefile
index 4805f8b..a4cb8ba 100644
--- a/rt/Makefile
+++ b/rt/Makefile
@@ -80,4 +80,4 @@ ifeq (yes,$(build-bounded))
 $(tests:%=$(objpfx)%-bp): $(objpfx)librt_b.a $(bounded-thread-library)
 endif
 
-tst-mqueue7-ARGS = -- $(host-built-program-cmd)
+tst-mqueue7-ARGS = -- $(host-test-program-cmd)
diff --git a/stdio-common/Makefile b/stdio-common/Makefile
index f7f152c..054bb40 100644
--- a/stdio-common/Makefile
+++ b/stdio-common/Makefile
@@ -69,11 +69,11 @@ tests: do-tst-unbputc do-tst-printf
 
 do-tst-unbputc: $(objpfx)tst-unbputc.out
 $(objpfx)tst-unbputc.out: tst-unbputc.sh $(objpfx)tst-unbputc
-	$(SHELL) $< $(common-objpfx) '$(run-program-prefix)'
+	$(SHELL) $< $(common-objpfx) '$(test-program-prefix)'
 
 do-tst-printf: $(objpfx)tst-printf.out
 $(objpfx)tst-printf.out: tst-printf.sh $(objpfx)tst-printf
-	$(SHELL) $< $(common-objpfx) '$(run-program-prefix)'
+	$(SHELL) $< $(common-objpfx) '$(test-program-prefix)'
 endif
 
 CFLAGS-vfprintf.c = -Wno-uninitialized
@@ -127,7 +127,7 @@ tst-grouping-ENV = LOCPATH=$(common-objpfx)localedata
 CPPFLAGS += $(libio-mtsafe)
 
 $(objpfx)tst-setvbuf1.out: tst-setvbuf1.expect $(objpfx)tst-setvbuf1
-	$(built-program-cmd) > $@ 2>&1
+	$(test-program-cmd) > $@ 2>&1
 	cmp tst-setvbuf1.expect $@
 
 ifeq ($(build-shared),yes)
diff --git a/stdio-common/tst-printf.sh b/stdio-common/tst-printf.sh
index d39b551..2c26a6e 100644
--- a/stdio-common/tst-printf.sh
+++ b/stdio-common/tst-printf.sh
@@ -20,12 +20,12 @@
 set -e
 
 common_objpfx=$1; shift
-run_program_prefix=$1; shift
+test_program_prefix=$1; shift
 
 status=0
 
 LOCPATH=${common_objpfx}localedata GCONV_PATH=${common_objpfx}iconvdata \
-${run_program_prefix} \
+${test_program_prefix} \
   ${common_objpfx}stdio-common/tst-printf \
   > ${common_objpfx}stdio-common/tst-printf.out || status=1
 
diff --git a/stdio-common/tst-unbputc.sh b/stdio-common/tst-unbputc.sh
index 1f28d4d..4922164 100755
--- a/stdio-common/tst-unbputc.sh
+++ b/stdio-common/tst-unbputc.sh
@@ -20,11 +20,11 @@
 set -e
 
 common_objpfx=$1; shift
-run_program_prefix=$1; shift
+test_program_prefix=$1; shift
 
 status=0
 
-${run_program_prefix} \
+${test_program_prefix} \
   ${common_objpfx}stdio-common/tst-unbputc \
     2> ${common_objpfx}stdio-common/tst-unbputc.out || status=1
 
diff --git a/stdlib/Makefile b/stdlib/Makefile
index 5e99d7f..c46ec18 100644
--- a/stdlib/Makefile
+++ b/stdlib/Makefile
@@ -136,7 +136,7 @@ $(objpfx)isomac: isomac.c
 	$(native-compile)
 
 $(objpfx)tst-fmtmsg.out: tst-fmtmsg.sh $(objpfx)tst-fmtmsg
-	$(SHELL) $< $(common-objpfx) '$(run-program-prefix)' $(common-objpfx)stdlib/
+	$(SHELL) $< $(common-objpfx) '$(test-program-prefix)' $(common-objpfx)stdlib/
 
 $(objpfx)tst-putenv: $(objpfx)tst-putenvmod.so
 LDFLAGS-tst-putenv = $(no-as-needed)
diff --git a/stdlib/tst-fmtmsg.sh b/stdlib/tst-fmtmsg.sh
index 868292e..6bb2446 100755
--- a/stdlib/tst-fmtmsg.sh
+++ b/stdlib/tst-fmtmsg.sh
@@ -20,10 +20,10 @@
 set -e
 
 common_objpfx=$1
-run_program_prefix=$2
+test_program_prefix=$2
 objpfx=$3
 
-test="${run_program_prefix} ${objpfx}tst-fmtmsg"
+test="${test_program_prefix} ${objpfx}tst-fmtmsg"
 out=${objpfx}tst-fmtmsg.out
 
 LC_ALL=C
diff --git a/string/Makefile b/string/Makefile
index 740006e..72723c1 100644
--- a/string/Makefile
+++ b/string/Makefile
@@ -82,6 +82,6 @@ ifeq ($(run-built-tests),yes)
 tests: $(objpfx)tst-svc.out
 $(objpfx)tst-svc.out: tst-svc.input $(objpfx)tst-svc
 	GCONV_PATH=$(common-objpfx)iconvdata LC_ALL=C \
-	  $(built-program-cmd) < $(word 1,$^) > $@
+	  $(test-program-cmd) < $(word 1,$^) > $@
 	@cmp tst-svc.expect $(objpfx)tst-svc.out
 endif
-- 
1.7.11.7

