public inbox for gcc-cvs@sourceware.org
help / color / mirror / Atom feed
* [gcc r13-4952] Ada, Darwin: Do not link libgcc statically on Darwin 8 and 9 [PR108202].
@ 2023-01-02 10:53 Iain D Sandoe
  0 siblings, 0 replies; only message in thread
From: Iain D Sandoe @ 2023-01-02 10:53 UTC (permalink / raw)
  To: gcc-cvs

https://gcc.gnu.org/g:8385088039f58a1d403cbb0792105236d240de85

commit r13-4952-g8385088039f58a1d403cbb0792105236d240de85
Author: Iain Sandoe <iain@sandoe.co.uk>
Date:   Thu Dec 22 17:32:59 2022 +0000

    Ada,Darwin: Do not link libgcc statically on Darwin 8 and 9 [PR108202].
    
    Normally, GCC executables are built with -static-libstdc++ -static-libgcc
    on Darwin.  This is fine in most cases, because GCC executables typically
    do no use exceptions.   However gnat1 does use exceptions and also pulls
    in system libraries that are linked against the installed shared libgcc
    which contains the system unwinder.  This means that gnat1 effectively has
    two unwinder instances (which does not work reliably since the unwinders
    have global state).
    
    A recent change in the initialization of FDEs has made this a hard error
    now on Darwin versions (8 and 9) with libgcc installed in /usr/lib (gnat1
    now hangs when an exception is thrown).
    
    The solution is to link libgcc dynamically, picking up the installed
    system version.  To do this we strip -static-libgcc from the link flags.
    
            PR ada/108202
    
    gcc/ada/ChangeLog:
    
            * gcc-interface/Make-lang.in (GCC_LINKERFLAGS, GCC_LDFLAGS):
            Versions of ALL_LINKERFLAGS, LDFLAGS with -Werror and
            -static-libgcc filtered out for Darwin8 and 9 (-Werror is filtered
            out for other hosts).

Diff:
---
 gcc/ada/gcc-interface/Make-lang.in | 13 +++++++++++--
 1 file changed, 11 insertions(+), 2 deletions(-)

diff --git a/gcc/ada/gcc-interface/Make-lang.in b/gcc/ada/gcc-interface/Make-lang.in
index 2acd195017e..c81daae9c4a 100644
--- a/gcc/ada/gcc-interface/Make-lang.in
+++ b/gcc/ada/gcc-interface/Make-lang.in
@@ -260,11 +260,20 @@ else
   endif
 endif
 
+ifneq ($(filter darwin9% darwin8%,$(host_os)),)
+# gnat1 uses exceptions which is incompatible with statically-linked libgcc
+# on Darwin8 and 9, since gnat1 also pulls in libraries linked with the system
+# unwinder.
+GCC_LINKERFLAGS = $(filter-out -Werror -static-libgcc, $(ALL_LINKERFLAGS))
+GCC_LDFLAGS = $(filter-out -static-libgcc, $(LDFLAGS))
+else
 # Strip -Werror during linking for the LTO bootstrap
 GCC_LINKERFLAGS = $(filter-out -Werror, $(ALL_LINKERFLAGS))
+GCC_LDFLAGS = $(LDFLAGS)
+endif
 
-GCC_LINK=$(LINKER) $(GCC_LINKERFLAGS) $(LDFLAGS)
-GCC_LLINK=$(LLINKER) $(GCC_LINKERFLAGS) $(LDFLAGS)
+GCC_LINK=$(LINKER) $(GCC_LINKERFLAGS) $(GCC_LDFLAGS)
+GCC_LLINK=$(LLINKER) $(GCC_LINKERFLAGS) $(GCC_LDFLAGS)
 
 # Lists of files for various purposes.

^ permalink raw reply	[flat|nested] only message in thread

only message in thread, other threads:[~2023-01-02 10:53 UTC | newest]

Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2023-01-02 10:53 [gcc r13-4952] Ada, Darwin: Do not link libgcc statically on Darwin 8 and 9 [PR108202] Iain D Sandoe

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).