diff --git a/srcpkgs/gcc/patches/libgcc-ibm128-no-tag.patch b/srcpkgs/gcc/patches/libgcc-ibm128-no-tag.patch new file mode 100644 index 0000000000..855f8f1b03 --- /dev/null +++ b/srcpkgs/gcc/patches/libgcc-ibm128-no-tag.patch @@ -0,0 +1,38 @@ +From 236634eed58fa6e00cc50f19e7202903a9d8fae6 Mon Sep 17 00:00:00 2001 +From: q66 +Date: Thu, 12 Dec 2019 04:03:56 +0100 +Subject: [PATCH] libgcc: use -mno-gnu-attribute for 128-bit IBM ldouble + support code + +Doing this will allow libgcc to emit the appropriate symbols without actually +emitting the FP ABI tag for them, which allows 64-bit long double environments +to function and even link statically while still allowing usage of +explicit __ibm128. +--- + libgcc/config/rs6000/t-ibm-ldouble | 2 +- + libgcc/config/rs6000/t-linux | 2 +- + 2 files changed, 2 insertions(+), 2 deletions(-) + +diff --git a/libgcc/config/rs6000/t-ibm-ldouble b/libgcc/config/rs6000/t-ibm-ldouble +index b132784..fb5eca8 100644 +--- libgcc/config/rs6000/t-ibm-ldouble ++++ libgcc/config/rs6000/t-ibm-ldouble +@@ -1,6 +1,6 @@ + # GCC 128-bit long double support routines. + LIB2ADD += $(srcdir)/config/rs6000/ibm-ldouble.c + +-HOST_LIBGCC2_CFLAGS += -mlong-double-128 ++HOST_LIBGCC2_CFLAGS += -mlong-double-128 -mno-gnu-attribute + + SHLIB_MAPFILES += $(srcdir)/config/rs6000/libgcc-ibm-ldouble.ver +diff --git a/libgcc/config/rs6000/t-linux b/libgcc/config/rs6000/t-linux +index 4f6d4c4..fa93bb6 100644 +--- libgcc/config/rs6000/t-linux ++++ libgcc/config/rs6000/t-linux +@@ -1,3 +1,3 @@ + SHLIB_MAPFILES += $(srcdir)/config/rs6000/libgcc-glibc.ver + +-HOST_LIBGCC2_CFLAGS += -mlong-double-128 -mno-minimal-toc ++HOST_LIBGCC2_CFLAGS += -mlong-double-128 -mno-gnu-attribute -mno-minimal-toc +-- +2.24.0 diff --git a/srcpkgs/gcc/patches/libgcc-musl-ldbl128-config.patch b/srcpkgs/gcc/patches/libgcc-musl-ldbl128-config.patch deleted file mode 100644 index e692b41a28..0000000000 --- a/srcpkgs/gcc/patches/libgcc-musl-ldbl128-config.patch +++ /dev/null @@ -1,138 +0,0 @@ -From 330788a7acde436c1ee8fcb0c1fd657e6ffab8fd Mon Sep 17 00:00:00 2001 -From: q66 -Date: Thu, 2 May 2019 18:58:29 +0200 -Subject: [PATCH] libgcc: do not build 128-bit long double runtime support for - musl - -Another patch was already disabling 128-bit long doubles for the -compiler itself, this one additionally avoids building the runtime -support for that. - -Musl does not support 128-bit long doubles, and building libgcc -with 128-bit long double ABI was breaking things like ld.gold -which refuses to link two objects with different FP ABI tags. ---- - libgcc/config.host | 10 +++++++++- - libgcc/config/rs6000/ppc64-fp.c | 14 ++++++++++++++ - libgcc/config/rs6000/t-musl | 8 ++++++++ - 3 files changed, 31 insertions(+), 1 deletion(-) - create mode 100644 libgcc/config/rs6000/t-musl - -diff --git a/libgcc/config.host b/libgcc/config.host -index 11b4aca..51ceef5 100644 ---- libgcc/config.host -+++ libgcc/config.host -@@ -1071,8 +1071,16 @@ powerpc-*-rtems*) - extra_parts="$extra_parts crtbeginS.o crtendS.o crtbeginT.o ecrti.o ecrtn.o ncrti.o ncrtn.o" - ;; - powerpc*-*-linux*) -- tmake_file="${tmake_file} rs6000/t-ppccomm rs6000/t-savresfgpr rs6000/t-crtstuff rs6000/t-linux t-dfprules rs6000/t-ppc64-fp t-slibgcc-libgcc" -+ tmake_file="${tmake_file} rs6000/t-ppccomm rs6000/t-savresfgpr rs6000/t-crtstuff t-dfprules rs6000/t-ppc64-fp t-slibgcc-libgcc" - tmake_file="${tmake_file} t-stack rs6000/t-stack-rs6000" -+ case ${host} in -+ powerpc*-*-linux-musl*) -+ tmake_file="${tmake_file} rs6000/t-musl" -+ ;; -+ *) -+ tmake_file="${tmake_file} rs6000/t-linux" -+ ;; -+ esac - case $ppc_fp_type in - 64) - ;; -diff --git a/libgcc/config/rs6000/ppc64-fp.c b/libgcc/config/rs6000/ppc64-fp.c -index faffc82..9f479ee 100644 ---- libgcc/config/rs6000/ppc64-fp.c -+++ libgcc/config/rs6000/ppc64-fp.c -@@ -25,25 +25,34 @@ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see - . */ - - #if defined(__powerpc64__) || defined (__64BIT__) || defined(__ppc64__) -+#if __LDBL_MANT_DIG__ > __DBL_MANT_DIG__ - #define TMODES -+#endif - #include "fp-bit.h" - -+#ifdef TMODES - extern DItype __fixtfdi (TFtype); -+#endif - extern DItype __fixdfdi (DFtype); - extern DItype __fixsfdi (SFtype); - extern USItype __fixunsdfsi (DFtype); - extern USItype __fixunssfsi (SFtype); -+#ifdef TMODES - extern TFtype __floatditf (DItype); - extern TFtype __floatunditf (UDItype); -+#endif - extern DFtype __floatdidf (DItype); - extern DFtype __floatundidf (UDItype); - extern SFtype __floatdisf (DItype); - extern SFtype __floatundisf (UDItype); -+#ifdef TMODES - extern DItype __fixunstfdi (TFtype); -+#endif - - static DItype local_fixunssfdi (SFtype); - static DItype local_fixunsdfdi (DFtype); - -+#ifdef TMODES - DItype - __fixtfdi (TFtype a) - { -@@ -51,6 +60,7 @@ __fixtfdi (TFtype a) - return - __fixunstfdi (-a); - return __fixunstfdi (a); - } -+#endif - - DItype - __fixdfdi (DFtype a) -@@ -86,6 +96,7 @@ __fixunssfsi (SFtype a) - return (SItype) a; - } - -+#ifdef TMODES - TFtype - __floatditf (DItype u) - { -@@ -109,6 +120,7 @@ __floatunditf (UDItype u) - - return (TFtype) dh + (TFtype) dl; - } -+#endif - - DFtype - __floatdidf (DItype u) -@@ -183,6 +195,7 @@ __floatundisf (UDItype u) - return (SFtype) f; - } - -+#ifdef TMODES - DItype - __fixunstfdi (TFtype a) - { -@@ -206,6 +219,7 @@ __fixunstfdi (TFtype a) - v += (USItype) a; - return v; - } -+#endif - - /* This version is needed to prevent recursion; fixunsdfdi in libgcc - calls fixdfdi, which in turn calls calls fixunsdfdi. */ -diff --git a/libgcc/config/rs6000/t-musl b/libgcc/config/rs6000/t-musl -new file mode 100644 -index 0000000..f261d8a ---- /dev/null -+++ libgcc/config/rs6000/t-musl -@@ -0,0 +1,8 @@ -+# Overrides for musl; we want to avoid building all these implementations -+# required for quad-precision float handling as musl does not support that, -+# ibm-ldouble.c is added into the build by t-ppccomm -+ -+HOST_LIBGCC2_CFLAGS += -mlong-double-64 -mno-minimal-toc -+ -+# We do not want to build ibm-ldouble.c. -+LIB2ADD := $(filter-out %ibm-ldouble.c, $(LIB2ADD)) --- -2.21.0 -