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>