On 11/05/2016 06:32 AM, John Paul Adrian Glaubitz wrote:
> Attaching a refined patch with more fine-grained x32 detection and
> updated for ghc 8.0.1.

Whoops, forgot to set INTEGER_LIBRARY to integer-simple with the 8.0.1
patch. I have re-added it and attach the updated patch.

Adrian

-- 
 .''`.  John Paul Adrian Glaubitz
: :' :  Debian Developer - glaub...@debian.org
`. `'   Freie Universitaet Berlin - glaub...@physik.fu-berlin.de
  `-    GPG: 62FF 8A75 84E0 2956 9546  0006 7426 3B37 F5B5 F913
diff -Nru old/ghc-8.0.1/debian/patches/series new/ghc-8.0.1/debian/patches/series
--- old/ghc-8.0.1/debian/patches/series	2016-11-01 16:05:20.000000000 +0100
+++ new/ghc-8.0.1/debian/patches/series	2016-11-05 06:25:08.308319129 +0100
@@ -10,3 +10,4 @@
 no-pie
 find-tycon-panic
 compiler-cmm-PprC-sparc-alignment.patch
+x32-use-native-x86_64-insn.patch
diff -Nru old/ghc-8.0.1/debian/patches/x32-use-native-x86_64-insn.patch new/ghc-8.0.1/debian/patches/x32-use-native-x86_64-insn.patch
--- old/ghc-8.0.1/debian/patches/x32-use-native-x86_64-insn.patch	1970-01-01 01:00:00.000000000 +0100
+++ new/ghc-8.0.1/debian/patches/x32-use-native-x86_64-insn.patch	2016-11-05 06:26:05.760389006 +0100
@@ -0,0 +1,25 @@
+Description: Use native x86_64 instructions on x32
+ This patch enables a few native 64-bit integer instructions
+ on x32 which are available on this architecture despite using
+ 32-bit pointers. These instructions are present on x86_64 but
+ not on x86 and ghc checks the size of (void *) to determine
+ that. This method fails on x32 since despite using 32-bit
+ pointers and hence sizeof(void *) == 4, it still uses the
+ full x86_64 instruction set and software-emulated variants
+ of the aforementioned 64-bit integer instructions are
+ therefore not present in the toolchain which will make ghc
+ fail to build on x32.
+ See: https://ghc.haskell.org/trac/ghc/ticket/11571
+ .
+
+--- ghc-8.0.1.orig/rts/RtsSymbols.c
++++ ghc-8.0.1/rts/RtsSymbols.c
+@@ -737,7 +737,7 @@
+ 
+ 
+ // 64-bit support functions in libgcc.a
+-#if defined(__GNUC__) && SIZEOF_VOID_P <= 4 && !defined(_ABIN32)
++#if defined(__GNUC__) && SIZEOF_VOID_P <= 4 && !defined(_ABIN32) && !(defined(__x86_64__) && defined(__ILP32__))
+ #define RTS_LIBGCC_SYMBOLS                             \
+       SymI_NeedsProto(__divdi3)                        \
+       SymI_NeedsProto(__udivdi3)                       \
diff -Nru old/ghc-8.0.1/debian/rules new/ghc-8.0.1/debian/rules
--- old/ghc-8.0.1/debian/rules	2016-11-01 16:10:01.000000000 +0100
+++ new/ghc-8.0.1/debian/rules	2016-11-05 06:39:20.302348557 +0100
@@ -38,6 +38,10 @@
 BUILD_HADDOCK_DOCS=YES
 DEB_HOOGLE_TXT_DIR = /usr/lib/ghc-doc/hoogle/
 
+ifeq (x32,$(DEB_HOST_ARCH))
+  EXTRA_CONFIGURE_FLAGS += --enable-unregisterised
+endif
+
 %:
 	dh $@ --with autotools-dev
 
@@ -59,6 +63,9 @@
 ifneq (,$(findstring $(DEB_HOST_ARCH), mips mipsel))
 	echo "SRC_HC_OPTS     += -optc--param -optcggc-min-expand=10" >> mk/build.mk
 endif
+ifeq (x32,$(DEB_HOST_ARCH))
+	echo "INTEGER_LIBRARY = integer-simple" >> mk/build.mk
+endif
 ifneq (,$(findstring nostrip,$(DEB_BUILD_OPTIONS)))
 #	echo "GhcStage1HcOpts += -DDEBUG" >> mk/build.mk
 #	echo "GhcStage2HcOpts += -DDEBUG" >> mk/build.mk

Reply via email to