Hi
this has become more important since it seems I can no longer link a working 
gnat1 without
it,
thanks
Iain

> On 4 Dec 2022, at 16:30, Iain Sandoe via Gcc-patches 
> <gcc-patches@gcc.gnu.org> wrote:
> 
> This fixes a long-standing problem on Darwin where we cannot independently set
> -static-libstdc++ because the flag gets stripped by the g++ driver.
> 
> This patch is essentially the same as the one used for the 'D' driver and has
> been in local use for some time.  It has also been tested on Linux.
> 
> OK for master?
> backports?
> thanks
> Iain
> 
> -- >8 --
> 
> The current implementation for swapping between the static and shared c++
> runtimes relies on the static linker supporting Bstatic/dynamic which is
> not available for every target (Darwin's linker does not support this).
> 
> Specs substitution (%s) is an alternative solution for this (which is what
> Darwin uses for Fortran, D and Objective-C).  However, specs substitution
> requires that the '-static-libstdc++' be preserved in the driver's command
> line.  The patch here arranges for this to be done when the configuration
> determines that linker support for Bstatic/dynamic is missing.
> 
> Signed-off-by: Iain Sandoe <i...@sandoe.co.uk>
> 
> gcc/cp/ChangeLog:
> 
>       * g++spec.cc (lang_specific_driver): Preserve -static-libstdc++ in
>       the driver command line for targets without -Bstatic/dynamic support
>       in their static linker.
> ---
> gcc/cp/g++spec.cc | 5 +++++
> 1 file changed, 5 insertions(+)
> 
> diff --git a/gcc/cp/g++spec.cc b/gcc/cp/g++spec.cc
> index 3d3b042dd56..f95d7965355 100644
> --- a/gcc/cp/g++spec.cc
> +++ b/gcc/cp/g++spec.cc
> @@ -234,7 +234,12 @@ lang_specific_driver (struct cl_decoded_option 
> **in_decoded_options,
> 
>       case OPT_static_libstdc__:
>         library = library >= 0 ? 2 : library;
> +#ifdef HAVE_LD_STATIC_DYNAMIC
> +       /* Remove -static-libstdc++ from the command only if target supports
> +          LD_STATIC_DYNAMIC.  When not supported, it is left in so that a
> +          back-end target can use outfile substitution.  */
>         args[i] |= SKIPOPT;
> +#endif
>         break;
> 
>       case OPT_stdlib_:
> -- 
> 2.37.1 (Apple Git-137.1)
> 

Reply via email to