Linker: Use contiguous mmapping on ARM
authorBen Gamari <ben@smart-cactus.org>
Sun, 3 Jan 2016 12:21:39 +0000 (13:21 +0100)
committerBen Gamari <ben@smart-cactus.org>
Sun, 3 Jan 2016 15:56:31 +0000 (16:56 +0100)
ARM has a 24-bit relative jump offset just like PowerPC. Ensure that
symbols don't get too far from their symbol extras.

See #11340.

Differential Revision: https://phabricator.haskell.org/D1728

rts/Linker.c

index c5781ee..e6f63cb 100644 (file)
 #endif
 
 
 #endif
 
 
-/* PowerPC has relative branch instructions with only 24 bit displacements
- * and therefore needs jump islands contiguous with each object code module.
+/* PowerPC and ARM have relative branch instructions with only 24 bit
+ * displacements and therefore need jump islands contiguous with each object
+ * code module.
  */
  */
-#if (USE_MMAP && defined(powerpc_HOST_ARCH) && defined(linux_HOST_OS))
+#if defined(powerpc_HOST_ARCH)
+#define SHORT_REL_BRANCH 1
+#endif
+#if defined(arm_HOST_ARCH)
+#define SHORT_REL_BRANCH 1
+#endif
+
+#if (USE_MMAP && defined(SHORT_REL_BRANCH) && defined(linux_HOST_OS))
 #define USE_CONTIGUOUS_MMAP 1
 #else
 #define USE_CONTIGUOUS_MMAP 0
 #define USE_CONTIGUOUS_MMAP 1
 #else
 #define USE_CONTIGUOUS_MMAP 0