port over the important parts of GCC 12 for powerpc from src.


Index: distinfo
===================================================================
RCS file: /cvsroot/pkgsrc/lang/gcc12/distinfo,v
retrieving revision 1.9
diff -p -u -r1.9 distinfo
--- distinfo	15 Dec 2024 03:05:12 -0000	1.9
+++ distinfo	17 Dec 2024 23:54:14 -0000
@@ -19,6 +19,10 @@ SHA1 (patch-gcc_config_arm_elf.h) = 5774
 SHA1 (patch-gcc_config_arm_netbsd-eabi.h) = 85eb89de6f2e64fac50251f06d7e4eab35903dae
 SHA1 (patch-gcc_config_arm_netbsd-elf.h) = 367d83c808fd7b5b1989d0490b532ad06b425b31
 SHA1 (patch-gcc_config_nvptx_gen-opt.sh) = 67b8c84f198561c1d964a50946937a0a9cc26749
+SHA1 (patch-gcc_config_rs6000_rs6000-logue.cc) = 8852ee6656836836b882f673448873190c44466b
+SHA1 (patch-gcc_config_rs6000_rs6000.cc) = 9aa2e73720f380c45a59e9e3b4c2b4fd0c4d689e
+SHA1 (patch-gcc_config_rs6000_sysv4.h) = be389b7b2a784ca4cd8dd8b8cefb03ae158d368c
+SHA1 (patch-gcc_config_rs6000_t-netbsd) = 2deb4b1735c95903aa4f66447a87cb41155d82b7
 SHA1 (patch-gcc_configure) = f13d23c46315d18fdbc3bbbad26d0763e2b27690
 SHA1 (patch-gcc_targhooks.cc) = 3bd54b7c3efc310aa2277f33cbd87b4a877cafea
 SHA1 (patch-isl_configure) = 5523c76d95b229b3cd25461b4c2b7af24bf2534e
Index: patches/patch-gcc_config_rs6000_rs6000-logue.cc
===================================================================
RCS file: patches/patch-gcc_config_rs6000_rs6000-logue.cc
diff -N patches/patch-gcc_config_rs6000_rs6000-logue.cc
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ patches/patch-gcc_config_rs6000_rs6000-logue.cc	17 Dec 2024 23:54:14 -0000
@@ -0,0 +1,22 @@
+--- gcc/config/rs6000/rs6000-logue.cc.orig	2024-06-20 01:08:06.000000000 -0700
++++ gcc/config/rs6000/rs6000-logue.cc	2024-12-17 15:44:35.079391555 -0800
+@@ -2277,7 +2277,8 @@
+     }
+   else if (DEFAULT_ABI == ABI_AIX || DEFAULT_ABI == ABI_ELFv2)
+     {
+-#if !defined (POWERPC_LINUX) && !defined (POWERPC_FREEBSD)
++#if !defined (POWERPC_LINUX) && !defined (POWERPC_FREEBSD) \
++    && !defined(POWERPC_NETBSD)
+       /* No out-of-line save/restore routines for GPRs on AIX.  */
+       gcc_assert (!TARGET_AIX || (sel & SAVRES_REG) != SAVRES_GPR);
+ #endif
+@@ -2289,7 +2290,8 @@
+ 		  : ((sel & SAVRES_LR) ? "_restgpr0_" : "_restgpr1_"));
+       else if ((sel & SAVRES_REG) == SAVRES_FPR)
+ 	{
+-#if defined (POWERPC_LINUX) || defined (POWERPC_FREEBSD)
++#if defined (POWERPC_LINUX) || defined (POWERPC_FREEBSD) \
++    || defined(POWERPC_NETBSD)
+ 	  if ((sel & SAVRES_LR))
+ 	    prefix = ((sel & SAVRES_SAVE) ? "_savefpr_" : "_restfpr_");
+ 	  else
Index: patches/patch-gcc_config_rs6000_rs6000.cc
===================================================================
RCS file: patches/patch-gcc_config_rs6000_rs6000.cc
diff -N patches/patch-gcc_config_rs6000_rs6000.cc
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ patches/patch-gcc_config_rs6000_rs6000.cc	17 Dec 2024 23:54:14 -0000
@@ -0,0 +1,24 @@
+--- gcc/config/rs6000/rs6000.cc.orig	2024-06-20 01:08:06.000000000 -0700
++++ gcc/config/rs6000/rs6000.cc	2024-12-17 15:46:35.810029314 -0800
+@@ -97,7 +97,8 @@
+      of the include files, so that POWERPC_LINUX and POWERPC_FREEBSD are
+      properly defined.  */
+ #ifndef TARGET_IEEEQUAD_DEFAULT
+-#if !defined (POWERPC_LINUX) && !defined (POWERPC_FREEBSD)
++#if !defined (POWERPC_LINUX) && !defined (POWERPC_FREEBSD) \
++    && !defined(POWERPC_NETBSD)
+ #define TARGET_IEEEQUAD_DEFAULT 1
+ #else
+ #define TARGET_IEEEQUAD_DEFAULT 0
+@@ -20747,7 +20748,11 @@
+   if (flag_pic)
+     return 3;
+   else if (DEFAULT_ABI == ABI_AIX || DEFAULT_ABI == ABI_ELFv2)
++#if defined (POWERPC_NETBSD)
++    return 3;
++#else
+     return 2;
++#endif
+   else
+     return 0;
+ }
Index: patches/patch-gcc_config_rs6000_sysv4.h
===================================================================
RCS file: patches/patch-gcc_config_rs6000_sysv4.h
diff -N patches/patch-gcc_config_rs6000_sysv4.h
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ patches/patch-gcc_config_rs6000_sysv4.h	17 Dec 2024 23:54:14 -0000
@@ -0,0 +1,27 @@
+--- gcc/config/rs6000/sysv4.h.orig	2024-06-20 01:08:06.000000000 -0700
++++ gcc/config/rs6000/sysv4.h	2024-12-17 15:48:26.037567286 -0800
+@@ -798,21 +798,14 @@
+ #define LIB_NETBSD_SPEC "\
+ -lc"
+ 
+-#define	STARTFILE_NETBSD_SPEC "\
+-ncrti.o%s crt0.o%s \
+-%{!shared:crtbegin.o%s} %{shared:crtbeginS.o%s}"
++#define	STARTFILE_NETBSD_SPEC NETBSD_STARTFILE_SPEC
+ 
+-#define ENDFILE_NETBSD_SPEC "\
+-%{!shared:crtend.o%s} %{shared:crtendS.o%s} \
+-ncrtn.o%s"
++#define ENDFILE_NETBSD_SPEC NETBSD_ENDFILE_SPEC
+ 
+ #define LINK_START_NETBSD_SPEC "\
+ "
+ 
+-#define LINK_OS_NETBSD_SPEC "\
+-%{!shared: %{!static: \
+-  %{rdynamic:-export-dynamic} \
+-  -dynamic-linker /usr/libexec/ld.elf_so}}"
++#define LINK_OS_NETBSD_SPEC NETBSD_LINK_SPEC_ELF
+ 
+ #define CPP_OS_NETBSD_SPEC "\
+ -D__powerpc__ -D__NetBSD__ -D__KPRINTF_ATTRIBUTE__"
Index: patches/patch-gcc_config_rs6000_t-netbsd
===================================================================
RCS file: patches/patch-gcc_config_rs6000_t-netbsd
diff -N patches/patch-gcc_config_rs6000_t-netbsd
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ patches/patch-gcc_config_rs6000_t-netbsd	17 Dec 2024 23:54:14 -0000
@@ -0,0 +1,10 @@
+--- gcc/config/rs6000/t-netbsd.orig	2024-06-20 01:08:06.000000000 -0700
++++ gcc/config/rs6000/t-netbsd	2024-12-17 15:48:58.969841508 -0800
+@@ -34,3 +34,7 @@
+ MULTILIB_EXCEPTIONS	=
+ 
+ MULTILIB_MATCHES	= ${MULTILIB_MATCHES_FLOAT}
++
++# It is important that crtbegin.o, etc., aren't surprised by stuff in .sdata.
++CRTSTUFF_T_CFLAGS += -msdata=none
++CRTSTUFF_T_CFLAGS_S += -msdata=none