Skip site navigation (1)Skip section navigation (2)
Date:      Tue, 16 Apr 2019 12:46:13 +0200
From:      =?UTF-8?B?VMSzbA==?= Coosemans <tijl@FreeBSD.org>
To:        Gerald Pfeifer <gerald@FreeBSD.org>
Cc:        ports-committers@freebsd.org, svn-ports-all@freebsd.org, svn-ports-head@freebsd.org
Subject:   Re: svn commit: r499061 - in head/lang/gcc8: . files
Message-ID:  <20190416124613.4aeaacc1@kalimero.tijl.coosemans.org>
In-Reply-To: <201904152308.x3FN84eO052473@repo.freebsd.org>
References:  <201904152308.x3FN84eO052473@repo.freebsd.org>

next in thread | previous in thread | raw e-mail | index | archive | help
On Mon, 15 Apr 2019 23:08:04 +0000 (UTC) Gerald Pfeifer
<gerald@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.



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20190416124613.4aeaacc1>