diff --git a/mono-core.changes b/mono-core.changes
index fedaa5f..38e8c3a 100644
--- a/mono-core.changes
+++ b/mono-core.changes
@@ -1,3 +1,8 @@
+-------------------------------------------------------------------
+Thu Dec 27 17:52:57 UTC 2012 - dvaleev@suse.com
+
+- Fix ppc build failures (ppc.patch)
+
 -------------------------------------------------------------------
 Mon Dec 17 12:34:59 UTC 2012 - adrian@suse.de
 
diff --git a/mono-core.spec b/mono-core.spec
index f7b6e04..d8c623b 100644
--- a/mono-core.spec
+++ b/mono-core.spec
@@ -39,6 +39,8 @@ Patch1:         mono-arm-cpuinfo-v5.patch
 Patch2:         mono-arm-cpuinfo-v7.patch
 # PATCH-MISSING-TAG -- See http://wiki.opensuse.org/openSUSE:Packaging_Patches_guidelines
 Patch3:         mono-arm-vfp.patch
+# PATCH-FIX-OPENSUSE ppc.patch dvaleev@suse.com -- fix ppc build failures
+Patch4:         ppc.patch
 BuildRequires:  bison
 BuildRequires:  fdupes
 BuildRequires:  gcc-c++
@@ -112,6 +114,7 @@ technologies that have been submitted to the ECMA for standardization.
 %patch2 -p1
 %patch3 -p1
 %endif
+%patch4 -p1
 
 %build
 # These are only needed if there are patches to the runtime
diff --git a/ppc.patch b/ppc.patch
new file mode 100644
index 0000000..c6ce90b
--- /dev/null
+++ b/ppc.patch
@@ -0,0 +1,38 @@
+Index: mono-3.0.2/mono/mini/mini.c
+===================================================================
+--- mono-3.0.2.orig/mono/mini/mini.c
++++ mono-3.0.2/mono/mini/mini.c
+@@ -6240,7 +6240,7 @@ mini_create_ftnptr (MonoDomain *domain,
+ 	desc [0] = addr;
+ 	desc [1] = NULL;
+ #	elif defined(__ppc64__) || defined(__powerpc64__)
+-	gpointer *desc;
++	//gpointer *desc;
+ 
+ 	desc = mono_domain_alloc0 (domain, 3 * sizeof (gpointer));
+ 
+Index: mono-3.0.2/mono/mini/mini-ppc.h
+===================================================================
+--- mono-3.0.2.orig/mono/mini/mini-ppc.h
++++ mono-3.0.2/mono/mini/mini-ppc.h
+@@ -96,6 +96,7 @@ typedef struct MonoCompileArch {
+ #define MONO_ARCH_EMULATE_FREM 1
+ #define MONO_ARCH_BIGMUL_INTRINS 1
+ #define MONO_ARCH_HAVE_ATOMIC_CAS 1
++#define MONO_ARCH_GC_MAPS_SUPPORTED 1
+
+ /* Parameters used by the register allocator */
+ #define MONO_ARCH_CALLEE_REGS ((0xff << ppc_r3) | (1 << ppc_r11) | (1 << ppc_r12))
+Index: mono-3.0.2/mono/mini/mini-gc.c
+===================================================================
+--- mono-3.0.2.orig/mono/mini/mini-gc.c
++++ mono-3.0.2/mono/mini/mini-gc.c
+@@ -438,6 +438,8 @@ static int callee_saved_regs [] = { X86_
+ static int callee_saved_regs [] = { ARMREG_V1, ARMREG_V2, ARMREG_V3, ARMREG_V4, ARMREG_V5, ARMREG_V7, ARMREG_FP };
+ #elif defined(TARGET_S390X)
+ static int callee_saved_regs [] = { s390_r6, s390_r7, s390_r8, s390_r9, s390_r10, s390_r11, s390_r12, s390_r13, s390_r14 };
++#elif defined(TARGET_POWERPC)
++static int callee_saved_regs [] = { ppc_r6, ppc_r7, ppc_r8, ppc_r9, ppc_r10, ppc_r11, ppc_r12, ppc_r13, ppc_r14 };
+ #endif
+
+ static guint32