svn commit: r501705 - in head/lang/gcc10-devel: . files
Gerald Pfeifer
gerald at FreeBSD.org
Wed May 15 10:02:39 UTC 2019
Author: gerald
Date: Wed May 15 10:02:37 2019
New Revision: 501705
URL: https://svnweb.freebsd.org/changeset/ports/501705
Log:
Update to the 20190512 snapshot of GCC 10.0.0. This brings a new binary
bin/lto-dump which may be helpful if you employ link-time optimization (LTO).
Forward port r499061 | gerald | 2019-04-15 from lang/gcc8 and gcc8-devel [1]:
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 [1]
Submitted by: tijl [1]
Added:
head/lang/gcc10-devel/files/patch-gfortran-libgcc
- copied unchanged from r500946, head/lang/gcc8/files/patch-gfortran-libgcc
Modified:
head/lang/gcc10-devel/Makefile
head/lang/gcc10-devel/distinfo
head/lang/gcc10-devel/pkg-plist
Modified: head/lang/gcc10-devel/Makefile
==============================================================================
--- head/lang/gcc10-devel/Makefile Wed May 15 09:56:42 2019 (r501704)
+++ head/lang/gcc10-devel/Makefile Wed May 15 10:02:37 2019 (r501705)
@@ -2,7 +2,7 @@
# $FreeBSD$
PORTNAME= gcc
-PORTVERSION= 10.0.0.s20190505
+PORTVERSION= 10.0.0.s20190512
CATEGORIES= lang
MASTER_SITES= GCC/snapshots/${DIST_VERSION}
PKGNAMESUFFIX= ${SUFFIX}-devel
Modified: head/lang/gcc10-devel/distinfo
==============================================================================
--- head/lang/gcc10-devel/distinfo Wed May 15 09:56:42 2019 (r501704)
+++ head/lang/gcc10-devel/distinfo Wed May 15 10:02:37 2019 (r501705)
@@ -1,3 +1,3 @@
-TIMESTAMP = 1557174273
-SHA256 (gcc-10-20190505.tar.xz) = 5ef4500a9e440fd9469dabd0a7d2ece133932c199573a70eae38af09b0940a3e
-SIZE (gcc-10-20190505.tar.xz) = 68789736
+TIMESTAMP = 1557768236
+SHA256 (gcc-10-20190512.tar.xz) = c24dd4e26a4e3c0cc57a32041afbe592faea6a7145d8cf0124a5bfba65d1798b
+SIZE (gcc-10-20190512.tar.xz) = 68819180
Copied: head/lang/gcc10-devel/files/patch-gfortran-libgcc (from r500946, head/lang/gcc8/files/patch-gfortran-libgcc)
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ head/lang/gcc10-devel/files/patch-gfortran-libgcc Wed May 15 10:02:37 2019 (r501705, copy of r500946, head/lang/gcc8/files/patch-gfortran-libgcc)
@@ -0,0 +1,70 @@
+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
Modified: head/lang/gcc10-devel/pkg-plist
==============================================================================
--- head/lang/gcc10-devel/pkg-plist Wed May 15 09:56:42 2019 (r501704)
+++ head/lang/gcc10-devel/pkg-plist Wed May 15 10:02:37 2019 (r501705)
@@ -17,6 +17,7 @@ bin/gcov%%SUFFIX%%
bin/gcov-dump%%SUFFIX%%
bin/gcov-tool%%SUFFIX%%
bin/gfortran%%SUFFIX%%
+bin/lto-dump%%SUFFIX%%
man/man1/cpp%%SUFFIX%%.1.gz
man/man1/g++%%SUFFIX%%.1.gz
man/man1/gcc%%SUFFIX%%.1.gz
More information about the svn-ports-all
mailing list