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