This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
[build] Support --sysroot with Solaris ld
- From: Rainer Orth <ro at CeBiTec dot Uni-Bielefeld dot DE>
- To: gcc-patches at gcc dot gnu dot org
- Date: Wed, 31 May 2017 13:59:37 +0200
- Subject: [build] Support --sysroot with Solaris ld
- Authentication-results: sourceware.org; auth=none
The Solaris linker recently gained sysroot support. The following patch
enables that, although there isn't much to do:
* Until recently, ld --help output went to stderr, not being caught by
gcc/configure's tests which only checked stdout. However, older ld
versions still differ here and libtool long has been checking both
stdout and stderr, so this seems a pretty obvious change to me.
The only point worth mentioning is that I've guarded the --as-needed
check for non-GNU ld: before, the native Solaris -z ignore/-z record
forms were used, now this would use the compat options
--as-needed/--no-as-needed which occur in the --help output.
* While Solaris ld *does* support --sysroot for gld compatibility, we've
always preferred the native forms of the options, -z sysroot in this
case, which the sol2.h part of the patch implements.
Tested in i386-pc-solaris2.12 and sparc-sun-solaris2.12 builds with both
ld and gld, checking that auto-host.h has no unexpected changes.
Also tested with i386-pc-solaris2.12 x sparc-sun-solaris2.12 and
sparc-sun-solaris2.12 x i386-pc-solaris2.12 crosses with both ld (which
has been a cross-linker for quite some time) and gld, checking that -z
sysroot/--sysroot was used as expected.
Ok for mainline?
Rainer
--
-----------------------------------------------------------------------------
Rainer Orth, Center for Biotechnology, Bielefeld University
2017-05-16 Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE>
* configure.ac (gcc_cv_ld_static_dynamic): Also check stderr for
$gcc_cv_ld --help output.
(gcc_cv_ld_demangle): Likewise.
(gcc_cv_ld_eh_frame_hdr): Likewise.
(gcc_cv_ld_pie): Likewise.
(gcc_cv_ld_as_needed): Likewise. Prefer native forms unless $gnu_ld.
(gcc_cv_ld_buildid): Likewise.
(gcc_cv_ld_sysroot): Likewise.
(ld_bndplt_support): Likewise.
(ld_pushpopstate_support): Likewise.
* configure: Regenerate.
* config/sol2.h [!USE_GLD] (SYSROOT_SPEC): Define.
# HG changeset patch
# Parent 75c2ebacfcb74a24e20ed0ec0acd6eeafeff5e86
Support --sysroot with Solaris ld
diff --git a/gcc/config/sol2.h b/gcc/config/sol2.h
--- a/gcc/config/sol2.h
+++ b/gcc/config/sol2.h
@@ -334,6 +334,11 @@ along with GCC; see the file COPYING3.
#endif
#ifndef USE_GLD
+/* Prefer native form with Solaris ld. */
+#define SYSROOT_SPEC "-z sysroot=%R"
+#endif
+
+#ifndef USE_GLD
/* With Sun ld, use mapfile to enforce direct binding to libgcc_s unwinder. */
#define LINK_LIBGCC_MAPFILE_SPEC \
"%{shared|shared-libgcc:-M %slibgcc-unwind.map}"
diff --git a/gcc/configure.ac b/gcc/configure.ac
--- a/gcc/configure.ac
+++ b/gcc/configure.ac
@@ -3569,8 +3569,8 @@ if test $in_tree_ld = yes ; then
fi
elif test x$gcc_cv_ld != x; then
# Check if linker supports -Bstatic/-Bdynamic option
- if $gcc_cv_ld --help 2>/dev/null | grep -- -Bstatic > /dev/null \
- && $gcc_cv_ld --help 2>/dev/null | grep -- -Bdynamic > /dev/null; then
+ if $gcc_cv_ld --help 2>&1 | grep -- -Bstatic > /dev/null \
+ && $gcc_cv_ld --help 2>&1 | grep -- -Bdynamic > /dev/null; then
gcc_cv_ld_static_dynamic=yes
else
case "$target" in
@@ -3614,7 +3614,7 @@ if test x"$demangler_in_ld" = xyes; then
fi
elif test x$gcc_cv_ld != x -a x"$gnu_ld" = xyes; then
# Check if the GNU linker supports --demangle option
- if $gcc_cv_ld --help 2>/dev/null | grep no-demangle > /dev/null; then
+ if $gcc_cv_ld --help 2>&1 | grep no-demangle > /dev/null; then
gcc_cv_ld_demangle=yes
fi
fi
@@ -4949,7 +4949,7 @@ if test $in_tree_ld = yes ; then
elif test x$gcc_cv_ld != x; then
if echo "$ld_ver" | grep GNU > /dev/null; then
# Check if linker supports --eh-frame-hdr option
- if $gcc_cv_ld --help 2>/dev/null | grep eh-frame-hdr > /dev/null; then
+ if $gcc_cv_ld --help 2>&1 | grep eh-frame-hdr > /dev/null; then
gcc_cv_ld_eh_frame_hdr=yes
fi
else
@@ -5020,7 +5020,7 @@ if test $in_tree_ld = yes ; then
fi
elif test x$gcc_cv_ld != x; then
# Check if linker supports -pie option
- if $gcc_cv_ld --help 2>/dev/null | grep -- -pie > /dev/null; then
+ if $gcc_cv_ld --help 2>&1 | grep -- -pie > /dev/null; then
gcc_cv_ld_pie=yes
case "$target" in
*-*-solaris2*)
@@ -5346,19 +5346,19 @@ if test $in_tree_ld = yes ; then
gcc_cv_ld_as_needed=yes
fi
elif test x$gcc_cv_ld != x; then
- # Check if linker supports --as-needed and --no-as-needed options
- if $gcc_cv_ld --help 2>/dev/null | grep as-needed > /dev/null; then
- gcc_cv_ld_as_needed=yes
- else
- case "$target" in
- # Solaris 2 ld always supports -z ignore/-z record.
- *-*-solaris2*)
- gcc_cv_ld_as_needed=yes
- gcc_cv_ld_as_needed_option="-z ignore"
- gcc_cv_ld_no_as_needed_option="-z record"
- ;;
- esac
- fi
+ # Check if linker supports --as-needed and --no-as-needed options
+ if $gcc_cv_ld --help 2>&1 | grep as-needed > /dev/null; then
+ gcc_cv_ld_as_needed=yes
+ fi
+ case "$target:$gnu_ld" in
+ *-*-solaris2*:no)
+ # Solaris 2 ld always supports -z ignore/-z record. Prefer the native
+ # forms.
+ gcc_cv_ld_as_needed=yes
+ gcc_cv_ld_as_needed_option="-z ignore"
+ gcc_cv_ld_no_as_needed_option="-z record"
+ ;;
+ esac
fi
# --as-needed/-z ignore can only be used if libgcc_s.so.1 uses
# dl_iterate_phdr, i.e. since Solaris 11.
@@ -5598,7 +5598,7 @@ AC_CACHE_CHECK(linker --build-id support
gcc_cv_ld_buildid=yes
fi
elif test x$gcc_cv_ld != x; then
- if $gcc_cv_ld --help 2>/dev/null | grep build-id > /dev/null; then
+ if $gcc_cv_ld --help 2>&1 | grep build-id > /dev/null; then
gcc_cv_ld_buildid=yes
fi
fi])
@@ -5653,7 +5653,7 @@ AC_CACHE_CHECK(linker --sysroot support,
gcc_cv_ld_sysroot=yes
fi
elif test x$gcc_cv_ld != x; then
- if $gcc_cv_ld --help 2>/dev/null | grep sysroot > /dev/null; then
+ if $gcc_cv_ld --help 2>&1 | grep sysroot > /dev/null; then
gcc_cv_ld_sysroot=yes
fi
fi])
@@ -6327,7 +6327,7 @@ if test x"$ld_is_gold" = xno; then
fi
elif test x$gcc_cv_ld != x; then
# Check if linker supports -a bndplt option
- if $gcc_cv_ld --help 2>/dev/null | grep -- '-z bndplt' > /dev/null; then
+ if $gcc_cv_ld --help 2>&1 | grep -- '-z bndplt' > /dev/null; then
ld_bndplt_support=yes
fi
fi
@@ -6348,7 +6348,7 @@ if test x"$ld_is_gold" = xno; then
fi
elif test x$gcc_cv_ld != x; then
# Check if linker supports --push-state/--pop-state options
- if $gcc_cv_ld --help 2>/dev/null | grep -- '--push-state' > /dev/null; then
+ if $gcc_cv_ld --help 2>&1 | grep -- '--push-state' > /dev/null; then
ld_pushpopstate_support=yes
fi
fi