diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 1feb9606cbca98d41edda8e91e0a8cb08de1db6c..29361b32903b056e511ea9aa496de95577b9241f 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,11 @@
+2000-11-20  Stan Shebs  <shebs@apple.com>
+
+	* config/rs6000/xm-darwin.h: New file, Darwin host definitions.
+	* config/rs6000/x-darwin: New file, Darwin host fragment.
+	* config.gcc (powerpc-*-darwin*): New host.
+	* system.h (HAVE_DESIGNATED_INITIALIZERS):  Allow this to be
+	overridden by a config file.
+
 2000-11-20  Neil Booth  <neilb@earthling.net>
 
 	* cppmacro.c (paste_tokens): Rename from paste_payloads.
diff --git a/gcc/config.gcc b/gcc/config.gcc
index 842515d74b5710ee83a982d21011909866ac6bcd..63eaa8c79827341ee052f30a04cfccae2dacea3b 100644
--- a/gcc/config.gcc
+++ b/gcc/config.gcc
@@ -2641,6 +2641,10 @@ powerpc-*-beos*)
 	tmake_file=rs6000/t-beos
 	xmake_file=rs6000/x-beos
 	;;
+powerpc-*-darwin*)
+	xm_file="rs6000/xm-rs6000.h rs6000/xm-darwin.h"
+	xmake_file=rs6000/x-darwin
+	;;
 powerpc-*-sysv*)
 	tm_file=rs6000/sysv4.h
 	xm_file="rs6000/xm-sysv4.h"
diff --git a/gcc/config/rs6000/x-darwin b/gcc/config/rs6000/x-darwin
new file mode 100644
index 0000000000000000000000000000000000000000..f2b8c94b24a4971f074a5607371f4a54b5ce32a6
--- /dev/null
+++ b/gcc/config/rs6000/x-darwin
@@ -0,0 +1,5 @@
+# The spiffy cpp-precomp chokes on some legitimate constructs in GCC
+# sources; use -traditional-cpp to get to GNU cpp. (This is another
+# peculiarity of Apple's GCC that we hope to get rid of.)
+
+CC = cc -traditional-cpp
diff --git a/gcc/config/rs6000/xm-darwin.h b/gcc/config/rs6000/xm-darwin.h
new file mode 100644
index 0000000000000000000000000000000000000000..8d75cf08712e1de75dc5bd31ed562925268c4c71
--- /dev/null
+++ b/gcc/config/rs6000/xm-darwin.h
@@ -0,0 +1,9 @@
+/* Undo the USG definition in xm-rs6000.h, Darwin is a BSD flavor.  */
+
+#undef USG
+
+/* Override the usual setting, since Apple's GCC has lame bugs and
+   can't handle the initializers.  Someday the bugs will be fixed and
+   we can get rid of this silliness.  */
+
+#define HAVE_DESIGNATED_INITIALIZERS 0
diff --git a/gcc/system.h b/gcc/system.h
index f0b7b649f8a4fecf3836deb0a40d4f7563ae1fc8..20531ddb4e585ac02a9ec3da58d77d9b329671ce 100644
--- a/gcc/system.h
+++ b/gcc/system.h
@@ -429,8 +429,10 @@ extern void abort PARAMS ((void));
 #endif
 
 /* 1 if we have C99 designated initializers.  */
+#if !defined(HAVE_DESIGNATED_INITIALIZERS)
 #define HAVE_DESIGNATED_INITIALIZERS \
   ((GCC_VERSION >= 2007) || (__STDC_VERSION__ >= 199901L))
+#endif
 
 /* Define a STRINGIFY macro that's right for ANSI or traditional C.
    Note: if the argument passed to STRINGIFY is itself a macro, eg