~ruther/guix-local

42f7c1bb176253ebea47c84077303bb14f62fbed — Ludovic Courtès 1 year, 1 day ago ca8e8e2
gnu: gcc: Fix compilation of libstdc++ for GCC 7 to 13.

With the introduction of GCC 14 as the default compiler, compilation of
libstdc++ of all previous versions would fail due to a different
signature for ‘__cxa_call_terminate’ (a builtin in GCC 14).  This fixes it.

* gnu/packages/patches/gcc-libstdc++-newer-gcc.patch: New file.
* gnu/local.mk (dist_patch_DATA): Add it.
* gnu/packages/gcc.scm (gcc-7, gcc-8, gcc-9, gcc-10)
(gcc-11, gcc-12, gcc-13): Use it.

Change-Id: I84dc26e46d56259d7d610f19b0521fa9c5499d5e
3 files changed, 48 insertions(+), 8 deletions(-)

M gnu/local.mk
M gnu/packages/gcc.scm
A gnu/packages/patches/gcc-libstdc++-newer-gcc.patch
M gnu/local.mk => gnu/local.mk +1 -0
@@ 1370,6 1370,7 @@ dist_patch_DATA =						\
  %D%/packages/patches/gcc-cross-environment-variables.patch	\
  %D%/packages/patches/gcc-cross-gxx-include-dir.patch          \
  %D%/packages/patches/gcc-fix-texi2pod.patch			\
  %D%/packages/patches/gcc-libstdc++-newer-gcc.patch		\
  %D%/packages/patches/gcc-4.8-libsanitizer-fix.patch		\
  %D%/packages/patches/gcc-4.9-inline.patch		\
  %D%/packages/patches/gcc-4.9-libsanitizer-fix.patch		\

M gnu/packages/gcc.scm => gnu/packages/gcc.scm +15 -8
@@ 1,5 1,5 @@
;;; GNU Guix --- Functional package management for GNU
;;; Copyright © 2012-2024 Ludovic Courtès <ludo@gnu.org>
;;; Copyright © 2012-2025 Ludovic Courtès <ludo@gnu.org>
;;; Copyright © 2014, 2015, 2018 Mark H Weaver <mhw@netris.org>
;;; Copyright © 2014, 2015, 2016, 2017, 2019, 2021 Ricardo Wurmus <rekado@elephly.net>
;;; Copyright © 2015, 2023 Andreas Enge <andreas@enge.fr>


@@ 695,7 695,8 @@ Go.  It also includes runtime support libraries for these languages.")
              (patches (search-patches "gcc-strmov-store-file-names.patch"
                                       "gcc-7-libsanitizer-mode-size.patch"
                                       "gcc-7-libsanitizer-fsconfig-command.patch"
                                       "gcc-5.0-libvtv-runpath.patch"))))
                                       "gcc-5.0-libvtv-runpath.patch"
                                       "gcc-libstdc++-newer-gcc.patch"))))
    (description
     "GCC is the GNU Compiler Collection.  It provides compiler front-ends
for several languages, including C, C++, Objective-C, Fortran, Ada, and Go.


@@ 722,7 723,8 @@ It also includes runtime support libraries for these languages.")
              (patches (search-patches "gcc-8-strmov-store-file-names.patch"
                                       "gcc-7-libsanitizer-fsconfig-command.patch"
                                       "gcc-5.0-libvtv-runpath.patch"
                                       "gcc-8-sort-libtool-find-output.patch"))
                                       "gcc-8-sort-libtool-find-output.patch"
                                       "gcc-libstdc++-newer-gcc.patch"))
              (modules '((guix build utils)))
              (snippet gcc-canadian-cross-objdump-snippet)))))



@@ 742,7 744,8 @@ It also includes runtime support libraries for these languages.")
                                     "gcc-13.2.0-libstdc++-info-install-fix.patch"
                                     "gcc-9-strmov-store-file-names.patch"
                                     "gcc-9-asan-fix-limits-include.patch"
                                     "gcc-5.0-libvtv-runpath.patch"))
                                     "gcc-5.0-libvtv-runpath.patch"
                                     "gcc-libstdc++-newer-gcc.patch"))
            (modules '((guix build utils)))
            (snippet gcc-canadian-cross-objdump-snippet)))))



@@ 759,7 762,8 @@ It also includes runtime support libraries for these languages.")
              "1h87lcfaga0ydsf4pkhwlnjr8mky5ix8npbv6iy3jvzlzm1ra415"))
            (patches (search-patches "gcc-9-strmov-store-file-names.patch"
                                     "gcc-5.0-libvtv-runpath.patch"
                                     "gcc-10-libsanitizer-no-crypt.patch"))
                                     "gcc-10-libsanitizer-no-crypt.patch"
                                     "gcc-libstdc++-newer-gcc.patch"))
            (modules '((guix build utils)))
            (snippet gcc-canadian-cross-objdump-snippet)))
   (properties


@@ 785,7 789,8 @@ It also includes runtime support libraries for these languages.")
            (patches (search-patches "gcc-9-strmov-store-file-names.patch"
                                     "gcc-5.0-libvtv-runpath.patch"
                                     "gcc-10-libsanitizer-no-crypt.patch"
                                     "gcc-11-libstdc++-hurd-libpthread.patch"))
                                     "gcc-11-libstdc++-hurd-libpthread.patch"
                                     "gcc-libstdc++-newer-gcc.patch"))
            (modules '((guix build utils)))
            (snippet gcc-canadian-cross-objdump-snippet)))
   (properties


@@ 811,7 816,8 @@ It also includes runtime support libraries for these languages.")
              (patches (search-patches "gcc-12-strmov-store-file-names.patch"
                                       "gcc-5.0-libvtv-runpath.patch"
                                       "gcc-12-libsanitizer-no-crypt.patch"
                                       "gcc-11-libstdc++-hurd-libpthread.patch"))
                                       "gcc-11-libstdc++-hurd-libpthread.patch"
                                       "gcc-libstdc++-newer-gcc.patch"))
              (modules '((guix build utils)))
              (snippet gcc-canadian-cross-objdump-snippet)))
   (properties


@@ 836,7 842,8 @@ It also includes runtime support libraries for these languages.")
                "10y0l1hx1haz4cj4d4g9f2ci5h7z9555i52f90zs2hwm3iifji88"))
              (patches (search-patches "gcc-12-strmov-store-file-names.patch"
                                       "gcc-5.0-libvtv-runpath.patch"
                                       "gcc-13-libsanitizer-no-crypt.patch"))
                                       "gcc-13-libsanitizer-no-crypt.patch"
                                       "gcc-libstdc++-newer-gcc.patch"))
              (modules '((guix build utils)))
              (snippet gcc-canadian-cross-objdump-snippet)))
    (arguments

A gnu/packages/patches/gcc-libstdc++-newer-gcc.patch => gnu/packages/patches/gcc-libstdc++-newer-gcc.patch +32 -0
@@ 0,0 1,32 @@
Building this file with GCC 14 leads to this error:

  ../../libstdc++-v3/libsupc++/eh_call.cc:39:1: warning: new declaration ‘void __cxa_call_terminate(_Unwind_Exception*)’ ambiguates built-in declaration ‘void __cxa_call_terminate(void*)’ [-Wbuiltin-declaration-mismatch]
     39 | __cxa_call_terminate(_Unwind_Exception* ue_header) throw ()
	| ^~~~~~~~~~~~~~~~~~~~
  ../../libstdc++-v3/libsupc++/eh_call.cc: In function ‘void __cxa_call_terminate(_Unwind_Exception*)’:
  ../../libstdc++-v3/libsupc++/eh_call.cc:39:1: internal compiler error: in gimple_build_eh_must_not_throw, at gimple.cc:730
  0x7fbc43241bd6 __libc_start_call_main
	  ???:0
  0x7fbc43241c94 __libc_start_main_alias_1
	  ???:0
  Please submit a full bug report, with preprocessed source.
  Please include the complete backtrace with any bug report.
  See <https://gcc.gnu.org/bugs/> for instructions.

Work around it.

diff --git a/libstdc++-v3/libsupc++/eh_call.cc b/libstdc++-v3/libsupc++/eh_call.cc
index bf864f692..4f7ade71e 100644
--- a/libstdc++-v3/libsupc++/eh_call.cc
+++ b/libstdc++-v3/libsupc++/eh_call.cc
@@ -36,8 +36,9 @@ using namespace __cxxabiv1;
 // terminate.
 
 extern "C" void
-__cxa_call_terminate(_Unwind_Exception* ue_header) throw ()
+__cxa_call_terminate(void *arg) throw ()
 {
+  _Unwind_Exception *ue_header = (_Unwind_Exception *) arg;
 
   if (ue_header)
     {