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 <r...@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