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