diff options
| author | Lexi Winter <ivy@FreeBSD.org> | 2025-10-05 09:19:31 +0100 |
|---|---|---|
| committer | Lexi Winter <ivy@FreeBSD.org> | 2025-10-05 09:19:31 +0100 |
| commit | f85f2b2d6e5b7ed869376eb4b180c3a74a5c5da9 (patch) | |
| tree | ad799ccacfb459b809b02b9c115ed4befb93b4c1 /lang/gcc11/files/patch-gfortran-libgcc | |
| parent | 0b1510fe1f98f82da6f3481cb6c58957022d9211 (diff) | |
| parent | b057c68280a2f2a7b3d1fbac36f7b034e1fdf593 (diff) | |
Merge remote-tracking branch 'freebsd/main' into lf/main
Diffstat (limited to 'lang/gcc11/files/patch-gfortran-libgcc')
| -rw-r--r-- | lang/gcc11/files/patch-gfortran-libgcc | 70 |
1 files changed, 0 insertions, 70 deletions
diff --git a/lang/gcc11/files/patch-gfortran-libgcc b/lang/gcc11/files/patch-gfortran-libgcc deleted file mode 100644 index 89c6cb902c42..000000000000 --- a/lang/gcc11/files/patch-gfortran-libgcc +++ /dev/null @@ -1,70 +0,0 @@ -GCC has two runtime libraries: The static library libgcc.a (-lgcc) and -the shared library libgcc_s.so (-lgcc_s). Both implement many of the -same functions but they also each have their unique functions. When -gcc links programs and libraries there are three possibilities: - -1. gcc -static-libgcc or gcc -static: -lgcc - => Just use libgcc.a. - -2. gcc -shared-libgcc: -lgcc_s -lgcc - => Link with libgcc_s first, so libgcc.a is only used for its unique - functions. - -3. gcc: -lgcc -Wl,--as-needed -lgcc_s -Wl,--no-as-needed - => Link with libgcc.a first so libgcc_s is only used for its unique - functions (_Unwind_* functions). - -Approach 3 is the default for gcc and it's also what clang and clang++ use; -approach 2 is the default for gfortran, g++ and probably other front ends. - -This patch makes 3 the default for gfortran. It significantly reduces -the use of libgcc_s. The _Unwind_* functions are also available in the -old base system libgcc_s which means this reduces the need for --rpath /usr/local/lib/gccN in ports that depend on libraries built with -gfortran. Consider a dependency tree like this: - - prog -> libA -> libgcc_s (old base system libgcc_s is fine) - -> libB -> libgcc_s (libB built with gfortran, needs new libgcc_s) - -Here prog needs to be linked with -rpath /usr/local/lib/gccN even if it's -a normal C program compiled with clang. Without -rpath it will fail to -start because it loads old libgcc_s first as a dependency of libA and then -it fails to load libB. With this patch libB works with old base system -libgcc_s or may not need libgcc_s at all, so prog does not need to be -linked with -rpath. - -Upstream is unlikely accept a patch like this because libgfortran calls -some _Unwind_* functions and so always needs libgcc_s. Also because -every Fortran program and library links to libgfortran it makes sense -that option 2 above is the default. On FreeBSD where clang and GCC -compiled code can be mixed and where multiple libgcc_s may be installed, -option 3 is just a lot easier to deal with. - -The bug that sparked this is PR 208120 (but note there's a lot of -misleading information in that bug. CMake is not actually doing -anything wrong.) - ---- UTC ---- gcc/fortran/gfortranspec.c.orig 2015-06-26 17:47:23 UTC -+++ gcc/fortran/gfortranspec.c -@@ -404,7 +404,7 @@ For more information about these matters - } - } - --#ifdef ENABLE_SHARED_LIBGCC -+#if 0 - if (library) - { - unsigned int i; - ---- libgfortran/Makefile.in.orig 2019-02-22 14:22:13.000000000 +0000 -+++ libgfortran/Makefile.in 2019-02-27 16:27:08.856408000 +0000 -@@ -625,7 +625,7 @@ - $(LTLDFLAGS) $(LIBQUADLIB) ../libbacktrace/libbacktrace.la \ - $(HWCAP_LDFLAGS) \ - -lm $(extra_ldflags_libgfortran) \ -- $(version_arg) -Wc,-shared-libgcc -+ $(version_arg) - - libgfortran_la_DEPENDENCIES = $(version_dep) libgfortran.spec $(LIBQUADLIB_DEP) - cafexeclib_LTLIBRARIES = libcaf_single.la |
