--- include/private/gcconfig.h.orig	Mon Oct  8 10:36:25 2001
+++ include/private/gcconfig.h	Mon Oct  8 10:56:43 2001
@@ -23,10 +23,19 @@
 
 /* Machine specific parts contributed by various people.  See README file. */
 
-/* First a unified test for Linux: */
+/* First a unified test for the Multi-platform OS's: */
 # if defined(linux) || defined(__linux__)
 #    define LINUX
 # endif
+# if defined(__FreeBSD__)
+#    define FREEBSD
+# endif
+# if defined(__OpenBSD__)
+#    define OPENBSD
+# endif
+# if defined(bsdi)
+#    define BSDI
+# endif
 
 /* And one for NetBSD: */
 # if defined(__NetBSD__)
@@ -44,25 +53,19 @@
 #    define HP
 #    define mach_type_known
 # endif
-# if defined(__OpenBSD__) && defined(m68k)
+# if (defined(__NetBSD__) || defined(__OpenBSD__)) && defined(m68k)
 #    define M68K
-#    define OPENBSD
 #    define mach_type_known
 # endif
-# if defined(__OpenBSD__) && defined(__sparc__)
+# if (defined(__FreeBSD__) || defined(__NetBSD__) || defined(__OpenBSD__)) && defined(__sparc__)
 #    define SPARC
-#    define OPENBSD
 #    define mach_type_known
 # endif
-# if defined(__NetBSD__) && defined(m68k)
-#    define M68K
-#    define mach_type_known
-# endif
-# if defined(__NetBSD__) && defined(__powerpc__)
+# if (defined(__FreeBSD__) || defined(__NetBSD__)) && defined(__powerpc__)
 #    define POWERPC
 #    define mach_type_known
 # endif
-# if defined(__NetBSD__) && defined(__arm32__)
+# if (defined(__FreeBSD__) || defined(__NetBSD__)) && defined(__arm32__)
 #    define ARM32
 #    define mach_type_known
 # endif
@@ -125,7 +128,7 @@
 #   define mach_type_known
 # endif
 # if defined(sparc) && defined(unix) && !defined(sun) && !defined(linux) \
-     && !defined(__OpenBSD__) && !(__NetBSD__)
+     && !defined(__FreeBSD__) && !defined(__OpenBSD__) && !(__NetBSD__)
 #   define SPARC
 #   define DRSNX
 #   define mach_type_known
@@ -170,7 +173,7 @@
 #    define I386
 #    define mach_type_known
 # endif
-# if defined(LINUX) && (defined(__ia64__) || defined(__ia64))
+# if (defined(__FreeBSD__) || defined(LINUX)) && (defined(__ia64__) || defined(__ia64))
 #    define IA64
 #    define mach_type_known
 # endif
@@ -196,7 +199,7 @@
 # endif
 # if defined(__alpha) || defined(__alpha__)
 #   define ALPHA
-#   if !defined(LINUX) && !defined(NETBSD)
+#   if !defined(LINUX) && !defined(__FreeBSD__) && !defined(NETBSD) && !defined(__OpenBSD__)
 #     define OSF1	/* a.k.a Digital Unix */
 #   endif
 #   define mach_type_known
@@ -218,6 +221,9 @@
 #   define MACOS
 #   define mach_type_known
 # endif
+# if (defined(__FreeBSD__) || defined(__NetBSD__) || defined(bsdi)) && (defined(__powerpc) || defined(__ppc__) || defined(__ppc))
+#    define POWERPC
+# endif
 # if defined(macosx) || \
      defined(__APPLE__) && defined(__MACH__) && defined(__ppc__)
 #    define MACOSX
@@ -239,25 +245,10 @@
 #   define NEXT
 #   define mach_type_known
 # endif
-# if defined(__OpenBSD__) && (defined(i386) || defined(__i386__))
+# if (defined(__FreeBSD__) || defined(__NetBSD__) || defined(__OpenBSD__) || defined(bsdi)) && (defined(i386) || defined(__i386__))
 #   define I386
-#   define OPENBSD
 #   define mach_type_known
 # endif
-# if defined(__FreeBSD__) && (defined(i386) || defined(__i386__))
-#   define I386
-#   define FREEBSD
-#   define mach_type_known
-# endif
-# if defined(__NetBSD__) && (defined(i386) || defined(__i386__))
-#   define I386
-#   define mach_type_known
-# endif
-# if defined(bsdi) && (defined(i386) || defined(__i386__))
-#    define I386
-#    define BSDI
-#    define mach_type_known
-# endif
 # if !defined(mach_type_known) && defined(__386BSD__)
 #   define I386
 #   define THREE86BSD
@@ -391,7 +382,7 @@
 		    /*			(SUNOS4, SUNOS5, LINUX,		*/
 		    /*			 DRSNX variants)		*/
 		    /* 		   ALPHA      ==> DEC Alpha 		*/
-		    /*			(OSF1 and LINUX variants)	*/
+		    /*			(OSF1, BSD and LINUX variants)	*/
 		    /* 		   M88K       ==> Motorola 88XX0        */
 		    /* 		        (CX_UX and DGUX)		*/
 		    /* 		   S370	      ==> 370-like machine	*/
@@ -1262,6 +1253,24 @@
 #   	define CPP_WORDSZ 64
 #   	define MPROTECT_VDB
 #   	define DYNAMIC_LOADING
+#   endif
+#   ifdef FREEBSD
+#       define OS_TYPE "FREEBSD"
+#       define CPP_WORDSZ 64
+#      define HEURISTIC2
+#       define STACKBOTTOM ((ptr_t) 0x120000000)
+/* #           define DATASTART ((ptr_t) 0x140000000) */
+#       define DATASTART GC_data_start
+/* #       define DYNAMIC_LOADING */
+       extern int _end;
+#      define DATAEND (&_end)
+#   endif
+#   if defined(OPENBSD)
+#       define OS_TYPE "OPENBSD"
+#       define CPP_WORDSZ 64
+#      define HEURISTIC2
+       extern int _end;
+#      define DATAEND (&_end)
 #   endif
 #   ifdef LINUX
 #       define OS_TYPE "LINUX"
