On 12/20/2015 11:18 AM, John Paul Adrian Glaubitz wrote:
> PS: I will clean the patch up after I have verified it to work.
>     So please don't add it as-is.

Alright, the fix works. Attaching a debdiff with my suggested
changes. As I said before, this package should be built on an
armel box and then have the buildds build ghc for the remaining
architectures.

Cheers,
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-7.10.3/debian/changelog new/ghc-7.10.3/debian/changelog
--- old/ghc-7.10.3/debian/changelog	2015-12-14 09:09:52.000000000 +0100
+++ new/ghc-7.10.3/debian/changelog	2015-12-20 17:03:10.721723902 +0100
@@ -1,3 +1,12 @@
+ghc (7.10.3-4.1) unstable; urgency=medium
+
+  * Non-maintainer upload.
+  * Add debian/patches/armel-revert-ghci-fixes.patch which reverts
+    the ARM ghci fixes, but apply the patch on armel only with
+    the help of the debian/rules file (Closes: #807020).
+
+ -- John Paul Adrian Glaubitz <glaub...@physik.fu-berlin.de>  Sun, 20 Dec 2015 17:01:39 +0100
+
 ghc (7.10.3-4) unstable; urgency=medium
 
   [ Colin Watson ]
diff -Nru old/ghc-7.10.3/debian/patches/armel-revert-ghci-fixes.patch new/ghc-7.10.3/debian/patches/armel-revert-ghci-fixes.patch
--- old/ghc-7.10.3/debian/patches/armel-revert-ghci-fixes.patch	1970-01-01 01:00:00.000000000 +0100
+++ new/ghc-7.10.3/debian/patches/armel-revert-ghci-fixes.patch	2015-12-20 16:45:04.111264142 +0100
@@ -0,0 +1,86 @@
+Description: Revert ghci ARM improvements (ticket #10375) on armel
+ This patch reverts a change which improved ghci on ARM (see
+ ghc ticket #10375). While the change fixed ghci on armhf, it
+ actually resulted in the ghc package FTBFS on armel since the
+ changes introduced made ghc incompatible with this architecture
+ (ticket #11058). As a temporary workaround, we revert this particular
+ change when ghc is built on armel. For this reason, this patch
+ is not applied using the series file but only selectively on
+ armel with the help of debian/rules.
+ .
+
+--- ghc-7.10.3.orig/aclocal.m4
++++ ghc-7.10.3/aclocal.m4
+@@ -574,18 +574,10 @@ AC_DEFUN([FPTOOLS_SET_C_LD_FLAGS],
+         $3="$$3 -D_HPUX_SOURCE"
+         $5="$$5 -D_HPUX_SOURCE"
+         ;;
+-    arm*linux*)
+-        # On arm/linux and arm/android, tell gcc to generate Arm
+-        # instructions (ie not Thumb) and to link using the gold linker.
+-        # Forcing LD to be ld.gold is done in FIND_LD m4 macro.
+-        $2="$$2 -marm"
+-        $3="$$3 -fuse-ld=gold -Wl,-z,noexecstack"
+-        $4="$$4 -z noexecstack"
+-        ;;
+-
+-    aarch64*linux*)
+-        # On aarch64/linux and aarch64/android, tell gcc to link using the
+-        # gold linker.
++    arm*linux*       | \
++    aarch64*linux*   )
++        # On arm/linux, aarch64/linux, arm/android and aarch64/android, tell
++        # gcc to link using the gold linker.
+         # Forcing LD to be ld.gold is done in FIND_LD m4 macro.
+         $3="$$3 -fuse-ld=gold -Wl,-z,noexecstack"
+         $4="$$4 -z noexecstack"
+--- ghc-7.10.3.orig/compiler/ghci/ByteCodeItbls.hs
++++ ghc-7.10.3/compiler/ghci/ByteCodeItbls.hs
+@@ -219,17 +219,17 @@ mkJumpToAddr dflags a = case platformArc
+                  , fromIntegral ((w64 `shiftR` 32) .&. 0x0000FFFF) ]
+ 
+     ArchARM { } ->
+-        -- Generates Arm sequence,
++        -- Generates Thumb sequence,
+         --      ldr r1, [pc, #0]
+         --      bx r1
+         --
+         -- which looks like:
+         --     00000000 <.addr-0x8>:
+-        --     0:       00109fe5    ldr    r1, [pc]      ; 8 <.addr>
+-        --     4:       11ff2fe1    bx     r1
++        --     0:       4900        ldr    r1, [pc]      ; 8 <.addr>
++        --     4:       4708        bx     r1
+         let w32 = fromIntegral (funPtrToInt a) :: Word32
+-        in Left [ 0x00, 0x10, 0x9f, 0xe5
+-                , 0x11, 0xff, 0x2f, 0xe1
++        in Left [ 0x49, 0x00
++                , 0x47, 0x08
+                 , byte0 w32, byte1 w32, byte2 w32, byte3 w32]
+ 
+     arch ->
+--- ghc-7.10.3.orig/compiler/llvmGen/LlvmCodeGen/Ppr.hs
++++ ghc-7.10.3/compiler/llvmGen/LlvmCodeGen/Ppr.hs
+@@ -52,7 +52,7 @@ moduleLayout = sdocWithPlatform $ \platf
+         $+$ text "target triple = \"x86_64-linux-gnu\""
+     Platform { platformArch = ArchARM {}, platformOS = OSLinux } ->
+         text "target datalayout = \"e-p:32:32:32-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64-f32:32:32-f64:64:64-v64:64:64-v128:64:128-a0:0:64-n32\""
+-        $+$ text "target triple = \"armv6-unknown-linux-gnueabihf\""
++        $+$ text "target triple = \"arm-unknown-linux-gnueabi\""
+     Platform { platformArch = ArchARM {}, platformOS = OSAndroid } ->
+         text "target datalayout = \"e-p:32:32:32-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64-f32:32:32-f64:64:64-v64:64:64-v128:64:128-a0:0:64-n32\""
+         $+$ text "target triple = \"arm-unknown-linux-androideabi\""
+--- ghc-7.10.3.orig/rts/Linker.c
++++ ghc-7.10.3/rts/Linker.c
+@@ -5574,11 +5574,6 @@ do_Elf_Rel_relocations ( ObjectCode* oc,
+ #ifdef arm_HOST_ARCH
+          // Thumb instructions have bit 0 of symbol's st_value set
+          is_target_thm = S & 0x1;
+-
+-         if (is_target_thm)
+-            errorBelch( "Symbol `%s' requires Thumb linkage which is not "
+-                        "currently supported.\n", symbol );
+-
+          T = sym.st_info & STT_FUNC && is_target_thm;
+ 
+          // Make sure we clear bit 0. Strictly speaking we should have done
diff -Nru old/ghc-7.10.3/debian/rules new/ghc-7.10.3/debian/rules
--- old/ghc-7.10.3/debian/rules	2015-12-09 23:08:10.000000000 +0100
+++ new/ghc-7.10.3/debian/rules	2015-12-20 17:01:21.292295986 +0100
@@ -57,6 +57,9 @@
 ifeq (armhf,$(DEB_HOST_ARCH))
 	echo "SRC_HC_OPTS += -D__ARM_PCS_VFP" >> mk/build.mk
 endif
+ifeq (armel,$(DEB_HOST_ARCH))
+	patch -p1 < debian/patches/armel-revert-ghci-fixes.patch
+endif
 ifeq (s390x,$(DEB_HOST_ARCH))
 	echo "SRC_CC_OPTS += -fno-PIE" >> mk/build.mk
 	echo "SRC_LD_OPTS += -no-pie" >> mk/build.mk

Reply via email to