Hi!
What gcc-ar does to find the plugin is significantly different from
what gcc driver does. This patch makes it behave tiny bit closer to
what the driver does, in particular if GCC_EXEC_PREFIX isn't defined
in the environment, it will use standard_libexec_prefix if
gcc-{ar,nm,ranlib} program lives in standard_bin_prefix directory
(in that case make_relative_prefix returns NULL), and if GCC_EXEC_PREFIX
is defined, it uses that as the directory where it expects to find
gcc-ar, rather than as the directory where to find the plugin.
Bootstrapped/regtested on x86_64-linux and i686-linux, ok for trunk/4.7?
2012-05-03 Jakub Jelinek <[email protected]>
PR plugins/53126
* gcc-ar.c (main): If GCC_EXEC_PREFIX is set in env,
append program name to it and pass that as first argument
to make_relative_prefix. Always pass standard_libexec_prefix
as last argument to make_relative_prefix. If
make_relative_prefix returns NULL, fall back to
standard_libexec_prefix.
--- gcc/gcc-ar.c 2011-10-31 20:44:14.000000000 +0100
+++ gcc/gcc-ar.c 2012-05-02 21:33:45.027022291 +0200
@@ -1,5 +1,5 @@
/* Wrapper for ar/ranlib/nm to pass the LTO plugin.
- Copyright (C) 2011 Free Software Foundation, Inc.
+ Copyright (C) 2011, 2012 Free Software Foundation, Inc.
Contributed by Andi Kleen.
This file is part of GCC.
@@ -52,11 +52,16 @@ main(int ac, char **av)
/* XXX implement more magic from gcc.c? */
nprefix = getenv ("GCC_EXEC_PREFIX");
if (!nprefix)
+ nprefix = av[0];
+ else
+ nprefix = concat (nprefix, "gcc-" PERSONALITY, NULL);
+
+ nprefix = make_relative_prefix (nprefix,
+ standard_bin_prefix,
+ standard_libexec_prefix);
+ if (nprefix == NULL)
nprefix = standard_libexec_prefix;
- nprefix = make_relative_prefix (av[0],
- standard_bin_prefix,
- nprefix);
plugin = concat (nprefix,
dir_separator,
DEFAULT_TARGET_MACHINE,
Jakub