diff --git a/.gcc-toolset-10-gcc.metadata b/.gcc-toolset-10-gcc.metadata index 24c852b..3efc3cb 100644 --- a/.gcc-toolset-10-gcc.metadata +++ b/.gcc-toolset-10-gcc.metadata @@ -1,5 +1,5 @@ 7f4348418dc3efefd357b32a2b5c8010211ab284 SOURCES/doxygen-1.8.0.src.tar.gz -3efb3a5c6f09afa1b8395983d633a7bc8da53900 SOURCES/gcc-10.2.1-20201102.tar.xz +08872639b847a6d34583cb46508d58f1abf0220d SOURCES/gcc-10.2.1-20201112.tar.xz c5a2b201bf05229647e73203c0bf2d9679d4d21f SOURCES/isl-0.16.1.tar.bz2 5ef03ca7aee134fe7dfecb6c9d048799f0810278 SOURCES/mpc-0.8.1.tar.gz 6ec33952e824e837fef0e829c93d39d6a507082f SOURCES/newlib-cygwin-50e2a63b04bdd018484605fbb954fd1bd5147fa0.tar.xz diff --git a/.gitignore b/.gitignore index 98ff5bf..8ebe4cb 100644 --- a/.gitignore +++ b/.gitignore @@ -1,5 +1,5 @@ SOURCES/doxygen-1.8.0.src.tar.gz -SOURCES/gcc-10.2.1-20201102.tar.xz +SOURCES/gcc-10.2.1-20201112.tar.xz SOURCES/isl-0.16.1.tar.bz2 SOURCES/mpc-0.8.1.tar.gz SOURCES/newlib-cygwin-50e2a63b04bdd018484605fbb954fd1bd5147fa0.tar.xz diff --git a/SOURCES/gcc10-pr97060.patch b/SOURCES/gcc10-pr97060.patch new file mode 100644 index 0000000..bd0d7be --- /dev/null +++ b/SOURCES/gcc10-pr97060.patch @@ -0,0 +1,34 @@ +2020-11-11 Jason Merrill + + PR debug/97060 + * dwarf2out.c (gen_subprogram_die): It's a declaration + if DECL_INITIAL isn't set. + + * gcc.dg/debug/dwarf2/pr97060.c: New test. + +--- gcc/dwarf2out.c ++++ gcc/dwarf2out.c +@@ -22859,6 +22859,7 @@ gen_subprogram_die (tree decl, dw_die_ref context_die) + available. + */ + int declaration = (current_function_decl != decl ++ || (!DECL_INITIAL (decl) && !origin) + || class_or_namespace_scope_p (context_die)); + + /* A declaration that has been previously dumped needs no +--- gcc/testsuite/gcc.dg/debug/dwarf2/pr97060.c ++++ gcc/testsuite/gcc.dg/debug/dwarf2/pr97060.c +@@ -0,0 +1,13 @@ ++/* PR debug/97060 */ ++/* { dg-do compile } */ ++/* { dg-options "-g -dA" } */ ++/* { dg-final { scan-assembler-times "DW_AT_declaration" 2 } } */ ++ ++extern int foo (unsigned int, unsigned int); ++ ++int ++bar (void) ++{ ++ foo (1, 2); ++ return 0; ++} diff --git a/SOURCES/gcc10-pr97524.patch b/SOURCES/gcc10-pr97524.patch new file mode 100644 index 0000000..7321899 --- /dev/null +++ b/SOURCES/gcc10-pr97524.patch @@ -0,0 +1,53 @@ +commit 6fade5a6044b7102758f4ca66c8715ebc12a6306 +Author: Martin Liska +Date: Thu Oct 22 14:07:29 2020 +0200 + + LTO: check that make command works + + gcc/ChangeLog: + + PR lto/97524 + * lto-wrapper.c (make_exists): New function. + (run_gcc): Use it to check that make is present and working + for parallel execution. + +--- gcc/lto-wrapper.c ++++ gcc/lto-wrapper.c +@@ -1321,6 +1321,26 @@ jobserver_active_p (void) + && is_valid_fd (wfd)); + } + ++/* Test that a make command is present and working, return true if so. */ ++ ++static bool ++make_exists (void) ++{ ++ const char *make = "make"; ++ char **make_argv = buildargv (getenv ("MAKE")); ++ if (make_argv) ++ make = make_argv[0]; ++ const char *make_args[] = {make, "--version", NULL}; ++ ++ int exit_status = 0; ++ int err = 0; ++ const char *errmsg ++ = pex_one (PEX_SEARCH, make_args[0], CONST_CAST (char **, make_args), ++ "make", NULL, NULL, &exit_status, &err); ++ freeargv (make_argv); ++ return errmsg == NULL && exit_status == 0 && err == 0; ++} ++ + /* Execute gcc. ARGC is the number of arguments. ARGV contains the arguments. */ + + static void +@@ -1541,6 +1561,10 @@ run_gcc (unsigned argc, char *argv[]) + jobserver = 1; + } + ++ /* We need make working for a parallel execution. */ ++ if (parallel && !make_exists ()) ++ parallel = 0; ++ + if (linker_output) + { + char *output_dir, *base, *name; diff --git a/SPECS/gcc.spec b/SPECS/gcc.spec index a32ada2..cc4abbd 100644 --- a/SPECS/gcc.spec +++ b/SPECS/gcc.spec @@ -2,13 +2,13 @@ %{?scl:%global __strip %%{_scl_root}/usr/bin/strip} %{?scl:%global __objdump %%{_scl_root}/usr/bin/objdump} %{?scl:%scl_package gcc} -%global DATE 20201102 -%global gitrev 736fd853f0e75ad3f91bdc7156f6b4475a1b60c1 +%global DATE 20201112 +%global gitrev 86495efb7a403b1ee3419fb3b3b1aaf26345ada5 %global gcc_version 10.2.1 %global gcc_major 10 # Note, gcc_release must be integer, if you want to add suffixes to # %%{release}, append them after %%{gcc_release} on Release: line. -%global gcc_release 7 +%global gcc_release 8 %global nvptx_tools_gitrev 5f6f343a302d620b0868edab376c00b15741e39e %global newlib_cygwin_gitrev 50e2a63b04bdd018484605fbb954fd1bd5147fa0 %global mpc_version 0.8.1 @@ -123,7 +123,7 @@ Summary: GCC version 10 Name: %{?scl_prefix}gcc Version: %{gcc_version} -Release: %{gcc_release}.1%{?dist} +Release: %{gcc_release}.2%{?dist} # libgcc, libgfortran, libgomp, libstdc++ and crtstuff have # GCC Runtime Exception. License: GPLv3+ and GPLv3+ with exceptions and GPLv2+ with exceptions and LGPLv2+ and BSD @@ -172,19 +172,14 @@ BuildRequires: glibc-static %if 0%{?scl:1} BuildRequires: %{?scl_prefix}binutils >= 2.31 # For testing -%if 0%{?rhel} >= 6 -# FIXME gcc-toolset-10-gdb isn't yet in the buildroot. -BuildRequires: gdb -%else BuildRequires: %{?scl_prefix}gdb >= 7.4.50 %endif -%endif BuildRequires: zlib-devel, gettext, dejagnu, bison, flex, sharutils BuildRequires: texinfo, texinfo-tex, /usr/bin/pod2man #BuildRequires: systemtap-sdt-devel >= 1.3 #BuildRequires: gmp-devel >= 4.1.2-8, mpfr-devel >= 2.2.1, libmpc-devel >= 0.8.1 #BuildRequires: python3-devel, /usr/bin/python -BuildRequires: gcc, gcc-c++ +BuildRequires: gcc, gcc-c++, make # For VTA guality testing BuildRequires: gdb # Make sure pthread.h doesn't contain __thread tokens @@ -235,9 +230,9 @@ Requires: glibc-devel >= 2.2.90-12 # Make sure glibc supports TFmode long double Requires: glibc >= 2.3.90-35 %endif -BuildRequires: gmp-devel >= 4.1.2-8 -BuildRequires: mpfr-devel >= 3.1.0 %if 0%{?rhel} >= 7 +BuildRequires: gmp-devel >= 4.3.2 +BuildRequires: mpfr-devel >= 3.1.0 BuildRequires: libmpc-devel >= 0.8.1 %endif %if %{build_libstdcxx_docs} @@ -250,6 +245,8 @@ BuildRequires: dblatex, texlive-collection-latex, docbook5-style-xsl %endif Requires: libgcc >= 4.1.2-43 Requires: libgomp >= 4.4.4-13 +# lto-wrapper invokes make +Requires: make %{?scl:Requires:%scl_runtime} AutoReq: true Provides: bundled(libiberty) @@ -310,6 +307,8 @@ Patch10: gcc10-rh1574936.patch Patch11: gcc10-d-shared-libphobos.patch Patch12: gcc10-pr94540.patch Patch13: gcc10-pr96383.patch +Patch14: gcc10-pr97060.patch +Patch15: gcc10-pr97524.patch Patch1000: gcc10-libstdc++-compat.patch Patch1002: gcc10-isl-dl2.patch @@ -518,9 +517,9 @@ GNU Transactional Memory library. %package plugin-devel Summary: Support for compiling GCC plugins Requires: %{?scl_prefix}gcc%{!?scl:10} = %{version}-%{release} -Requires: gmp-devel >= 4.1.2-8 -Requires: mpfr-devel >= 3.1.0 %if 0%{?rhel} >= 7 +Requires: gmp-devel >= 4.3.2 +Requires: mpfr-devel >= 3.1.0 Requires: libmpc-devel >= 0.8.1 %endif @@ -559,8 +558,12 @@ which is used for -fsanitize=address instrumented programs. %package -n %{?scl_prefix}libasan-devel Summary: The Address Sanitizer static library +%if 0%{?rhel} > 8 Requires: libasan%{_isa} >= 8.3.1 -Obsoletes: libasan5 +%else +Requires: libasan6%{_isa} >= 10.2.1 +%endif +Obsoletes: libasan5 <= 8.3.1 %description -n %{?scl_prefix}libasan-devel This package contains Address Sanitizer static runtime library. @@ -594,7 +597,7 @@ which is used for -fsanitize=undefined instrumented programs. Summary: The Undefined Behavior Sanitizer static library %if 0%{?rhel} > 7 Requires: libubsan%{_isa} >= 8.3.1 -Obsoletes: libubsan1 +Obsoletes: libubsan1 <= 8.3.1 %else Requires: libubsan1%{_isa} >= 8.3.1 %endif @@ -655,6 +658,8 @@ to NVidia PTX capable devices if available. %patch11 -p0 -b .d-shared-libphobos~ %patch12 -p0 -b .pr94540~ %patch13 -p0 -b .pr96383~ +%patch14 -p0 -b .pr97060~ +%patch15 -p0 -b .pr97524~ %patch1000 -p0 -b .libstdc++-compat~ %if %{build_isl} @@ -1287,6 +1292,23 @@ GROUP ( /lib/libgcc_s.so.1 libgcc.a )' > $FULLPATH/32/libgcc_s.so mv -f %{buildroot}%{_prefix}/%{_lib}/libgomp.spec $FULLPATH/ cp -a %{gcc_target_platform}/libstdc++-v3/src/.libs/libstdc++_nonshared%{nonsharedver}.a \ $FULLLPATH/libstdc++_nonshared.a +cp -a %{gcc_target_platform}/libgfortran/.libs/libgfortran_nonshared80.a \ + $FULLLPATH/libgfortran_nonshared.a + +%if 0%{?rhel} <= 7 +# Build libgomp_nonshared.a with the system RHEL 7 compiler. Use -O2 to +# get tailcalls. +gcc %{SOURCE4} -O2 -c +ar rcs libgomp_nonshared.a libgomp_nonshared.o +cp -a libgomp_nonshared.a $FULLLPATH +%ifarch x86_64 +# Only need this for -m32 on x86_64. devtoolset-N-gcc isn't multilib, +# and we don't have a devtoolset-N-libgomp-devel subpackage. +gcc %{SOURCE4} -O2 -c -m32 -o libgomp_nonshared32.o +ar rcs libgomp_nonshared32.a libgomp_nonshared32.o +cp -a libgomp_nonshared32.a $FULLLPATH/32/libgomp_nonshared.a +%endif +%endif rm -f $FULLEPATH/libgccjit.so mkdir -p %{buildroot}%{_prefix}/%{_lib}/ @@ -1301,9 +1323,18 @@ gzip -9 %{buildroot}/%{_infodir}/libgccjit.info pushd $FULLPATH +%if 0%{?rhel} <= 7 +echo '/* GNU ld script + Use the shared library, but some functions are only in + the static library, so try that secondarily. */ +%{oformat} +INPUT ( %{?scl:%{_root_prefix}}%{!?scl:%{_prefix}}/%{_lib}/libgomp.so.1 -lgomp_nonshared )' > libgomp.so +%else echo '/* GNU ld script */ %{oformat} INPUT ( %{?scl:%{_root_prefix}}%{!?scl:%{_prefix}}/%{_lib}/libgomp.so.1 )' > libgomp.so +%endif + %if 0%{?rhel} <= 8 echo '/* GNU ld script Use the shared library, but some functions are only in @@ -1319,7 +1350,7 @@ echo '/* GNU ld script Use the shared library, but some functions are only in the static library, so try that secondarily. */ %{oformat} -INPUT ( %{?scl:%{_root_prefix}}%{!?scl:%{_prefix}}/%{_lib}/libgfortran.so.5 )' > libgfortran.so +INPUT ( %{?scl:%{_root_prefix}}%{!?scl:%{_prefix}}/%{_lib}/libgfortran.so.5 -lgfortran_nonshared )' > libgfortran.so %if %{build_libquadmath} rm -f libquadmath.so echo '/* GNU ld script */ @@ -1419,7 +1450,7 @@ echo '/* GNU ld script Use the shared library, but some functions are only in the static library, so try that secondarily. */ %{oformat2} -INPUT ( %{?scl:%{_root_prefix}}%{!?scl:%{_prefix}}/lib64/libgfortran.so.5 )' > 64/libgfortran.so +INPUT ( %{?scl:%{_root_prefix}}%{!?scl:%{_prefix}}/lib64/libgfortran.so.5 -lgfortran_nonshared )' > 64/libgfortran.so echo '/* GNU ld script */ %{oformat2} INPUT ( %{?scl:%{_root_prefix}}%{!?scl:%{_prefix}}/lib64/libgomp.so.1 )' > 64/libgomp.so @@ -1519,10 +1550,20 @@ echo '/* GNU ld script Use the shared library, but some functions are only in the static library, so try that secondarily. */ %{oformat2} -INPUT ( %{?scl:%{_root_prefix}}%{!?scl:%{_prefix}}/lib/libgfortran.so.5 )' > 32/libgfortran.so +INPUT ( %{?scl:%{_root_prefix}}%{!?scl:%{_prefix}}/lib/libgfortran.so.5 -lgfortran_nonshared )' > 32/libgfortran.so + +%if 0%{?rhel} <= 7 +echo '/* GNU ld script + Use the shared library, but some functions are only in + the static library, so try that secondarily. */ +%{oformat2} +INPUT ( %{?scl:%{_root_prefix}}%{!?scl:%{_prefix}}/lib/libgomp.so.1 -lgomp_nonshared )' > 32/libgomp.so +%else echo '/* GNU ld script */ %{oformat2} INPUT ( %{?scl:%{_root_prefix}}%{!?scl:%{_prefix}}/lib/libgomp.so.1 )' > 32/libgomp.so +%endif + echo '/* GNU ld script */ %{oformat2} INPUT ( %{_prefix}/lib/libgccjit.so.0 )' > 32/libgccjit.so @@ -1580,6 +1621,11 @@ ln -sf lib64/libstdc++fs.a libstdc++fs.a ln -sf ../lib32/libstdc++_nonshared.a 32/libstdc++_nonshared.a ln -sf lib64/libstdc++_nonshared.a libstdc++_nonshared.a %endif +%if 0%{?rhel} <= 8 +ln -sf ../lib32/libgfortran_nonshared.a 32/libgfortran_nonshared.a +ln -sf lib64/libgfortran_nonshared.a libgfortran_nonshared.a +ln -sf lib64/libgomp_nonshared.a libgomp_nonshared.a +%endif %if %{build_libquadmath} ln -sf ../lib32/libquadmath.a 32/libquadmath.a ln -sf lib64/libquadmath.a libquadmath.a @@ -1609,6 +1655,9 @@ ln -sf ../../../%{multilib_32_arch}-%{_vendor}-%{_target_os}%{?_gnu}/%{gcc_major %if 0%{?rhel} <= 8 ln -sf ../../../%{multilib_32_arch}-%{_vendor}-%{_target_os}%{?_gnu}/%{gcc_major}/libstdc++_nonshared.a 32/libstdc++_nonshared.a %endif +%if 0%{?rhel} <= 8 +ln -sf ../../../%{multilib_32_arch}-%{_vendor}-%{_target_os}%{?_gnu}/%{gcc_major}/libgfortran_nonshared.a 32/libgfortran_nonshared.a +%endif %if %{build_libquadmath} ln -sf ../../../%{multilib_32_arch}-%{_vendor}-%{_target_os}%{?_gnu}/%{gcc_major}/libquadmath.a 32/libquadmath.a %endif @@ -1645,6 +1694,8 @@ for f in `find $adirs -maxdepth 1 -a \ -o -name liblsan.a \ -o -name libcc1.a \ -o -name libstdc++_nonshared.a \ + -o -name libgomp_nonshared.a \ + -o -name libgfortran_nonshared.a \ -o -name libsupc++.a \ -o -name libstdc++.a -o -name libcaf_single.a \ -o -name libstdc++fs.a \) -a -type f`; do @@ -1793,7 +1844,6 @@ chmod 755 %{buildroot}%{_prefix}/bin/%{multilib_32_arch}-%{_vendor}-%{_target_os %endif # Help plugins find out nvra. -# ??? Fedora uses _arch echo gcc-%{version}-%{release}.%{arch} > $FULLPATH/rpmver # Add symlink to lto plugin in the binutils plugin directory. @@ -2165,6 +2215,11 @@ fi %{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_major}/libgomp.spec %{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_major}/libgomp.a %{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_major}/libgomp.so +%if 0%{?rhel} <= 7 +%ifnarch ppc +%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_major}/libgomp_nonshared.a +%endif +%endif %if %{build_libitm} %{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_major}/libitm.spec %endif @@ -2221,6 +2276,20 @@ fi %{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_major}/32/libgcc_s.so %{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_major}/32/libgomp.a %{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_major}/32/libgomp.so + +# Add libgomp_nonshared.a +%if 0%{?rhel} <= 7 +%ifarch x86_64 +# Need it for -m32. +%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_major}/32/libgomp_nonshared.a +%endif +%ifarch ppc64 +# We've created a symlink to lib64/libgomp_nonshared.a, so add it. +%dir %{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_major}/lib64 +%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_major}/lib64/libgomp_nonshared.a +%endif +%endif + %{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_major}/32/libgccjit.so %if %{build_libquadmath} %{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_major}/32/libquadmath.a @@ -2386,6 +2455,7 @@ fi %{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_major}/libcaf_single.a %{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_major}/libgfortran.a %{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_major}/libgfortran.so +%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_major}/libgfortran_nonshared.a %ifarch sparcv9 ppc %dir %{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_major}/64 %{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_major}/64/libcaf_single.a @@ -2398,8 +2468,13 @@ fi %{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_major}/32/libcaf_single.a %{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_major}/32/libgfortran.a %{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_major}/32/libgfortran.so +%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_major}/32/libgfortran_nonshared.a %{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_major}/32/finclude %endif +%ifarch ppc64 +%dir %{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_major}/lib64 +%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_major}/lib64/libgfortran_nonshared.a +%endif %doc rpm.doc/gfortran/* %if %{build_libquadmath} @@ -2422,6 +2497,11 @@ fi %{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_major}/libquadmath.a %{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_major}/libquadmath.so %endif +%dir %{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_major} +%ifarch %{ix86} +# Need it for -m32. +%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_major}/libgfortran_nonshared.a +%endif %doc rpm.doc/libquadmath/ChangeLog* %endif @@ -2601,6 +2681,18 @@ fi %endif %changelog +* Tue Mar 16 2021 Marek Polacek 10.2.1-8.2 +- actually use libgfortran_nonshared.a (#1929375) +- have libasan-devel require libasan6 (#1939638) + +* Mon Nov 16 2020 Marek Polacek 10.2.1-8.1 +- apply fix for -flto=auto with missing make (#1896093, PR lto/97524) + +* Thu Nov 12 2020 Marek Polacek 10.2.1-8 +- update from Fedora gcc 10.2.1-8 (#1878887) +- emit DW_AT_declaration on declaration-only DIEs (#1897272, PR debug/97060) +- add BuildRequires: make and Requires: make, the latter for -flto reasons + * Tue Nov 03 2020 Marek Polacek 10.2.1-7.1 - adjust some libstdc++_nonshared.a symbol