diff --git a/gcc/config.in b/gcc/config.in
index 65d5e42..7a3f29e 100644
--- a/gcc/config.in
+++ b/gcc/config.in
@@ -63,6 +63,12 @@
 #endif
 
 
+/* root directory of the dynamic linker */
+#ifndef USED_FOR_TARGET
+#undef DYNAMIC_LINKER_PREFIX
+#endif
+
+
 /* Define if you want assertions enabled. This is a cheap check. */
 #ifndef USED_FOR_TARGET
 #undef ENABLE_ASSERT_CHECKING
diff --git a/gcc/config/aarch64/aarch64-linux.h b/gcc/config/aarch64/aarch64-linux.h
index d375624..112f8db 100644
--- a/gcc/config/aarch64/aarch64-linux.h
+++ b/gcc/config/aarch64/aarch64-linux.h
@@ -21,7 +21,8 @@
 #ifndef GCC_AARCH64_LINUX_H
 #define GCC_AARCH64_LINUX_H
 
-#define GLIBC_DYNAMIC_LINKER "/lib/ld-linux-aarch64%{mbig-endian:_be}%{mabi=ilp32:_ilp32}.so.1"
+#define GLIBC_DYNAMIC_LINKER DYNAMIC_LINKER_PREFIX "/lib/ld-linux-aarch64%{mbig-endian:_be}%{mabi=ilp32:_ilp32}.so.1"
+#define GLIBC_DYNAMIC_LINKER DYNAMIC_LINKER_PREFIX "/lib/ld-linux-aarch64%{mbig-endian:_be}%{mabi=ilp32:_ilp32}.so.1"
 
 #undef  ASAN_CC1_SPEC
 #define ASAN_CC1_SPEC "%{%:sanitize(address):-funwind-tables}"
diff --git a/gcc/config/alpha/linux-elf.h b/gcc/config/alpha/linux-elf.h
index bdefe23..e6a7082 100644
--- a/gcc/config/alpha/linux-elf.h
+++ b/gcc/config/alpha/linux-elf.h
@@ -23,8 +23,8 @@ along with GCC; see the file COPYING3.  If not see
 #define EXTRA_SPECS \
 { "elf_dynamic_linker", ELF_DYNAMIC_LINKER },
 
-#define GLIBC_DYNAMIC_LINKER	"/lib/ld-linux.so.2"
-#define UCLIBC_DYNAMIC_LINKER "/lib/ld-uClibc.so.0"
+#define GLIBC_DYNAMIC_LINKER DYNAMIC_LINKER_PREFIX "/lib/ld-linux.so.2"
+#define UCLIBC_DYNAMIC_LINKER DYNAMIC_LINKER_PREFIX "/lib/ld-uClibc.so.0"
 #if DEFAULT_LIBC == LIBC_UCLIBC
 #define CHOOSE_DYNAMIC_LINKER(G, U) "%{mglibc:" G ";:" U "}"
 #elif DEFAULT_LIBC == LIBC_GLIBC
diff --git a/gcc/config/arm/linux-eabi.h b/gcc/config/arm/linux-eabi.h
index f1f3448..74df9b9 100644
--- a/gcc/config/arm/linux-eabi.h
+++ b/gcc/config/arm/linux-eabi.h
@@ -68,11 +68,11 @@
    GLIBC_DYNAMIC_LINKER_DEFAULT and TARGET_DEFAULT_FLOAT_ABI.  */
 
 #undef  GLIBC_DYNAMIC_LINKER
-#define GLIBC_DYNAMIC_LINKER_SOFT_FLOAT "/lib/ld-linux.so.3"
-#define GLIBC_DYNAMIC_LINKER_HARD_FLOAT "/lib/ld-linux-armhf.so.3"
+#define GLIBC_DYNAMIC_LINKER_SOFT_FLOAT DYNAMIC_LINKER_PREFIX "/lib/ld-linux.so.3"
+#define GLIBC_DYNAMIC_LINKER_HARD_FLOAT DYNAMIC_LINKER_PREFIX "/lib/ld-linux-armhf.so.3"
 #define GLIBC_DYNAMIC_LINKER_DEFAULT GLIBC_DYNAMIC_LINKER_SOFT_FLOAT
 
-#define GLIBC_DYNAMIC_LINKER \
+#define GLIBC_DYNAMIC_LINKER DYNAMIC_LINKER_PREFIX \
    "%{mfloat-abi=hard:" GLIBC_DYNAMIC_LINKER_HARD_FLOAT "} \
     %{mfloat-abi=soft*:" GLIBC_DYNAMIC_LINKER_SOFT_FLOAT "} \
     %{!mfloat-abi=*:" GLIBC_DYNAMIC_LINKER_DEFAULT "}"
diff --git a/gcc/config/arm/linux-elf.h b/gcc/config/arm/linux-elf.h
index 2bf361a..79b9718 100644
--- a/gcc/config/arm/linux-elf.h
+++ b/gcc/config/arm/linux-elf.h
@@ -62,7 +62,7 @@
 
 #define LIBGCC_SPEC "%{mfloat-abi=soft*:-lfloat} -lgcc"
 
-#define GLIBC_DYNAMIC_LINKER "/lib/ld-linux.so.2"
+#define GLIBC_DYNAMIC_LINKER DYNAMIC_LINKER_PREFIX "/lib/ld-linux.so.2"
 
 #define LINUX_TARGET_LINK_SPEC  "%{h*} \
    %{static:-Bstatic} \
diff --git a/gcc/config/c6x/uclinux-elf.h b/gcc/config/c6x/uclinux-elf.h
index 3f3964b..d50a83e 100644
--- a/gcc/config/c6x/uclinux-elf.h
+++ b/gcc/config/c6x/uclinux-elf.h
@@ -36,7 +36,7 @@
 #define STARTFILE_SPEC \
   "%{!shared:crt1%O%s} crti%O%s %{shared|pie:crtbeginS.o%s;:crtbegin.o%s}"
 
-#define UCLIBC_DYNAMIC_LINKER "/lib/ld-uClibc.so.0"
+#define UCLIBC_DYNAMIC_LINKER DYNAMIC_LINKER_PREFIX "/lib/ld-uClibc.so.0"
 
 #undef LINK_SPEC
 #define LINK_SPEC ENDIAN_LINK_SPEC \
diff --git a/gcc/config/cris/linux.h b/gcc/config/cris/linux.h
index af27e10..6663fad 100644
--- a/gcc/config/cris/linux.h
+++ b/gcc/config/cris/linux.h
@@ -102,7 +102,7 @@ along with GCC; see the file COPYING3.  If not see
 #undef CRIS_DEFAULT_CPU_VERSION
 #define CRIS_DEFAULT_CPU_VERSION CRIS_CPU_NG
 
-#define GLIBC_DYNAMIC_LINKER "/lib/ld.so.1"
+#define GLIBC_DYNAMIC_LINKER DYNAMIC_LINKER_PREFIX "/lib/ld.so.1"
 
 #undef CRIS_LINK_SUBTARGET_SPEC
 #define CRIS_LINK_SUBTARGET_SPEC \
diff --git a/gcc/config/dragonfly.h b/gcc/config/dragonfly.h
index 115c25d..4de82ba 100644
--- a/gcc/config/dragonfly.h
+++ b/gcc/config/dragonfly.h
@@ -90,7 +90,8 @@ see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
 #undef  LINK_SPEC
 #define LINK_SPEC DFBSD_LINK_SPEC
 
-#define DFBSD_DYNAMIC_LINKER "/usr/libexec/ld-elf.so.2"
+#define DFBSD_DYNAMIC_LINKER DYNAMIC_LINKER_PREFIX "/usr/libexec/ld-elf.so.2"
+#define DFBSD_DYNAMIC_LINKER DYNAMIC_LINKER_PREFIX "/usr/libexec/ld-elf.so.2"
 
 
 /* Use --as-needed -lgcc_s for eh support.  */
diff --git a/gcc/config/freebsd-spec.h b/gcc/config/freebsd-spec.h
index 8e77006..3e6b5d3 100644
--- a/gcc/config/freebsd-spec.h
+++ b/gcc/config/freebsd-spec.h
@@ -128,9 +128,9 @@ is built with the --enable-threads configure-time option.}		\
 #endif
 
 #if FBSD_MAJOR < 6
-#define FBSD_DYNAMIC_LINKER "/usr/libexec/ld-elf.so.1"
+#define FBSD_DYNAMIC_LINKER DYNAMIC_LINKER_PREFIX "/usr/libexec/ld-elf.so.1"
 #else
-#define FBSD_DYNAMIC_LINKER "/libexec/ld-elf.so.1"
+#define FBSD_DYNAMIC_LINKER DYNAMIC_LINKER_PREFIX "/libexec/ld-elf.so.1"
 #endif
 
 /* NOTE: The freebsd-spec.h header is included also for various
diff --git a/gcc/config/frv/linux.h b/gcc/config/frv/linux.h
index 0fc4496..e3550e4 100644
--- a/gcc/config/frv/linux.h
+++ b/gcc/config/frv/linux.h
@@ -34,7 +34,7 @@
 #define ENDFILE_SPEC \
   "%{shared|pie:crtendS.o%s;:crtend.o%s} crtn.o%s"
 
-#define GLIBC_DYNAMIC_LINKER "/lib/ld.so.1"
+#define GLIBC_DYNAMIC_LINKER DYNAMIC_LINKER_PREFIX "/lib/ld.so.1"
 
 #undef LINK_SPEC
 #define LINK_SPEC "\
diff --git a/gcc/config/i386/gnu.h b/gcc/config/i386/gnu.h
index 29896e9..4131dc5 100644
--- a/gcc/config/i386/gnu.h
+++ b/gcc/config/i386/gnu.h
@@ -22,7 +22,7 @@ along with GCC.  If not, see <http://www.gnu.org/licenses/>.
 #define GNU_USER_LINK_EMULATION "elf_i386"
 
 #undef GNU_USER_DYNAMIC_LINKER
-#define GNU_USER_DYNAMIC_LINKER "/lib/ld.so"
+#define GNU_USER_DYNAMIC_LINKER DYNAMIC_LINKER_PREFIX "/lib/ld.so"
 
 #undef	STARTFILE_SPEC
 #if defined HAVE_LD_PIE
diff --git a/gcc/config/i386/kfreebsd-gnu.h b/gcc/config/i386/kfreebsd-gnu.h
index e487205..7e04011 100644
--- a/gcc/config/i386/kfreebsd-gnu.h
+++ b/gcc/config/i386/kfreebsd-gnu.h
@@ -19,4 +19,4 @@ along with GCC; see the file COPYING3.  If not see
 <http://www.gnu.org/licenses/>.  */
 
 #define GNU_USER_LINK_EMULATION "elf_i386_fbsd"
-#define GLIBC_DYNAMIC_LINKER "/lib/ld.so.1"
+#define GLIBC_DYNAMIC_LINKER DYNAMIC_LINKER_PREFIX "/lib/ld.so.1"
diff --git a/gcc/config/i386/kfreebsd-gnu64.h b/gcc/config/i386/kfreebsd-gnu64.h
index 1c75c8e..6039212 100644
--- a/gcc/config/i386/kfreebsd-gnu64.h
+++ b/gcc/config/i386/kfreebsd-gnu64.h
@@ -22,6 +22,6 @@ along with GCC; see the file COPYING3.  If not see
 #define GNU_USER_LINK_EMULATION64 "elf_x86_64_fbsd"
 #define GNU_USER_LINK_EMULATIONX32 "elf32_x86_64_fbsd"
 
-#define GLIBC_DYNAMIC_LINKER32 "/lib/ld.so.1"
-#define GLIBC_DYNAMIC_LINKER64 "/lib/ld-kfreebsd-x86-64.so.1"
-#define GLIBC_DYNAMIC_LINKERX32 "/lib/ld-kfreebsd-x32.so.1"
+#define GLIBC_DYNAMIC_LINKER32 DYNAMIC_LINKER_PREFIX "/lib/ld.so.1"
+#define GLIBC_DYNAMIC_LINKER64 DYNAMIC_LINKER_PREFIX "/lib/ld-kfreebsd-x86-64.so.1"
+#define GLIBC_DYNAMIC_LINKERX32 DYNAMIC_LINKER_PREFIX "/lib/ld-kfreebsd-x32.so.1"
diff --git a/gcc/config/i386/linux.h b/gcc/config/i386/linux.h
index 1fb1e03..5af8830 100644
--- a/gcc/config/i386/linux.h
+++ b/gcc/config/i386/linux.h
@@ -20,4 +20,4 @@ along with GCC; see the file COPYING3.  If not see
 <http://www.gnu.org/licenses/>.  */
 
 #define GNU_USER_LINK_EMULATION "elf_i386"
-#define GLIBC_DYNAMIC_LINKER "/lib/ld-linux.so.2"
+#define GLIBC_DYNAMIC_LINKER DYNAMIC_LINKER_PREFIX "/lib/ld-linux.so.2"
diff --git a/gcc/config/i386/linux64.h b/gcc/config/i386/linux64.h
index a90171e..4435dca 100644
--- a/gcc/config/i386/linux64.h
+++ b/gcc/config/i386/linux64.h
@@ -27,6 +27,6 @@ see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
 #define GNU_USER_LINK_EMULATION64 "elf_x86_64"
 #define GNU_USER_LINK_EMULATIONX32 "elf32_x86_64"
 
-#define GLIBC_DYNAMIC_LINKER32 "/lib/ld-linux.so.2"
-#define GLIBC_DYNAMIC_LINKER64 "/lib64/ld-linux-x86-64.so.2"
-#define GLIBC_DYNAMIC_LINKERX32 "/libx32/ld-linux-x32.so.2"
+#define GLIBC_DYNAMIC_LINKER32 DYNAMIC_LINKER_PREFIX "/lib/ld-linux.so.2"
+#define GLIBC_DYNAMIC_LINKER64 DYNAMIC_LINKER_PREFIX "/lib64/ld-linux-x86-64.so.2"
+#define GLIBC_DYNAMIC_LINKERX32 DYNAMIC_LINKER_PREFIX "/libx32/ld-linux-x32.so.2"
diff --git a/gcc/config/ia64/linux.h b/gcc/config/ia64/linux.h
index e4b12ec..4649575 100644
--- a/gcc/config/ia64/linux.h
+++ b/gcc/config/ia64/linux.h
@@ -55,7 +55,7 @@ do {						\
 /* Define this for shared library support because it isn't in the main
    linux.h file.  */
 
-#define GLIBC_DYNAMIC_LINKER "/lib/ld-linux-ia64.so.2"
+#define GLIBC_DYNAMIC_LINKER DYNAMIC_LINKER_PREFIX "/lib/ld-linux-ia64.so.2"
 
 #undef LINK_SPEC
 #define LINK_SPEC "\
diff --git a/gcc/config/knetbsd-gnu.h b/gcc/config/knetbsd-gnu.h
index 6fbf9d1..2015918 100644
--- a/gcc/config/knetbsd-gnu.h
+++ b/gcc/config/knetbsd-gnu.h
@@ -32,4 +32,4 @@ along with GCC; see the file COPYING3.  If not see
 
 
 #undef GNU_USER_DYNAMIC_LINKER
-#define GNU_USER_DYNAMIC_LINKER "/lib/ld.so.1"
+#define GNU_USER_DYNAMIC_LINKER DYNAMIC_LINKER_PREFIX "/lib/ld.so.1"
diff --git a/gcc/config/kopensolaris-gnu.h b/gcc/config/kopensolaris-gnu.h
index f0aaad1..41274d2 100644
--- a/gcc/config/kopensolaris-gnu.h
+++ b/gcc/config/kopensolaris-gnu.h
@@ -31,4 +31,4 @@ along with GCC; see the file COPYING3.  If not see
   while (0)
 
 #undef GNU_USER_DYNAMIC_LINKER
-#define GNU_USER_DYNAMIC_LINKER "/lib/ld.so.1"
+#define GNU_USER_DYNAMIC_LINKER DYNAMIC_LINKER_PREFIX "/lib/ld.so.1"
diff --git a/gcc/config/linux.h b/gcc/config/linux.h
index d38ef81..2992bf5 100644
--- a/gcc/config/linux.h
+++ b/gcc/config/linux.h
@@ -73,14 +73,14 @@ see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
    GLIBC_DYNAMIC_LINKER must be defined for each target using them, or
    GLIBC_DYNAMIC_LINKER32 and GLIBC_DYNAMIC_LINKER64 for targets
    supporting both 32-bit and 64-bit compilation.  */
-#define UCLIBC_DYNAMIC_LINKER "/lib/ld-uClibc.so.0"
-#define UCLIBC_DYNAMIC_LINKER32 "/lib/ld-uClibc.so.0"
-#define UCLIBC_DYNAMIC_LINKER64 "/lib/ld64-uClibc.so.0"
-#define UCLIBC_DYNAMIC_LINKERX32 "/lib/ldx32-uClibc.so.0"
-#define BIONIC_DYNAMIC_LINKER "/system/bin/linker"
-#define BIONIC_DYNAMIC_LINKER32 "/system/bin/linker"
-#define BIONIC_DYNAMIC_LINKER64 "/system/bin/linker64"
-#define BIONIC_DYNAMIC_LINKERX32 "/system/bin/linkerx32"
+#define UCLIBC_DYNAMIC_LINKER DYNAMIC_LINKER_PREFIX "/lib/ld-uClibc.so.0"
+#define UCLIBC_DYNAMIC_LINKER32 DYNAMIC_LINKER_PREFIX "/lib/ld-uClibc.so.0"
+#define UCLIBC_DYNAMIC_LINKER64 DYNAMIC_LINKER_PREFIX "/lib/ld64-uClibc.so.0"
+#define UCLIBC_DYNAMIC_LINKERX32 DYNAMIC_LINKER_PREFIX "/lib/ldx32-uClibc.so.0"
+#define BIONIC_DYNAMIC_LINKER DYNAMIC_LINKER_PREFIX "/system/bin/linker"
+#define BIONIC_DYNAMIC_LINKER32 DYNAMIC_LINKER_PREFIX "/system/bin/linker"
+#define BIONIC_DYNAMIC_LINKER64 DYNAMIC_LINKER_PREFIX "/system/bin/linker64"
+#define BIONIC_DYNAMIC_LINKERX32 DYNAMIC_LINKER_PREFIX "/system/bin/linkerx32"
 
 #define GNU_USER_DYNAMIC_LINKER						\
   CHOOSE_DYNAMIC_LINKER (GLIBC_DYNAMIC_LINKER, UCLIBC_DYNAMIC_LINKER,	\
diff --git a/gcc/config/m32r/linux.h b/gcc/config/m32r/linux.h
index 698086b..62aac30 100644
--- a/gcc/config/m32r/linux.h
+++ b/gcc/config/m32r/linux.h
@@ -37,7 +37,7 @@
    When the -shared link option is used a final link is not being
    done.  */
 
-#define GLIBC_DYNAMIC_LINKER "/lib/ld-linux.so.2"
+#define GLIBC_DYNAMIC_LINKER DYNAMIC_LINKER_PREFIX "/lib/ld-linux.so.2"
 
 #undef	LINK_SPEC
 #if TARGET_LITTLE_ENDIAN
diff --git a/gcc/config/m68k/linux.h b/gcc/config/m68k/linux.h
index 5a586f5..c8a6416 100644
--- a/gcc/config/m68k/linux.h
+++ b/gcc/config/m68k/linux.h
@@ -71,7 +71,7 @@ along with GCC; see the file COPYING3.  If not see
    When the -shared link option is used a final link is not being
    done.  */
 
-#define GLIBC_DYNAMIC_LINKER "/lib/ld.so.1"
+#define GLIBC_DYNAMIC_LINKER DYNAMIC_LINKER_PREFIX "/lib/ld.so.1"
 
 #undef LINK_SPEC
 #define LINK_SPEC "-m m68kelf %{shared} \
diff --git a/gcc/config/microblaze/linux.h b/gcc/config/microblaze/linux.h
index 48038d5..2e95ee3 100644
--- a/gcc/config/microblaze/linux.h
+++ b/gcc/config/microblaze/linux.h
@@ -25,7 +25,7 @@
 #undef TLS_NEEDS_GOT
 #define TLS_NEEDS_GOT 1
 
-#define DYNAMIC_LINKER "/lib/ld.so.1"
+#define DYNAMIC_LINKER DYNAMIC_LINKER_PREFIX "/lib/ld.so.1"
 #undef  SUBTARGET_EXTRA_SPECS
 #define SUBTARGET_EXTRA_SPECS \
   { "dynamic_linker", DYNAMIC_LINKER }
diff --git a/gcc/config/mips/linux.h b/gcc/config/mips/linux.h
index a117f90..37bebc0 100644
--- a/gcc/config/mips/linux.h
+++ b/gcc/config/mips/linux.h
@@ -21,23 +21,24 @@ along with GCC; see the file COPYING3.  If not see
 #define GNU_USER_LINK_EMULATION64 "elf64%{EB:b}%{EL:l}tsmip"
 #define GNU_USER_LINK_EMULATIONN32 "elf32%{EB:b}%{EL:l}tsmipn32"
 
-#define GLIBC_DYNAMIC_LINKER32 \
+#define GLIBC_DYNAMIC_LINKER32 DYNAMIC_LINKER_PREFIX \
   "%{mnan=2008:/lib/ld-linux-mipsn8.so.1;:/lib/ld.so.1}"
-#define GLIBC_DYNAMIC_LINKER64 \
+#define GLIBC_DYNAMIC_LINKER64 DYNAMIC_LINKER_PREFIX \
   "%{mnan=2008:/lib64/ld-linux-mipsn8.so.1;:/lib64/ld.so.1}"
-#define GLIBC_DYNAMIC_LINKERN32 \
+#define GLIBC_DYNAMIC_LINKERN32 DYNAMIC_LINKER_PREFIX \
   "%{mnan=2008:/lib32/ld-linux-mipsn8.so.1;:/lib32/ld.so.1}"
 
 #undef UCLIBC_DYNAMIC_LINKER32
-#define UCLIBC_DYNAMIC_LINKER32 \
+#define UCLIBC_DYNAMIC_LINKER32 DYNAMIC_LINKER_PREFIX \
   "%{mnan=2008:/lib/ld-uClibc-mipsn8.so.0;:/lib/ld-uClibc.so.0}"
 #undef UCLIBC_DYNAMIC_LINKER64
-#define UCLIBC_DYNAMIC_LINKER64 \
+#define UCLIBC_DYNAMIC_LINKER64 DYNAMIC_LINKER_PREFIX \
   "%{mnan=2008:/lib/ld64-uClibc-mipsn8.so.0;:/lib/ld64-uClibc.so.0}"
-#define UCLIBC_DYNAMIC_LINKERN32 \
+#define UCLIBC_DYNAMIC_LINKERN32 DYNAMIC_LINKER_PREFIX \
   "%{mnan=2008:/lib32/ld-uClibc-mipsn8.so.0;:/lib32/ld-uClibc.so.0}"
 
-#define BIONIC_DYNAMIC_LINKERN32 "/system/bin/linker32"
-#define GNU_USER_DYNAMIC_LINKERN32 \
+#define BIONIC_DYNAMIC_LINKERN32 DYNAMIC_LINKER_PREFIX "/system/bin/linker32"
+#define BIONIC_DYNAMIC_LINKERN32 DYNAMIC_LINKER_PREFIX "/system/bin/linker32"
+#define GNU_USER_DYNAMIC_LINKERN32 DYNAMIC_LINKER_PREFIX \
   CHOOSE_DYNAMIC_LINKER (GLIBC_DYNAMIC_LINKERN32, UCLIBC_DYNAMIC_LINKERN32, \
                          BIONIC_DYNAMIC_LINKERN32)
diff --git a/gcc/config/mn10300/linux.h b/gcc/config/mn10300/linux.h
index 5c465e9..7e4df63 100644
--- a/gcc/config/mn10300/linux.h
+++ b/gcc/config/mn10300/linux.h
@@ -32,7 +32,7 @@
 #undef  ASM_SPEC
 #define ASM_SPEC ""
 
-#define GLIBC_DYNAMIC_LINKER "/lib/ld.so.1"
+#define GLIBC_DYNAMIC_LINKER DYNAMIC_LINKER_PREFIX "/lib/ld.so.1"
 
 #undef  LINK_SPEC
 #define LINK_SPEC "%{mrelax:--relax} %{shared:-shared} \
diff --git a/gcc/config/nios2/linux.h b/gcc/config/nios2/linux.h
index 3e77ca6..2c04908 100644
--- a/gcc/config/nios2/linux.h
+++ b/gcc/config/nios2/linux.h
@@ -26,7 +26,7 @@
     }                                           \
   while (0)
 
-#define GLIBC_DYNAMIC_LINKER "/lib/ld-linux-nios2.so.1"
+#define GLIBC_DYNAMIC_LINKER DYNAMIC_LINKER_PREFIX "/lib/ld-linux-nios2.so.1"
 
 #undef LINK_SPEC
 #define LINK_SPEC LINK_SPEC_ENDIAN \
diff --git a/gcc/config/pa/pa-linux.h b/gcc/config/pa/pa-linux.h
index 3c3d51f..405ec6a 100644
--- a/gcc/config/pa/pa-linux.h
+++ b/gcc/config/pa/pa-linux.h
@@ -37,7 +37,7 @@ along with GCC; see the file COPYING3.  If not see
 /* Define this for shared library support because it isn't in the main
    linux.h file.  */
 
-#define GLIBC_DYNAMIC_LINKER "/lib/ld.so.1"
+#define GLIBC_DYNAMIC_LINKER DYNAMIC_LINKER_PREFIX "/lib/ld.so.1"
 
 #undef LINK_SPEC
 #define LINK_SPEC "\
diff --git a/gcc/config/rs6000/freebsd64.h b/gcc/config/rs6000/freebsd64.h
index 1a69aea..b63561f 100644
--- a/gcc/config/rs6000/freebsd64.h
+++ b/gcc/config/rs6000/freebsd64.h
@@ -154,8 +154,8 @@ extern int dot_symbols;
   { "link_os_freebsd_spec32",	LINK_OS_FREEBSD_SPEC32 },     		\
   { "link_os_freebsd_spec64",	LINK_OS_FREEBSD_SPEC64 },
 
-#define FREEBSD_DYNAMIC_LINKER32 "/libexec/ld-elf32.so.1"
-#define FREEBSD_DYNAMIC_LINKER64 "/libexec/ld-elf.so.1"
+#define FREEBSD_DYNAMIC_LINKER32 DYNAMIC_LINKER_PREFIX "/libexec/ld-elf32.so.1"
+#define FREEBSD_DYNAMIC_LINKER64 DYNAMIC_LINKER_PREFIX "/libexec/ld-elf.so.1"
 
 #define LINK_OS_FREEBSD_SPEC_DEF32 "\
   %{p:%nconsider using `-pg' instead of `-p' with gprof(1)} \
diff --git a/gcc/config/rs6000/linux64.h b/gcc/config/rs6000/linux64.h
index 5f74ed3..c8b4c74 100644
--- a/gcc/config/rs6000/linux64.h
+++ b/gcc/config/rs6000/linux64.h
@@ -361,14 +361,14 @@ extern int dot_symbols;
 #undef	LINK_OS_DEFAULT_SPEC
 #define LINK_OS_DEFAULT_SPEC "%(link_os_linux)"
 
-#define GLIBC_DYNAMIC_LINKER32 "/lib/ld.so.1"
+#define GLIBC_DYNAMIC_LINKER32 DYNAMIC_LINKER_PREFIX "/lib/ld.so.1"
 #ifdef LINUX64_DEFAULT_ABI_ELFv2
-#define GLIBC_DYNAMIC_LINKER64 "%{mabi=elfv1:/lib64/ld64.so.1;:/lib64/ld64.so.2}"
+#define GLIBC_DYNAMIC_LINKER64 DYNAMIC_LINKER_PREFIX "%{mabi=elfv1:/lib64/ld64.so.1;:/lib64/ld64.so.2}"
 #else
-#define GLIBC_DYNAMIC_LINKER64 "%{mabi=elfv2:/lib64/ld64.so.2;:/lib64/ld64.so.1}"
+#define GLIBC_DYNAMIC_LINKER64 DYNAMIC_LINKER_PREFIX "%{mabi=elfv2:/lib64/ld64.so.2;:/lib64/ld64.so.1}"
 #endif
-#define UCLIBC_DYNAMIC_LINKER32 "/lib/ld-uClibc.so.0"
-#define UCLIBC_DYNAMIC_LINKER64 "/lib/ld64-uClibc.so.0"
+#define UCLIBC_DYNAMIC_LINKER32 DYNAMIC_LINKER_PREFIX "/lib/ld-uClibc.so.0"
+#define UCLIBC_DYNAMIC_LINKER64 DYNAMIC_LINKER_PREFIX "/lib/ld64-uClibc.so.0"
 #if DEFAULT_LIBC == LIBC_UCLIBC
 #define CHOOSE_DYNAMIC_LINKER(G, U) "%{mglibc:" G ";:" U "}"
 #elif DEFAULT_LIBC == LIBC_GLIBC
diff --git a/gcc/config/rs6000/sysv4.h b/gcc/config/rs6000/sysv4.h
index a946936..22cfaf9 100644
--- a/gcc/config/rs6000/sysv4.h
+++ b/gcc/config/rs6000/sysv4.h
@@ -762,8 +762,8 @@ ENDIAN_SELECT(" -mbig", " -mlittle", DEFAULT_ASM_ENDIAN)
 
 #define LINK_START_LINUX_SPEC ""
 
-#define GLIBC_DYNAMIC_LINKER "/lib/ld.so.1"
-#define UCLIBC_DYNAMIC_LINKER "/lib/ld-uClibc.so.0"
+#define GLIBC_DYNAMIC_LINKER DYNAMIC_LINKER_PREFIX "/lib/ld.so.1"
+#define UCLIBC_DYNAMIC_LINKER DYNAMIC_LINKER_PREFIX "/lib/ld-uClibc.so.0"
 #if DEFAULT_LIBC == LIBC_UCLIBC
 #define CHOOSE_DYNAMIC_LINKER(G, U) "%{mglibc:" G ";:" U "}"
 #elif !defined (DEFAULT_LIBC) || DEFAULT_LIBC == LIBC_GLIBC
diff --git a/gcc/config/s390/linux.h b/gcc/config/s390/linux.h
index 65ac229..18807d4 100644
--- a/gcc/config/s390/linux.h
+++ b/gcc/config/s390/linux.h
@@ -60,8 +60,8 @@ along with GCC; see the file COPYING3.  If not see
 #define MULTILIB_DEFAULTS { "m31" }
 #endif
 
-#define GLIBC_DYNAMIC_LINKER32 "/lib/ld.so.1"
-#define GLIBC_DYNAMIC_LINKER64 "/lib/ld64.so.1"
+#define GLIBC_DYNAMIC_LINKER32 DYNAMIC_LINKER_PREFIX "/lib/ld.so.1"
+#define GLIBC_DYNAMIC_LINKER64 DYNAMIC_LINKER_PREFIX "/lib/ld64.so.1"
 
 #undef  LINK_SPEC
 #define LINK_SPEC \
diff --git a/gcc/config/sh/linux.h b/gcc/config/sh/linux.h
index c0a4ebd..1192636 100644
--- a/gcc/config/sh/linux.h
+++ b/gcc/config/sh/linux.h
@@ -43,7 +43,7 @@ along with GCC; see the file COPYING3.  If not see
 
 #define TARGET_ASM_FILE_END file_end_indicate_exec_stack
 
-#define GLIBC_DYNAMIC_LINKER "/lib/ld-linux.so.2"
+#define GLIBC_DYNAMIC_LINKER DYNAMIC_LINKER_PREFIX "/lib/ld-linux.so.2"
 
 #undef SUBTARGET_LINK_EMUL_SUFFIX
 #define SUBTARGET_LINK_EMUL_SUFFIX "_linux"
diff --git a/gcc/config/sparc/linux.h b/gcc/config/sparc/linux.h
index 277e49a..0aaa7c5 100644
--- a/gcc/config/sparc/linux.h
+++ b/gcc/config/sparc/linux.h
@@ -83,7 +83,7 @@ extern const char *host_detect_local_cpu (int argc, const char **argv);
    When the -shared link option is used a final link is not being
    done.  */
 
-#define GLIBC_DYNAMIC_LINKER "/lib/ld-linux.so.2"
+#define GLIBC_DYNAMIC_LINKER DYNAMIC_LINKER_PREFIX "/lib/ld-linux.so.2"
 
 #undef  LINK_SPEC
 #define LINK_SPEC "-m elf32_sparc %{shared:-shared} \
diff --git a/gcc/config/sparc/linux64.h b/gcc/config/sparc/linux64.h
index 7f12881..ecb46a5 100644
--- a/gcc/config/sparc/linux64.h
+++ b/gcc/config/sparc/linux64.h
@@ -84,8 +84,8 @@ along with GCC; see the file COPYING3.  If not see
    When the -shared link option is used a final link is not being
    done.  */
 
-#define GLIBC_DYNAMIC_LINKER32 "/lib/ld-linux.so.2"
-#define GLIBC_DYNAMIC_LINKER64 "/lib64/ld-linux.so.2"
+#define GLIBC_DYNAMIC_LINKER32 DYNAMIC_LINKER_PREFIX "/lib/ld-linux.so.2"
+#define GLIBC_DYNAMIC_LINKER64 DYNAMIC_LINKER_PREFIX "/lib64/ld-linux.so.2"
 
 #ifdef SPARC_BI_ARCH
 
diff --git a/gcc/config/xtensa/linux.h b/gcc/config/xtensa/linux.h
index 100a8c1..f882aea 100644
--- a/gcc/config/xtensa/linux.h
+++ b/gcc/config/xtensa/linux.h
@@ -44,7 +44,7 @@ along with GCC; see the file COPYING3.  If not see
   %{mlongcalls:--longcalls} \
   %{mno-longcalls:--no-longcalls}"
 
-#define GLIBC_DYNAMIC_LINKER "/lib/ld.so.1"
+#define GLIBC_DYNAMIC_LINKER DYNAMIC_LINKER_PREFIX "/lib/ld.so.1"
 
 #undef LINK_SPEC
 #define LINK_SPEC \
diff --git a/gcc/configure b/gcc/configure
index 6b46bbb..7bc009b 100755
--- a/gcc/configure
+++ b/gcc/configure
@@ -897,6 +897,7 @@ enable_objc_gc
 with_dwarf2
 enable_shared
 with_native_system_header_dir
+with_dynamic_linker_prefix
 with_build_sysroot
 with_sysroot
 with_specs
@@ -1686,6 +1687,8 @@ Optional Packages:
   --with-native-system-header-dir=dir
                           use dir as the directory to look for standard
                           system header files in.  Defaults to /usr/include.
+  --with-dynamic-linker-prefix=dir
+                          use dir as the root directory of the dynamic linker.
   --with-build-sysroot=sysroot
                           use sysroot as the system root during the build
   --with-sysroot[=DIR]    search for usr/lib, usr/include, et al, within DIR
@@ -7270,6 +7273,22 @@ fi
 
 
 
+# Check whether --with-dynamic-linker-prefix was given.
+if test "${with_dynamic_linker_prefix+set}" = set; then :
+  withval=$with_dynamic_linker_prefix; if test x"$withval" != x ; then
+     DYNAMIC_LINKER_PREFIX="$withval"
+  fi
+else
+  DYNAMIC_LINKER_PREFIX=
+fi
+
+
+cat >>confdefs.h <<_ACEOF
+#define DYNAMIC_LINKER_PREFIX "$DYNAMIC_LINKER_PREFIX"
+_ACEOF
+
+
+
 # Check whether --with-build-sysroot was given.
 if test "${with_build_sysroot+set}" = set; then :
   withval=$with_build_sysroot; if test x"$withval" != x ; then
diff --git a/gcc/configure.ac b/gcc/configure.ac
index 48c8000..fd67f89 100644
--- a/gcc/configure.ac
+++ b/gcc/configure.ac
@@ -804,6 +804,16 @@ AC_ARG_WITH([native-system-header-dir],
  configured_native_system_header_dir="${withval}"
 ], [configured_native_system_header_dir=])
 
+AC_ARG_WITH([dynamic-linker-prefix],
+  [AS_HELP_STRING([--with-dynamic-linker-prefix=dir],
+                  [use dir as the root directory of the dynamic linker.])],
+  [if test x"$withval" != x ; then
+     DYNAMIC_LINKER_PREFIX="$withval"
+  fi],
+  [DYNAMIC_LINKER_PREFIX=])
+AC_DEFINE_UNQUOTED(DYNAMIC_LINKER_PREFIX, "$DYNAMIC_LINKER_PREFIX",
+                   [root directory of the dynamic linker])
+
 AC_ARG_WITH(build-sysroot, 
   [AS_HELP_STRING([--with-build-sysroot=sysroot],
                   [use sysroot as the system root during the build])],
