diff -durN gcc-4.4.0.orig/gcc/config/sparc/freebsd.h gcc-4.4.0/gcc/config/sparc/freebsd.h
--- gcc-4.4.0.orig/gcc/config/sparc/freebsd.h	2007-08-02 12:49:31.000000000 +0200
+++ gcc-4.4.0/gcc/config/sparc/freebsd.h	2009-05-27 21:38:16.000000000 +0200
@@ -25,9 +25,22 @@
 /* FreeBSD needs the platform name (sparc64) defined.
    Emacs needs to know if the arch is 64 or 32-bits.  */
 
-#undef  CPP_CPU64_DEFAULT_SPEC
-#define CPP_CPU64_DEFAULT_SPEC \
-  "-D__sparc64__ -D__sparc_v9__ -D__sparcv9 -D__arch64__"
+#undef  FBSD_TARGET_CPU_CPP_BUILTINS
+#define FBSD_TARGET_CPU_CPP_BUILTINS()                  \
+  do                                                    \
+    {                                                   \
+      if (TARGET_ARCH64)                                \
+        {                                               \
+          builtin_define ("__sparc64__");               \
+          builtin_define ("__sparc_v9__");              \
+          builtin_define ("__sparcv9");                 \
+        }                                               \
+      else                                              \
+        builtin_define ("__sparc");                     \
+      builtin_define ("__sparc__");                     \
+    }                                                   \
+  while (0)
+
 
 #define LINK_SPEC "%(link_arch)						\
   %{!mno-relax:%{!r:-relax}}						\
