[build, lto] Only accept -fuse-linker-plugin if linker supports -plugin (PR lto/46944)
Richard Guenther
rguenther@suse.de
Fri Mar 11 15:10:00 GMT 2011
On Fri, 11 Mar 2011, Rainer Orth wrote:
> Richard Guenther <rguenther@suse.de> writes:
>
> >> Only with -save-temps, otherwise it's some random file in /var/tmp. But
> >> even so the file is removed immediately.
> >
> > The following seems to work for me
> >
> > Index: gcc/testsuite/lib/target-supports.exp
> > ===================================================================
> > --- gcc/testsuite/lib/target-supports.exp (revision 170868)
> > +++ gcc/testsuite/lib/target-supports.exp (working copy)
> > @@ -1011,9 +1011,20 @@ proc check_effective_target_static_libgf
> > }
> >
> > proc check_linker_plugin_available { } {
> > - return [check_no_compiler_messages_nocache linker_plugin executable {
> > + set result [eval check_compile { linker_plugin object {
> > int main() { return 0; }
> > - } "-flto -fuse-linker-plugin"]
> > + } "-flto" } ]
> > + set lines [lindex $result 0]
> > + set output [lindex $result 1]
> > + set result [gcc_target_compile $output linker_plugin[pid] executable {
> > additional_flags=-flto additional_flags=-flto-partition=none
> > additional_flags=-save-temps } ]
> > + remote_file build delete $output
> > + remote_file build delete linker_plugin[pid]
> > + remote_file build delete linker_plugin[pid].s
> > + if [file exists linker_plugin[pid].res] {
> > + remote_file build delete linker_plugin[pid].res
> > + return 1
> > + }
> > + return 0
> > }
>
> Still doesn't work for me if compiling and linking manually with GNU ld
> 2.21 on Solaris 11/x86: no .res file is being created, although
> liblto_plugin.so is used.
"Work" as in, it detects if -fuse-linker-plugin is enabled by default.
Which it isn't for you?
> > Eventually scanning -v output for '-plugin' is better.
>
> This can only work if we make sure that -plugin is only passed to
> linkers that properly handle it.
Sure, but your version check patch part would ensure that, if not
overridden by -fuse-linker-plugin.
> >> And even if we decide to fix PR lto/46944 like this, we're still left
> >> with the problem of users invoking gcc with -fuse-linker-plugin and
> >> getting either strange errors or no effect instead of a clear
> >> diagnostic.
> >
> > Sure. But just disabling linker-plugin support for almost everyone
> > doesn't sound like a good solution either.
>
> Why do you say so? The tri-state solution I've outlined only disables it
> completely for non-GNU linkers. The plugin is used automatically for
> gld/gold 2.21+ and for gold 2.20* if -fuse-linker-plugin is given.
>
> I don't see the `almost everyone' here, on the contrary: the situation
> is identical to what we have now, with the exception that we don't try
> to pass -plugin to linkers we don't know they can somehow (even with
> restrictions) handle it. That's what PR lto/46944 is primarily about.
Can you update your patch with the tri-state solution?
Thanks,
Richard.
More information about the Gcc-patches
mailing list