summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authormeissner <meissner@138bc75d-0d04-0410-961f-82ee72b054a4>2015-06-03 16:38:10 +0000
committermeissner <meissner@138bc75d-0d04-0410-961f-82ee72b054a4>2015-06-03 16:38:10 +0000
commit78de65bca3a3e8d99bafd5ad3d2d5caaeba55c14 (patch)
treeebacaa694ad2837c4490e108f3bbd2e38a3963e2
parent73a9a75eabae5bc5121035f2dd21864c2e282546 (diff)
downloadgcc-78de65bca3a3e8d99bafd5ad3d2d5caaeba55c14.tar.gz
2015-06-03 Michael Meissner <meissner@linux.vnet.ibm.com>
* config.gcc (powerpc*-*-*): Add support for a new configure option --with-advance-toolchain=<xxx> which overrides using the default header files, libraries and dynamic linker. * config/rs6000/linux64.h (SUBSUBTARGET_EXTRA_SPECS): Add new specs to support the configure --with-advance-toolchain=<xxx> option. (INCLUDE_EXTRA_SPEC): Likewise. (LINK_OS_EXTRA_SPEC32): Likewise. (LINK_OK_EXTRA_SPEC64): Likewise. (LINK_OS_NEW_DTAGS_SPEC): Likewise. (DYNAMIC_LINKER_PREFIX): Likewise. (CPP_OS_DEFAULT_SPEC): Use the new specs for providing advance toolchain support. (GLIBC_DYNAMIC_LINKER32): Likewise. (GLIBC_DYNAMIC_LINKER64): Likewise. (LINK_OS_LINUX_SPEC32): Likewise. (LINK_OS_LINUX_SPEC64): Likewise. * doc/install.texi (--enable-advance-toolchain=<xx>): Document new configuration option. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@224095 138bc75d-0d04-0410-961f-82ee72b054a4
-rw-r--r--gcc/ChangeLog24
-rw-r--r--gcc/config.gcc52
-rw-r--r--gcc/config/rs6000/linux64.h51
-rw-r--r--gcc/doc/install.texi8
4 files changed, 127 insertions, 8 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 3951a8e4942..2124e52439b 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,27 @@
+2015-06-03 Michael Meissner <meissner@linux.vnet.ibm.com>
+
+ * config.gcc (powerpc*-*-*): Add support for a new configure
+ option --with-advance-toolchain=<xxx> which overrides using the
+ default header files, libraries and dynamic linker.
+
+ * config/rs6000/linux64.h (SUBSUBTARGET_EXTRA_SPECS): Add new
+ specs to support the configure --with-advance-toolchain=<xxx>
+ option.
+ (INCLUDE_EXTRA_SPEC): Likewise.
+ (LINK_OS_EXTRA_SPEC32): Likewise.
+ (LINK_OK_EXTRA_SPEC64): Likewise.
+ (LINK_OS_NEW_DTAGS_SPEC): Likewise.
+ (DYNAMIC_LINKER_PREFIX): Likewise.
+ (CPP_OS_DEFAULT_SPEC): Use the new specs for providing advance
+ toolchain support.
+ (GLIBC_DYNAMIC_LINKER32): Likewise.
+ (GLIBC_DYNAMIC_LINKER64): Likewise.
+ (LINK_OS_LINUX_SPEC32): Likewise.
+ (LINK_OS_LINUX_SPEC64): Likewise.
+
+ * doc/install.texi (--enable-advance-toolchain=<xx>): Document new
+ configuration option.
+
2015-06-03 Uros Bizjak <ubizjak@gmail.com>
PR target/66275
diff --git a/gcc/config.gcc b/gcc/config.gcc
index e23a34c2528..13a567fadbf 100644
--- a/gcc/config.gcc
+++ b/gcc/config.gcc
@@ -4044,7 +4044,7 @@ case "${target}" in
;;
powerpc*-*-* | rs6000-*-*)
- supported_defaults="abi cpu cpu_32 cpu_64 float tune tune_32 tune_64"
+ supported_defaults="abi cpu cpu_32 cpu_64 float tune tune_32 tune_64 advance_toolchain"
for which in cpu cpu_32 cpu_64 tune tune_32 tune_64; do
eval "val=\$with_$which"
@@ -4091,6 +4091,56 @@ case "${target}" in
exit 1
;;
esac
+
+ if test "x$with_advance_toolchain" != x; then
+ if test -d "/opt/$with_advance_toolchain/." -a \
+ -d "/opt/$with_advance_toolchain/bin/." -a \
+ -d "/opt/$with_advance_toolchain/include/."; then
+
+ tm_file="$tm_file ./advance-toolchain.h"
+ (at="/opt/$with_advance_toolchain"
+ echo "/* Use Advance Toolchain $at */"
+ echo
+ echo "#ifndef USE_AT_INCLUDE_FILES"
+ echo "#define USE_AT_INCLUDE_FILES 1"
+ echo "#endif"
+ echo
+ echo "#if USE_AT_INCLUDE_FILES"
+ echo "#undef INCLUDE_EXTRA_SPEC"
+ echo "#define INCLUDE_EXTRA_SPEC" \
+ "\"-isystem $at/include\""
+ echo "#endif"
+ echo
+ echo "#undef LINK_OS_EXTRA_SPEC32"
+ echo "#define LINK_OS_EXTRA_SPEC32" \
+ "\"%(link_os_new_dtags)" \
+ "-rpath $prefix/lib -rpath $at/lib" \
+ "-L $prefix/lib -L $at/lib\""
+ echo
+ echo "#undef LINK_OS_EXTRA_SPEC64"
+ echo "#define LINK_OS_EXTRA_SPEC64" \
+ "\"%(link_os_new_dtags)" \
+ "-rpath $prefix/lib64 -rpath $at/lib64" \
+ "-L $prefix/lib64 -L $at/lib64\""
+ echo
+ echo "#undef LINK_OS_NEW_DTAGS_SPEC"
+ echo "#define LINK_OS_NEW_DTAGS_SPEC" \
+ "\"--enable-new-dtags\""
+ echo
+ echo "#undef DYNAMIC_LINKER_PREFIX"
+ echo "#define DYNAMIC_LINKER_PREFIX \"$at\""
+ echo
+ echo "#undef MD_EXEC_PREFIX"
+ echo "#define MD_EXEC_PREFIX \"$at/bin/\""
+ echo
+ echo "#undef MD_STARTFILE_PREFIX"
+ echo "#define MD_STARTFILE_PREFIX \"$at/lib/\"") \
+ > advance-toolchain.h
+ else
+ echo "Unknown advance-toolchain $with_advance_toolchain"
+ exit 1
+ fi
+ fi
;;
s390*-*-*)
diff --git a/gcc/config/rs6000/linux64.h b/gcc/config/rs6000/linux64.h
index bec0fd9c842..95997357579 100644
--- a/gcc/config/rs6000/linux64.h
+++ b/gcc/config/rs6000/linux64.h
@@ -207,7 +207,36 @@ extern int dot_symbols;
{ "asm_spec32", ASM_SPEC32 }, \
{ "asm_spec64", ASM_SPEC64 }, \
{ "link_os_linux_spec32", LINK_OS_LINUX_SPEC32 }, \
- { "link_os_linux_spec64", LINK_OS_LINUX_SPEC64 },
+ { "link_os_linux_spec64", LINK_OS_LINUX_SPEC64 }, \
+ { "link_os_extra_spec32", LINK_OS_EXTRA_SPEC32 }, \
+ { "link_os_extra_spec64", LINK_OS_EXTRA_SPEC64 }, \
+ { "link_os_new_dtags", LINK_OS_NEW_DTAGS_SPEC }, \
+ { "include_extra", INCLUDE_EXTRA_SPEC }, \
+ { "dynamic_linker_prefix", DYNAMIC_LINKER_PREFIX },
+
+/* Optional specs used for overriding the system include directory, default
+ -rpath links, and prefix for the dynamic linker. Normally, there are not
+ defined, but if the user configure with the --with-advance-toolchain=<xxx>
+ option, the advance-toolchain.h file will override these. */
+#ifndef INCLUDE_EXTRA_SPEC
+#define INCLUDE_EXTRA_SPEC ""
+#endif
+
+#ifndef LINK_OS_EXTRA_SPEC32
+#define LINK_OS_EXTRA_SPEC32 ""
+#endif
+
+#ifndef LINK_OS_EXTRA_SPEC64
+#define LINK_OS_EXTRA_SPEC64 ""
+#endif
+
+#ifndef LINK_OS_NEW_DTAGS_SPEC
+#define LINK_OS_NEW_DTAGS_SPEC ""
+#endif
+
+#ifndef DYNAMIC_LINKER_PREFIX
+#define DYNAMIC_LINKER_PREFIX ""
+#endif
#undef MULTILIB_DEFAULTS
#if DEFAULT_ARCH64_P
@@ -341,7 +370,7 @@ extern int dot_symbols;
while (0)
#undef CPP_OS_DEFAULT_SPEC
-#define CPP_OS_DEFAULT_SPEC "%(cpp_os_linux)"
+#define CPP_OS_DEFAULT_SPEC "%(cpp_os_linux) %(include_extra)"
#undef LINK_SHLIB_SPEC
#define LINK_SHLIB_SPEC "%{shared:-shared} %{!shared: %{static:-static}}"
@@ -361,12 +390,18 @@ 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 \
+"%{mabi=elfv1:%(dynamic_linker_prefix)/lib64/ld64.so.1;" \
+":%(dynamic_linker_prefix)/lib64/ld64.so.2}"
#else
-#define GLIBC_DYNAMIC_LINKER64 "%{mabi=elfv2:/lib64/ld64.so.2;:/lib64/ld64.so.1}"
+#define GLIBC_DYNAMIC_LINKER64 \
+"%{mabi=elfv2:%(dynamic_linker_prefix)/lib64/ld64.so.2;" \
+":%(dynamic_linker_prefix)/lib64/ld64.so.1}"
#endif
+
#define UCLIBC_DYNAMIC_LINKER32 "/lib/ld-uClibc.so.0"
#define UCLIBC_DYNAMIC_LINKER64 "/lib/ld64-uClibc.so.0"
#if DEFAULT_LIBC == LIBC_UCLIBC
@@ -402,11 +437,13 @@ extern int dot_symbols;
#define LINK_OS_LINUX_SPEC32 LINK_OS_LINUX_EMUL32 " %{!shared: %{!static: \
%{rdynamic:-export-dynamic} \
- -dynamic-linker " GNU_USER_DYNAMIC_LINKER32 "}}"
+ -dynamic-linker " GNU_USER_DYNAMIC_LINKER32 "}} \
+ %(link_os_extra_spec32)"
#define LINK_OS_LINUX_SPEC64 LINK_OS_LINUX_EMUL64 " %{!shared: %{!static: \
%{rdynamic:-export-dynamic} \
- -dynamic-linker " GNU_USER_DYNAMIC_LINKER64 "}}"
+ -dynamic-linker " GNU_USER_DYNAMIC_LINKER64 "}} \
+ %(link_os_extra_spec64)"
#undef TOC_SECTION_ASM_OP
#define TOC_SECTION_ASM_OP \
diff --git a/gcc/doc/install.texi b/gcc/doc/install.texi
index 24c4a338282..bcebcd225c7 100644
--- a/gcc/doc/install.texi
+++ b/gcc/doc/install.texi
@@ -1607,6 +1607,14 @@ should not be built.
Specify that the compiler should
use DWARF 2 debugging information as the default.
+@item --with-advance-toolchain=@var{at}
+On 64-bit PowerPC Linux systems, configure the compiler to use the
+header files, library files, and the dynamic linker from the Advance
+Toolchain release @var{at} instead of the default versions that are
+provided by the Linux distribution. In general, this option is
+intended for the developers of GCC, and it is not intended for general
+use.
+
@item --enable-targets=all
@itemx --enable-targets=@var{target_list}
Some GCC targets, e.g.@: powerpc64-linux, build bi-arch compilers.