Date: Wed, 16 Apr 2025 13:21:35 GMT From: Lorenzo Salvadore <salvadore@FreeBSD.org> To: ports-committers@FreeBSD.org, dev-commits-ports-all@FreeBSD.org, dev-commits-ports-main@FreeBSD.org Subject: git: 56b828239c1a - main - lang/gcc12-devel: Fix SIGBUS depending on CPUTYPE Message-ID: <202504161321.53GDLZkO042225@gitrepo.freebsd.org>
index | next in thread | raw e-mail
The branch main has been updated by salvadore: URL: https://cgit.FreeBSD.org/ports/commit/?id=56b828239c1ab655fbc779e1c353874a8d116fc4 commit 56b828239c1ab655fbc779e1c353874a8d116fc4 Author: Oleg Sidorkin <osidorkin@gmail.com> AuthorDate: 2025-04-12 09:26:32 +0000 Commit: Lorenzo Salvadore <salvadore@FreeBSD.org> CommitDate: 2025-04-16 13:20:36 +0000 lang/gcc12-devel: Fix SIGBUS depending on CPUTYPE Compiling GCC with some CPUTYPE values (e.g. broadwell) result in breaking some applications (e.g. math/octave, cad/freecad), sending a SIGBUS. The issue is due to GCC generating instructions that require variables to be aligned in memory on certain CPUs. Our libthr does not have the required alignment so these CPUs fail to execute these instructions. The patch disables the generation of such instructions. PR: 285711 Reported by: cracauer Tested by: cracauer, jbo --- lang/gcc12-devel/Makefile | 1 + lang/gcc12-devel/files/patch-libgcc_unwind.inc | 28 ++++++++++++++++++++++++++ 2 files changed, 29 insertions(+) diff --git a/lang/gcc12-devel/Makefile b/lang/gcc12-devel/Makefile index 4c603dfaa6d5..8191ac4f1376 100644 --- a/lang/gcc12-devel/Makefile +++ b/lang/gcc12-devel/Makefile @@ -1,5 +1,6 @@ PORTNAME= gcc PORTVERSION= 12.4.1.s20250410 +PORTREVISION= 1 CATEGORIES= lang MASTER_SITES= GCC/snapshots/${DIST_VERSION} PKGNAMESUFFIX= ${SUFFIX}-devel diff --git a/lang/gcc12-devel/files/patch-libgcc_unwind.inc b/lang/gcc12-devel/files/patch-libgcc_unwind.inc new file mode 100644 index 000000000000..42155a9ba48e --- /dev/null +++ b/lang/gcc12-devel/files/patch-libgcc_unwind.inc @@ -0,0 +1,28 @@ +GCC generates instructions that require variables to be aligned in memory on +certain CPUs. Our libthr does not have the required alignment so these CPUs fail +to execute these instructions. The instructions generation is driven by CPUTYPE. +Some CPUs are fine to execute these instructions on unaligned data. + +This patch explicitly forbids GCC to generate instructions that require +alignment of the data. + +If the entire program is compiled by LLVM or GCC, there is no problem (with GCC +everything is aligned, with LLVM vmovdqa is not used to assign both variables +at once). + +Linux does not have libthr, so Linux is not affected. Moreover Linux is likely +to build everything with GCC. + +--- libgcc/unwind.inc.orig 2025-04-12 08:18:17 UTC ++++ libgcc/unwind.inc +@@ -212,8 +212,8 @@ _Unwind_ForcedUnwind (struct _Unwind_Exception *exc, + uw_init_context (&this_context); + cur_context = this_context; + +- exc->private_1 = (_Unwind_Ptr) stop; +- exc->private_2 = (_Unwind_Ptr) stop_argument; ++ __builtin_memcpy(&exc->private_1, &stop, sizeof(_Unwind_Ptr)); ++ __builtin_memcpy(&exc->private_2, &stop_argument, sizeof(_Unwind_Ptr)); + + code = _Unwind_ForcedUnwind_Phase2 (exc, &cur_context, &frames); + if (code != _URC_INSTALL_CONTEXT)home | help
Want to link to this message? Use this
URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?202504161321.53GDLZkO042225>
