This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
Re: [build, lto] Only accept -fuse-linker-plugin if linker supports -plugin (PR lto/46944)
- From: Ralf Wildenhues <Ralf dot Wildenhues at gmx dot de>
- To: Rainer Orth <ro at CeBiTec dot Uni-Bielefeld dot DE>
- Cc: Richard Guenther <richard dot guenther at gmail dot com>, Michael Matz <matz at suse dot de>, gcc-patches at gcc dot gnu dot org, Richard Guenther <rguenther at suse dot de>, Paolo Bonzini <bonzini at gnu dot org>
- Date: Mon, 18 Apr 2011 20:12:48 +0200
- Subject: Re: [build, lto] Only accept -fuse-linker-plugin if linker supports -plugin (PR lto/46944)
- References: <Pine.LNX.4.64.1103260341510.19760@wotan.suse.de> <AANLkTikOqnfswfmSoGkeEZdMrbaet4UP4BfaSebtAods@mail.gmail.com> <ydd1v1idmcf.fsf@manam.CeBiTec.Uni-Bielefeld.DE>
Hello Rainer,
* Rainer Orth wrote on Mon, Apr 04, 2011 at 06:15:28PM CEST:
> Here's a patch that does this. I'm not at all happy with the patch
> since it partially duplicates the logic to determine linker version
> numbers. While this could (and probably should) be generalized along
> the lines of gcc_GAS_CHECK_FEATURE and gcc_GAS_VERSION_GTE_IFELSE, even
> that wouldn't help immediately since such autoconf macros would still
> $gcc_cv_ld. As far as I can see, all those linker checks could
> massively benefit from an overhaul to use gcc_LD_CHECK_FEATURE
> etc.macros, but that's not something I want to attack. It's especially
> messy that there are two sets of version variables for in-tree and
> external linkers. Probably fodder for the build maintainers.
>
> Anyway, here's what I've got. Tested by configuring with
>
> * no --with-ld arg (i.e. /usr/ccs/bin/ld)
>
> * --with-ld=/path/to/gld-2.21 --with-gnu-ld
>
> * --with-plugin-ld=/path/to/gld-2.21
>
> * --with-ld=/path/to/gld-2.21 --with-gnu-ld --with-plugin-ld=/usr/ccs/bin/ld
>
> and checking HAVE_LTO_PLUGIN in auto-host.h (0, 2, 2, 0).
>
> I haven't found if there are provisions for in-tree gold, though, and
> still cannot test that.
I'm not quite sure I understand this statement. I built a combined tree
with gold enabled a while ago (must've been several months now).
I might be misunderstanding this.
> Ok for mainline?
I think I'll need to take another look after questions are answered.
> 2011-04-02 Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE>
>
> * configure.ac (gcc_cv_lto_plugin): Determine lto plugin support
> from plugin linker.
> * configure: Regenerate.
> --- a/gcc/configure.ac
> +++ b/gcc/configure.ac
> @@ -3192,14 +3192,40 @@ fi
> AC_MSG_CHECKING(linker plugin support)
> gcc_cv_lto_plugin=0
> if test -f liblto_plugin.la; then
> + save_ld_ver="$ld_ver"
> + save_ld_vers_major="$ld_vers_major"
> + save_ld_vers_minor="$ld_vers_minor"
> + save_ld_is_gold="$ld_is_gold"
> +
> + ld_is_gold=no
> +
> if test $in_tree_ld = yes -a x"$ORIGINAL_PLUGIN_LD_FOR_TARGET" = x"$gcc_cv_ld"; then
> - if test "$gcc_cv_gld_major_version" -eq 2 -a "$gcc_cv_gld_minor_version" -ge 21 -o "$gcc_cv_gld_major_version" -gt 2; then
> - gcc_cv_lto_plugin=2
> - elif test "$ld_is_gold" = yes -a "$gcc_cv_gld_major_version" -eq 2 -a "$gcc_cv_gld_minor_version" -eq 20; then
> - gcc_cv_lto_plugin=1
> -
> + ld_ver="GNU ld"
> + # FIXME: ld_is_gold?
What about this FIXME? Did you test gold? Is it not relevant here?
Can the FIXME go?
> + ld_vers_major="$gcc_cv_gld_major_version"
> + ld_vers_minor="$gcc_cv_gld_minor_version"
> + else
> + # Determine plugin linker version.
> + # FIXME: Partial duplicate from above, generalize.
> +changequote(,)dnl
> + ld_ver=`$ORIGINAL_PLUGIN_LD_FOR_TARGET --version 2>/dev/null | sed 1q`
> + if echo "$ld_ver" | grep GNU > /dev/null; then
> + if echo "$ld_ver" | grep "GNU gold" > /dev/null; then
> + ld_is_gold=yes
> + ld_vers=`echo $ld_ver | sed -n \
> + -e 's,^[^)]*[ ]\([0-9][0-9]*\.[0-9][0-9]*[^)]*\)) .*$,\1,p'`
> + else
> + ld_vers=`echo $ld_ver | sed -n \
> + -e 's,^.*[ ]\([0-9][0-9]*\.[0-9][0-9]*.*\)$,\1,p'`
> + fi
> + ld_vers_major=`expr "$ld_vers" : '\([0-9]*\)'`
> + ld_vers_minor=`expr "$ld_vers" : '[0-9]*\.\([0-9]*\)'`
Can you try the expr statements quickly on Tru64? If not, I can do it
for you ('info Autoconf --index expr' is long and tells of many woes).
> fi
> - elif test x"$ORIGINAL_PLUGIN_LD_FOR_TARGET" = x"$gcc_cv_ld" && echo "$ld_ver" | grep GNU > /dev/null; then
> +changequote([,])dnl
> + fi
> +
> + # Determine plugin support.
> + if echo "$ld_ver" | grep GNU > /dev/null; then
> # Require GNU ld or gold 2.21+ for plugin support by default.
> if test "$ld_vers_major" -eq 2 -a "$ld_vers_minor" -ge 21; then
> gcc_cv_lto_plugin=2
> @@ -3207,11 +3233,12 @@ if test -f liblto_plugin.la; then
> elif test "$ld_is_gold" = yes -a "$ld_vers_major" -eq 2 -a "$ld_vers_minor" -eq 20; then
> gcc_cv_lto_plugin=1
> fi
> - elif test x"$ORIGINAL_PLUGIN_LD_FOR_TARGET" != x"$gcc_cv_ld"; then
> - # Allow -fuse-linker-plugin if plugin linker differs from
> - # default/specified linker.
> - gcc_cv_lto_plugin=1
> fi
> +
> + ld_ver="$save_ld_ver"
> + ld_vers_major="$save_ld_vers_major"
> + ld_vers_minor="$save_ld_vers_minor"
> + ld_is_gold="$save_ld_is_gold"
> fi
> AC_DEFINE_UNQUOTED(HAVE_LTO_PLUGIN, $gcc_cv_lto_plugin,
> [Define to the level of your linker's plugin support.])
Thanks, and sorry for the delay,
Ralf