From patchwork Thu Dec 4 07:59:18 2014 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Benda Xu X-Patchwork-Id: 417667 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Received: from sourceware.org (server1.sourceware.org [209.132.180.131]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id B045D1400E2 for ; Thu, 4 Dec 2014 18:52:44 +1100 (AEDT) DomainKey-Signature: a=rsa-sha1; c=nofws; d=gcc.gnu.org; h=list-id :list-unsubscribe:list-archive:list-post:list-help:sender:from :to:cc:subject:date:message-id; q=dns; s=default; b=VGeawaNLNnVt VQ2kfKG06VXjW4+2Jdu6f75R5cvWiiqwLIXwUYchuwcThaGlMrTef9KfbjALjYgC eDhN088ZK9hZA6xT9wn0WduyJwaW0lFCrG0/zxx1LKXvxrGY3X22sdY9dtR4wimc M6ZFI3+0kKvzafOKKDmtCqPnBLkbl1c= DKIM-Signature: v=1; a=rsa-sha1; c=relaxed; d=gcc.gnu.org; h=list-id :list-unsubscribe:list-archive:list-post:list-help:sender:from :to:cc:subject:date:message-id; s=default; bh=6HyWXLnQ/KFxCptTqo fT1pYSDCs=; b=HzXSeE99k7MXi7rcJkMqYBD3kA9pGyWOcD6bFv8Kpn/Ie7ZgWK 31kPtl2ZUvCkNKUViwlBhfaxzdSHyfZ7lqjJKvx4JCrjSymF7NQHCy7JcSvOdjWM hX66blR3ML1Hukn58o2e/JrtY3XwTES3Rxx12ZSWoZLrKDH281rWTha98= Received: (qmail 4642 invoked by alias); 4 Dec 2014 07:52:36 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Id: List-Unsubscribe: List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 4619 invoked by uid 89); 4 Dec 2014 07:52:35 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-0.2 required=5.0 tests=AWL, BAYES_50, SPF_PASS, T_RP_MATCHES_RCVD autolearn=ham version=3.3.2 X-HELO: smtp.gentoo.org Received: from smtp.gentoo.org (HELO smtp.gentoo.org) (140.211.166.183) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with (AES256-GCM-SHA384 encrypted) ESMTPS; Thu, 04 Dec 2014 07:52:31 +0000 Received: from cerium.in.awa.tohoku.ac.jp (ernie02-dmz.awa.tohoku.ac.jp [130.34.99.37]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-SHA256 (128/128 bits)) (No client certificate requested) (Authenticated sender: heroxbd) by smtp.gentoo.org (Postfix) with ESMTPSA id 577D9340590; Thu, 4 Dec 2014 07:52:28 +0000 (UTC) From: Benda Xu To: gcc-patches@gcc.gnu.org Cc: Benda Xu Subject: [PATCH] Add a configurable directory prefix for dynamic linkers. Date: Thu, 4 Dec 2014 16:59:18 +0900 Message-Id: <1417679958-31761-1-git-send-email-heroxbd@gentoo.org> Hello, libc could be installed in a directory prefix. This patch provides a way to specify such a prefix for gcc at configuration time. I have only tested the patch with glibc on amd64, x86 and arm. It is logically straightforward. Please share your thoughts on it. Cheers, Benda * configure.ac: add --with-dynamic-linker-prefix * configure, config.in: regenerated * *.h under config: prepend dynamic-linkers with DYNAMIC_LINKER_PREFIX --- gcc/config.in | 6 ++++++ gcc/config/aarch64/aarch64-linux.h | 3 ++- gcc/config/alpha/linux-elf.h | 4 ++-- gcc/config/arm/linux-eabi.h | 6 +++--- gcc/config/arm/linux-elf.h | 2 +- gcc/config/c6x/uclinux-elf.h | 2 +- gcc/config/cris/linux.h | 2 +- gcc/config/dragonfly.h | 3 ++- gcc/config/freebsd-spec.h | 4 ++-- gcc/config/frv/linux.h | 2 +- gcc/config/i386/gnu.h | 2 +- gcc/config/i386/kfreebsd-gnu.h | 2 +- gcc/config/i386/kfreebsd-gnu64.h | 6 +++--- gcc/config/i386/linux.h | 2 +- gcc/config/i386/linux64.h | 6 +++--- gcc/config/ia64/linux.h | 2 +- gcc/config/knetbsd-gnu.h | 2 +- gcc/config/kopensolaris-gnu.h | 2 +- gcc/config/linux.h | 16 ++++++++-------- gcc/config/m32r/linux.h | 2 +- gcc/config/m68k/linux.h | 2 +- gcc/config/microblaze/linux.h | 2 +- gcc/config/mips/linux.h | 17 +++++++++-------- gcc/config/mn10300/linux.h | 2 +- gcc/config/nios2/linux.h | 2 +- gcc/config/pa/pa-linux.h | 2 +- gcc/config/rs6000/freebsd64.h | 4 ++-- gcc/config/rs6000/linux64.h | 10 +++++----- gcc/config/rs6000/sysv4.h | 4 ++-- gcc/config/s390/linux.h | 4 ++-- gcc/config/sh/linux.h | 2 +- gcc/config/sparc/linux.h | 2 +- gcc/config/sparc/linux64.h | 4 ++-- gcc/config/xtensa/linux.h | 2 +- gcc/configure | 19 +++++++++++++++++++ gcc/configure.ac | 10 ++++++++++ 36 files changed, 101 insertions(+), 63 deletions(-) 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 . #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 . */ #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 . */ #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])],