svn commit: r499061 - in head/lang/gcc8: . files
Tijl Coosemans
tijl at FreeBSD.org
Tue Apr 16 10:47:27 UTC 2019
On Mon, 15 Apr 2019 23:08:04 +0000 (UTC) Gerald Pfeifer
<gerald at FreeBSD.org> wrote:
> Author: gerald
> Date: Mon Apr 15 23:08:04 2019
> New Revision: 499061
> URL: https://svnweb.freebsd.org/changeset/ports/499061
>
> Log:
> 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.
>
> PR: 208120
> Submitted by: tijl
> MFH: 2019Q2 (important user visible improvement)
>
> Added:
> head/lang/gcc8/files/patch-gfortran-libgcc (contents, props changed)
> Modified:
> head/lang/gcc8/Makefile
Thank you very much! Ports with USES=fortran could probably use a
PORTREVISION bump so they can take advantage of the change.
More information about the svn-ports-all
mailing list