5cc7cbb
diff -up ghc-7.0.2/rts/Linker.c.fix-powerpc ghc-7.0.2/rts/Linker.c
5cc7cbb
--- ghc-7.0.2/rts/Linker.c.fix-powerpc	2011-02-28 19:10:08.000000000 +0100
5cc7cbb
+++ ghc-7.0.2/rts/Linker.c	2011-04-25 22:20:10.781092305 +0200
5cc7cbb
@@ -70,11 +70,12 @@
5cc7cbb
 #include <sys/wait.h>
5cc7cbb
 #endif
5cc7cbb
 
5cc7cbb
-#if defined(linux_HOST_OS    ) || defined(freebsd_HOST_OS) || \
5cc7cbb
-    defined(dragonfly_HOST_OS) || defined(netbsd_HOST_OS ) || \
5cc7cbb
-    defined(openbsd_HOST_OS  ) || \
5cc7cbb
-    ( defined(darwin_HOST_OS ) && !defined(powerpc_HOST_ARCH) )
5cc7cbb
-/* Don't use mmap on powerpc-apple-darwin as mmap doesn't support
5cc7cbb
+#if !defined(powerpc_HOST_ARCH) && \
5cc7cbb
+    (   defined(linux_HOST_OS    ) || defined(freebsd_HOST_OS) || \
5cc7cbb
+        defined(dragonfly_HOST_OS) || defined(netbsd_HOST_OS ) || \
5cc7cbb
+        defined(openbsd_HOST_OS  ) || defined(darwin_HOST_OS ) || \
5cc7cbb
+        defined(kfreebsdgnu_HOST_OS) )
5cc7cbb
+/* Don't use mmap on powerpc_HOST_ARCH as mmap doesn't support
5cc7cbb
  * reallocating but we need to allocate jump islands just after each
5cc7cbb
  * object images. Otherwise relative branches to jump islands can fail
5cc7cbb
  * due to 24-bits displacement overflow.
5cc7cbb
@@ -2436,7 +2437,11 @@ static void ocFlushInstructionCacheFrom(
5cc7cbb
 static void ocFlushInstructionCache( ObjectCode *oc )
5cc7cbb
 {
5cc7cbb
     /* The main object code */
5cc7cbb
-    ocFlushInstructionCacheFrom(oc->image + oc->misalignment, oc->fileSize);
5cc7cbb
+    ocFlushInstructionCacheFrom(oc->image
5cc7cbb
+#ifdef darwin_HOST_OS
5cc7cbb
+            + oc->misalignment
5cc7cbb
+#endif
5cc7cbb
+            , oc->fileSize);
5cc7cbb
 
5cc7cbb
     /* Jump Islands */
5cc7cbb
     ocFlushInstructionCacheFrom(oc->symbol_extras, sizeof(SymbolExtra) * oc->n_symbol_extras);