From 6b98066a85d2a9e1666c6ac7ee5e8210d9eb887a Mon Sep 17 00:00:00 2001 From: Jens Petersen Date: Fri, 24 Aug 2012 16:30:44 +0900 Subject: [PATCH] update to 7.4.2 bootstrap - drop arm StgCRun patches - update arm hf patch - use _smp_mflags --- .gitignore | 2 + ...to-not-save-and-restore-r11-fp-regis.patch | 29 - ...n-clobbered-register-list-for-both-A.patch | 34 - ...rt-for-ARM-hard-float-ABI-fixes-5914.patch | 1274 +++++++++++++++++ ghc-debian-ARM-VFPv3D16.patch | 16 - ghc-debian-armhf_llvm_abi.patch | 26 - ghc.spec | 47 +- sources | 3 +- 8 files changed, 1297 insertions(+), 134 deletions(-) delete mode 100644 fix-ARM-StgCRun-to-not-save-and-restore-r11-fp-regis.patch delete mode 100644 fix-ARM-s-StgCRun-clobbered-register-list-for-both-A.patch create mode 100644 ghc-7.4-add-support-for-ARM-hard-float-ABI-fixes-5914.patch delete mode 100644 ghc-debian-ARM-VFPv3D16.patch delete mode 100644 ghc-debian-armhf_llvm_abi.patch diff --git a/.gitignore b/.gitignore index fb09fbc..6f437bb 100644 --- a/.gitignore +++ b/.gitignore @@ -7,3 +7,5 @@ testsuite-6.12.3.tar.bz2 /testsuite-7.0.4.tar.bz2 /ghc-7.4.1-testsuite.tar.bz2 /ghc-7.4.1-src.tar.bz2 +/ghc-7.4.2-src.tar.bz2 +/ghc-7.4.2-testsuite.tar.bz2 diff --git a/fix-ARM-StgCRun-to-not-save-and-restore-r11-fp-regis.patch b/fix-ARM-StgCRun-to-not-save-and-restore-r11-fp-regis.patch deleted file mode 100644 index 98772f1..0000000 --- a/fix-ARM-StgCRun-to-not-save-and-restore-r11-fp-regis.patch +++ /dev/null @@ -1,29 +0,0 @@ -From 1cbf3bcae87dd102942d85ce71ea17d42d4b5f5a Mon Sep 17 00:00:00 2001 -From: Karel Gardas -Date: Tue, 14 Feb 2012 08:03:07 +0100 -Subject: [PATCH 2/2] fix ARM StgCRun to not save and restore r11/fp register twice - ---- - rts/StgCRun.c | 4 ++-- - 1 files changed, 2 insertions(+), 2 deletions(-) - ---- a/rts/StgCRun.c -+++ b/rts/StgCRun.c -@@ -632,7 +632,7 @@ - /* - * save callee-saves registers on behalf of the STG code. - */ -- "stmfd sp!, {r4-r11, fp, ip, lr}\n\t" -+ "stmfd sp!, {r4-r10, fp, ip, lr}\n\t" - #if !defined(arm_HOST_ARCH_PRE_ARMv6) - "vstmdb sp!, {d8-d11}\n\t" - #endif -@@ -669,7 +669,7 @@ - #if !defined(arm_HOST_ARCH_PRE_ARMv6) - "vldmia sp!, {d8-d11}\n\t" - #endif -- "ldmfd sp!, {r4-r11, fp, ip, lr}\n\t" -+ "ldmfd sp!, {r4-r10, fp, ip, lr}\n\t" - : "=r" (r) - : "r" (f), "r" (basereg), "i" (RESERVED_C_STACK_BYTES) - #if !defined(__thumb__) diff --git a/fix-ARM-s-StgCRun-clobbered-register-list-for-both-A.patch b/fix-ARM-s-StgCRun-clobbered-register-list-for-both-A.patch deleted file mode 100644 index f033c18..0000000 --- a/fix-ARM-s-StgCRun-clobbered-register-list-for-both-A.patch +++ /dev/null @@ -1,34 +0,0 @@ -From 957f778cb971d63cbbea0c71c727c94474b1b905 Mon Sep 17 00:00:00 2001 -From: Karel Gardas -Date: Tue, 14 Feb 2012 08:01:47 +0100 -Subject: [PATCH 1/2] fix ARM's StgCRun clobbered register list for both ARM and Thumb modes - ---- - rts/StgCRun.c | 16 +++++++++++++++- - 1 files changed, 15 insertions(+), 1 deletions(-) - ---- a/rts/StgCRun.c -+++ b/rts/StgCRun.c -@@ -672,7 +672,21 @@ - "ldmfd sp!, {r4-r11, fp, ip, lr}\n\t" - : "=r" (r) - : "r" (f), "r" (basereg), "i" (RESERVED_C_STACK_BYTES) -- : "%r4", "%r5", "%r6", "%r8", "%r9", "%r10", "%r11", "%fp", "%ip", "%lr" -+#if !defined(__thumb__) -+ /* In ARM mode, r11/fp is frame-pointer and so we cannot mark -+ it as clobbered. If we do so, GCC complains with error. */ -+ : "%r4", "%r5", "%r6", "%r7", "%r8", "%r9", "%r10", "%ip", "%lr" -+#else -+ /* In Thumb mode r7 is frame-pointer and so we cannot mark it -+ as clobbered. On the other hand we mark as clobbered also -+ those regs not used in Thumb mode. Hard to judge if this is -+ needed, but certainly Haskell code is using them for -+ placing GHC's virtual registers there. See -+ includes/stg/MachRegs.h Please note that Haskell code is -+ compiled by GHC/LLVM into ARM code (not Thumb!), at least -+ as of February 2012 */ -+ : "%r4", "%r5", "%r6", "%r8", "%r9", "%r10", "%fp", "%ip", "%lr" -+#endif - ); - return r; - } diff --git a/ghc-7.4-add-support-for-ARM-hard-float-ABI-fixes-5914.patch b/ghc-7.4-add-support-for-ARM-hard-float-ABI-fixes-5914.patch new file mode 100644 index 0000000..a9b897b --- /dev/null +++ b/ghc-7.4-add-support-for-ARM-hard-float-ABI-fixes-5914.patch @@ -0,0 +1,1274 @@ +From 83195ff5ba73779514e3d06b1457d45f849c7fc2 Mon Sep 17 00:00:00 2001 +From: Karel Gardas +Date: Wed, 25 Apr 2012 09:04:50 +0200 +Subject: [PATCH] add support for ARM hard-float ABI (fixes #5914) + +This patch enhances Platform's ArchARM to include ARM ABI value. It also +tweaks configure machinery to detect hard-float ABI and to set it wherever +needed. Finally when hard-float ABI is in use, pass appropriate compiler +option to the LLVM's llc. Fixes #5914. +--- + aclocal.m4 | 2 +- + compiler/main/DriverPipeline.hs | 16 +- + compiler/nativeGen/AsmCodeGen.lhs | 2 +- + compiler/nativeGen/RegAlloc/Graph/TrivColorable.hs | 56 ++-- + compiler/nativeGen/RegAlloc/Linear/FreeRegs.hs | 14 +- + compiler/nativeGen/RegAlloc/Linear/Main.hs | 14 +- + compiler/nativeGen/TargetReg.hs | 70 ++-- + compiler/utils/Platform.hs | 12 +- + config.guess | 482 ++++++++++---------- + configure.ac | 14 + + 10 files changed, 345 insertions(+), 337 deletions(-) + +diff --git a/aclocal.m4 b/aclocal.m4 +index 5652185..c196bdf 100644 +--- a/aclocal.m4 ++++ b/aclocal.m4 +@@ -171,7 +171,7 @@ AC_DEFUN([FPTOOLS_SET_HASKELL_PLATFORM_VARS], + ;; + arm) + GET_ARM_ISA() +- test -z "[$]2" || eval "[$]2=\"ArchARM {armISA = \$ARM_ISA, armISAExt = \$ARM_ISA_EXT}\"" ++ test -z "[$]2" || eval "[$]2=\"ArchARM {armISA = \$ARM_ISA, armISAExt = \$ARM_ISA_EXT, armABI = \$ARM_ABI}\"" + ;; + alpha|mips|mipseb|mipsel|hppa|hppa1_1|ia64|m68k|rs6000|s390|s390x|sparc64|vax) + test -z "[$]2" || eval "[$]2=ArchUnknown" +diff -u ghc-7.4.1.20120508/compiler/main/DriverPipeline.hs.arm ghc-7.4.1.20120508/compiler/main/DriverPipeline.hs +--- ghc-7.4.1.20120508/compiler/main/DriverPipeline.hs.arm 2012-05-15 02:10:41.000000000 +0900 ++++ ghc-7.4.1.20120508/compiler/main/DriverPipeline.hs 2012-05-18 12:19:22.779955285 +0900 +@@ -1366,7 +1366,8 @@ + SysTools.FileOption "" input_fn, + SysTools.Option "-o", SysTools.FileOption "" output_fn] + ++ map SysTools.Option lc_opts +- ++ map SysTools.Option fpOpts) ++ ++ map SysTools.Option fpOpts ++ ++ map SysTools.Option abiOpts) + + return (next_phase, output_fn) + where +@@ -1378,12 +1379,19 @@ + -- while compiling GHC source code. It's probably due to fact that it + -- does not enable VFP by default. Let's do this manually here + fpOpts = case platformArch (targetPlatform dflags) of +- ArchARM ARMv7 ext -> if (elem VFPv3 ext) ++ ArchARM ARMv7 ext _ -> if (elem VFPv3 ext) + then ["-mattr=+v7,+vfp3"] + else if (elem VFPv3D16 ext) + then ["-mattr=+v7,+vfp3,+d16"] + else [] + _ -> [] ++ -- On Ubuntu/Debian with ARM hard float ABI, LLVM's llc still ++ -- compiles into soft-float ABI. We need to explicitly set abi ++ -- to hard ++ abiOpts = case platformArch (targetPlatform dflags) of ++ ArchARM ARMv7 _ HARD -> ["-float-abi=hard"] ++ ArchARM ARMv7 _ _ -> [] ++ _ -> [] + + ----------------------------------------------------------------------------- + -- LlvmMangle phase +@@ -1532,8 +1540,8 @@ + + elfSectionNote :: String + elfSectionNote = case platformArch (targetPlatform dflags) of +- ArchARM _ _ -> "%note" +- _ -> "@note" ++ ArchARM _ _ _ -> "%note" ++ _ -> "@note" + + -- The "link info" is a string representing the parameters of the + -- link. We save this information in the binary, and the next time we +diff --git a/compiler/nativeGen/AsmCodeGen.lhs b/compiler/nativeGen/AsmCodeGen.lhs +index 1ad1242..e976e58 100644 +--- a/compiler/nativeGen/AsmCodeGen.lhs ++++ b/compiler/nativeGen/AsmCodeGen.lhs +@@ -200,7 +200,7 @@ nativeCodeGen dflags h us cmms + ,ncgExpandTop = map SPARC.CodeGen.Expand.expandTop + ,ncgMakeFarBranches = id + } +- ArchARM _ _ -> ++ ArchARM _ _ _ -> + panic "nativeCodeGen: No NCG for ARM" + ArchPPC_64 -> + panic "nativeCodeGen: No NCG for PPC 64" +diff --git a/compiler/nativeGen/RegAlloc/Graph/TrivColorable.hs b/compiler/nativeGen/RegAlloc/Graph/TrivColorable.hs +index 6067f23..6cd3f00 100644 +--- a/compiler/nativeGen/RegAlloc/Graph/TrivColorable.hs ++++ b/compiler/nativeGen/RegAlloc/Graph/TrivColorable.hs +@@ -107,13 +107,13 @@ trivColorable + trivColorable platform virtualRegSqueeze realRegSqueeze RcInteger conflicts exclusions + | let !cALLOCATABLE_REGS_INTEGER + = iUnbox (case platformArch platform of +- ArchX86 -> 3 +- ArchX86_64 -> 5 +- ArchPPC -> 16 +- ArchSPARC -> 14 +- ArchPPC_64 -> panic "trivColorable ArchPPC_64" +- ArchARM _ _ -> panic "trivColorable ArchARM" +- ArchUnknown -> panic "trivColorable ArchUnknown") ++ ArchX86 -> 3 ++ ArchX86_64 -> 5 ++ ArchPPC -> 16 ++ ArchSPARC -> 14 ++ ArchPPC_64 -> panic "trivColorable ArchPPC_64" ++ ArchARM _ _ _ -> panic "trivColorable ArchARM" ++ ArchUnknown -> panic "trivColorable ArchUnknown") + , count2 <- accSqueeze (_ILIT(0)) cALLOCATABLE_REGS_INTEGER + (virtualRegSqueeze RcInteger) + conflicts +@@ -127,13 +127,13 @@ trivColorable platform virtualRegSqueeze realRegSqueeze RcInteger conflicts excl + trivColorable platform virtualRegSqueeze realRegSqueeze RcFloat conflicts exclusions + | let !cALLOCATABLE_REGS_FLOAT + = iUnbox (case platformArch platform of +- ArchX86 -> 0 +- ArchX86_64 -> 0 +- ArchPPC -> 0 +- ArchSPARC -> 22 +- ArchPPC_64 -> panic "trivColorable ArchPPC_64" +- ArchARM _ _ -> panic "trivColorable ArchARM" +- ArchUnknown -> panic "trivColorable ArchUnknown") ++ ArchX86 -> 0 ++ ArchX86_64 -> 0 ++ ArchPPC -> 0 ++ ArchSPARC -> 22 ++ ArchPPC_64 -> panic "trivColorable ArchPPC_64" ++ ArchARM _ _ _ -> panic "trivColorable ArchARM" ++ ArchUnknown -> panic "trivColorable ArchUnknown") + , count2 <- accSqueeze (_ILIT(0)) cALLOCATABLE_REGS_FLOAT + (virtualRegSqueeze RcFloat) + conflicts +@@ -147,13 +147,13 @@ trivColorable platform virtualRegSqueeze realRegSqueeze RcFloat conflicts exclus + trivColorable platform virtualRegSqueeze realRegSqueeze RcDouble conflicts exclusions + | let !cALLOCATABLE_REGS_DOUBLE + = iUnbox (case platformArch platform of +- ArchX86 -> 6 +- ArchX86_64 -> 0 +- ArchPPC -> 26 +- ArchSPARC -> 11 +- ArchPPC_64 -> panic "trivColorable ArchPPC_64" +- ArchARM _ _ -> panic "trivColorable ArchARM" +- ArchUnknown -> panic "trivColorable ArchUnknown") ++ ArchX86 -> 6 ++ ArchX86_64 -> 0 ++ ArchPPC -> 26 ++ ArchSPARC -> 11 ++ ArchPPC_64 -> panic "trivColorable ArchPPC_64" ++ ArchARM _ _ _ -> panic "trivColorable ArchARM" ++ ArchUnknown -> panic "trivColorable ArchUnknown") + , count2 <- accSqueeze (_ILIT(0)) cALLOCATABLE_REGS_DOUBLE + (virtualRegSqueeze RcDouble) + conflicts +@@ -167,13 +167,13 @@ trivColorable platform virtualRegSqueeze realRegSqueeze RcDouble conflicts exclu + trivColorable platform virtualRegSqueeze realRegSqueeze RcDoubleSSE conflicts exclusions + | let !cALLOCATABLE_REGS_SSE + = iUnbox (case platformArch platform of +- ArchX86 -> 8 +- ArchX86_64 -> 10 +- ArchPPC -> 0 +- ArchSPARC -> 0 +- ArchPPC_64 -> panic "trivColorable ArchPPC_64" +- ArchARM _ _ -> panic "trivColorable ArchARM" +- ArchUnknown -> panic "trivColorable ArchUnknown") ++ ArchX86 -> 8 ++ ArchX86_64 -> 10 ++ ArchPPC -> 0 ++ ArchSPARC -> 0 ++ ArchPPC_64 -> panic "trivColorable ArchPPC_64" ++ ArchARM _ _ _ -> panic "trivColorable ArchARM" ++ ArchUnknown -> panic "trivColorable ArchUnknown") + , count2 <- accSqueeze (_ILIT(0)) cALLOCATABLE_REGS_SSE + (virtualRegSqueeze RcDoubleSSE) + conflicts +diff --git a/compiler/nativeGen/RegAlloc/Linear/FreeRegs.hs b/compiler/nativeGen/RegAlloc/Linear/FreeRegs.hs +index 6fbbd04..fd1fd27 100644 +--- a/compiler/nativeGen/RegAlloc/Linear/FreeRegs.hs ++++ b/compiler/nativeGen/RegAlloc/Linear/FreeRegs.hs +@@ -68,11 +68,11 @@ instance FR SPARC.FreeRegs where + maxSpillSlots :: Platform -> Int + maxSpillSlots platform + = case platformArch platform of +- ArchX86 -> X86.Instr.maxSpillSlots True -- 32bit +- ArchX86_64 -> X86.Instr.maxSpillSlots False -- not 32bit +- ArchPPC -> PPC.Instr.maxSpillSlots +- ArchSPARC -> SPARC.Instr.maxSpillSlots +- ArchARM _ _ -> panic "maxSpillSlots ArchARM" +- ArchPPC_64 -> panic "maxSpillSlots ArchPPC_64" +- ArchUnknown -> panic "maxSpillSlots ArchUnknown" ++ ArchX86 -> X86.Instr.maxSpillSlots True -- 32bit ++ ArchX86_64 -> X86.Instr.maxSpillSlots False -- not 32bit ++ ArchPPC -> PPC.Instr.maxSpillSlots ++ ArchSPARC -> SPARC.Instr.maxSpillSlots ++ ArchARM _ _ _ -> panic "maxSpillSlots ArchARM" ++ ArchPPC_64 -> panic "maxSpillSlots ArchPPC_64" ++ ArchUnknown -> panic "maxSpillSlots ArchUnknown" + +diff --git a/compiler/nativeGen/RegAlloc/Linear/Main.hs b/compiler/nativeGen/RegAlloc/Linear/Main.hs +index fc0bde4..64b0f68 100644 +--- a/compiler/nativeGen/RegAlloc/Linear/Main.hs ++++ b/compiler/nativeGen/RegAlloc/Linear/Main.hs +@@ -180,13 +180,13 @@ linearRegAlloc + linearRegAlloc dflags first_id block_live sccs + = let platform = targetPlatform dflags + in case platformArch platform of +- ArchX86 -> linearRegAlloc' platform (frInitFreeRegs :: X86.FreeRegs) first_id block_live sccs +- ArchX86_64 -> linearRegAlloc' platform (frInitFreeRegs :: X86.FreeRegs) first_id block_live sccs +- ArchSPARC -> linearRegAlloc' platform (frInitFreeRegs :: SPARC.FreeRegs) first_id block_live sccs +- ArchPPC -> linearRegAlloc' platform (frInitFreeRegs :: PPC.FreeRegs) first_id block_live sccs +- ArchARM _ _ -> panic "linearRegAlloc ArchARM" +- ArchPPC_64 -> panic "linearRegAlloc ArchPPC_64" +- ArchUnknown -> panic "linearRegAlloc ArchUnknown" ++ ArchX86 -> linearRegAlloc' platform (frInitFreeRegs :: X86.FreeRegs) first_id block_live sccs ++ ArchX86_64 -> linearRegAlloc' platform (frInitFreeRegs :: X86.FreeRegs) first_id block_live sccs ++ ArchSPARC -> linearRegAlloc' platform (frInitFreeRegs :: SPARC.FreeRegs) first_id block_live sccs ++ ArchPPC -> linearRegAlloc' platform (frInitFreeRegs :: PPC.FreeRegs) first_id block_live sccs ++ ArchARM _ _ _ -> panic "linearRegAlloc ArchARM" ++ ArchPPC_64 -> panic "linearRegAlloc ArchPPC_64" ++ ArchUnknown -> panic "linearRegAlloc ArchUnknown" + + linearRegAlloc' + :: (FR freeRegs, PlatformOutputable instr, Instruction instr) +diff --git a/compiler/nativeGen/TargetReg.hs b/compiler/nativeGen/TargetReg.hs +index cbc4c17..13293de 100644 +--- a/compiler/nativeGen/TargetReg.hs ++++ b/compiler/nativeGen/TargetReg.hs +@@ -50,35 +50,35 @@ import qualified SPARC.Regs as SPARC + targetVirtualRegSqueeze :: Platform -> RegClass -> VirtualReg -> FastInt + targetVirtualRegSqueeze platform + = case platformArch platform of +- ArchX86 -> X86.virtualRegSqueeze +- ArchX86_64 -> X86.virtualRegSqueeze +- ArchPPC -> PPC.virtualRegSqueeze +- ArchSPARC -> SPARC.virtualRegSqueeze +- ArchPPC_64 -> panic "targetVirtualRegSqueeze ArchPPC_64" +- ArchARM _ _ -> panic "targetVirtualRegSqueeze ArchARM" +- ArchUnknown -> panic "targetVirtualRegSqueeze ArchUnknown" ++ ArchX86 -> X86.virtualRegSqueeze ++ ArchX86_64 -> X86.virtualRegSqueeze ++ ArchPPC -> PPC.virtualRegSqueeze ++ ArchSPARC -> SPARC.virtualRegSqueeze ++ ArchPPC_64 -> panic "targetVirtualRegSqueeze ArchPPC_64" ++ ArchARM _ _ _ -> panic "targetVirtualRegSqueeze ArchARM" ++ ArchUnknown -> panic "targetVirtualRegSqueeze ArchUnknown" + + targetRealRegSqueeze :: Platform -> RegClass -> RealReg -> FastInt + targetRealRegSqueeze platform + = case platformArch platform of +- ArchX86 -> X86.realRegSqueeze +- ArchX86_64 -> X86.realRegSqueeze +- ArchPPC -> PPC.realRegSqueeze +- ArchSPARC -> SPARC.realRegSqueeze +- ArchPPC_64 -> panic "targetRealRegSqueeze ArchPPC_64" +- ArchARM _ _ -> panic "targetRealRegSqueeze ArchARM" +- ArchUnknown -> panic "targetRealRegSqueeze ArchUnknown" ++ ArchX86 -> X86.realRegSqueeze ++ ArchX86_64 -> X86.realRegSqueeze ++ ArchPPC -> PPC.realRegSqueeze ++ ArchSPARC -> SPARC.realRegSqueeze ++ ArchPPC_64 -> panic "targetRealRegSqueeze ArchPPC_64" ++ ArchARM _ _ _ -> panic "targetRealRegSqueeze ArchARM" ++ ArchUnknown -> panic "targetRealRegSqueeze ArchUnknown" + + targetClassOfRealReg :: Platform -> RealReg -> RegClass + targetClassOfRealReg platform + = case platformArch platform of +- ArchX86 -> X86.classOfRealReg +- ArchX86_64 -> X86.classOfRealReg +- ArchPPC -> PPC.classOfRealReg +- ArchSPARC -> SPARC.classOfRealReg +- ArchPPC_64 -> panic "targetClassOfRealReg ArchPPC_64" +- ArchARM _ _ -> panic "targetClassOfRealReg ArchARM" +- ArchUnknown -> panic "targetClassOfRealReg ArchUnknown" ++ ArchX86 -> X86.classOfRealReg ++ ArchX86_64 -> X86.classOfRealReg ++ ArchPPC -> PPC.classOfRealReg ++ ArchSPARC -> SPARC.classOfRealReg ++ ArchPPC_64 -> panic "targetClassOfRealReg ArchPPC_64" ++ ArchARM _ _ _ -> panic "targetClassOfRealReg ArchARM" ++ ArchUnknown -> panic "targetClassOfRealReg ArchUnknown" + + -- TODO: This should look at targetPlatform too + targetWordSize :: Size +@@ -87,24 +87,24 @@ targetWordSize = intSize wordWidth + targetMkVirtualReg :: Platform -> Unique -> Size -> VirtualReg + targetMkVirtualReg platform + = case platformArch platform of +- ArchX86 -> X86.mkVirtualReg +- ArchX86_64 -> X86.mkVirtualReg +- ArchPPC -> PPC.mkVirtualReg +- ArchSPARC -> SPARC.mkVirtualReg +- ArchPPC_64 -> panic "targetMkVirtualReg ArchPPC_64" +- ArchARM _ _ -> panic "targetMkVirtualReg ArchARM" +- ArchUnknown -> panic "targetMkVirtualReg ArchUnknown" ++ ArchX86 -> X86.mkVirtualReg ++ ArchX86_64 -> X86.mkVirtualReg ++ ArchPPC -> PPC.mkVirtualReg ++ ArchSPARC -> SPARC.mkVirtualReg ++ ArchPPC_64 -> panic "targetMkVirtualReg ArchPPC_64" ++ ArchARM _ _ _ -> panic "targetMkVirtualReg ArchARM" ++ ArchUnknown -> panic "targetMkVirtualReg ArchUnknown" + + targetRegDotColor :: Platform -> RealReg -> SDoc + targetRegDotColor platform + = case platformArch platform of +- ArchX86 -> X86.regDotColor platform +- ArchX86_64 -> X86.regDotColor platform +- ArchPPC -> PPC.regDotColor +- ArchSPARC -> SPARC.regDotColor +- ArchPPC_64 -> panic "targetRegDotColor ArchPPC_64" +- ArchARM _ _ -> panic "targetRegDotColor ArchARM" +- ArchUnknown -> panic "targetRegDotColor ArchUnknown" ++ ArchX86 -> X86.regDotColor platform ++ ArchX86_64 -> X86.regDotColor platform ++ ArchPPC -> PPC.regDotColor ++ ArchSPARC -> SPARC.regDotColor ++ ArchPPC_64 -> panic "targetRegDotColor ArchPPC_64" ++ ArchARM _ _ _ -> panic "targetRegDotColor ArchARM" ++ ArchUnknown -> panic "targetRegDotColor ArchUnknown" + + + targetClassOfReg :: Platform -> Reg -> RegClass +diff --git a/compiler/utils/Platform.hs b/compiler/utils/Platform.hs +index 47dd779..8252621 100644 +--- a/compiler/utils/Platform.hs ++++ b/compiler/utils/Platform.hs +@@ -7,6 +7,7 @@ module Platform ( + OS(..), + ArmISA(..), + ArmISAExt(..), ++ ArmABI(..), + + target32Bit, + osElfTarget +@@ -41,7 +42,9 @@ data Arch + | ArchSPARC + | ArchARM + { armISA :: ArmISA +- , armISAExt :: [ArmISAExt] } ++ , armISAExt :: [ArmISAExt] ++ , armABI :: ArmABI ++ } + deriving (Read, Show, Eq) + + +@@ -61,7 +64,7 @@ data OS + | OSHaiku + deriving (Read, Show, Eq) + +--- | ARM Instruction Set Architecture and Extensions ++-- | ARM Instruction Set Architecture, Extensions and ABI + -- + data ArmISA + = ARMv5 +@@ -77,6 +80,11 @@ data ArmISAExt + | IWMMX2 + deriving (Read, Show, Eq) + ++data ArmABI ++ = SOFT ++ | SOFTFP ++ | HARD ++ deriving (Read, Show, Eq) + + target32Bit :: Platform -> Bool + target32Bit p = platformWordSize p == 4 +diff --git a/config.guess b/config.guess +index 463a03a..d622a44 100644 +--- a/config.guess ++++ b/config.guess +@@ -1,10 +1,10 @@ + #! /bin/sh + # Attempt to guess a canonical system name. + # Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, +-# 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008 +-# Free Software Foundation, Inc. ++# 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, ++# 2011, 2012 Free Software Foundation, Inc. + +-timestamp='2008-11-15' ++timestamp='2012-02-10' + + # This file is free software; you can redistribute it and/or modify it + # under the terms of the GNU General Public License as published by +@@ -17,9 +17,7 @@ timestamp='2008-11-15' + # General Public License for more details. + # + # You should have received a copy of the GNU General Public License +-# along with this program; if not, write to the Free Software +-# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA +-# 02110-1301, USA. ++# along with this program; if not, see . + # + # As a special exception to the GNU General Public License, if you + # distribute this file as part of a program that contains a +@@ -27,16 +25,16 @@ timestamp='2008-11-15' + # the same distribution terms that you use for the rest of that program. + + +-# Originally written by Per Bothner . +-# Please send patches to . Submit a context +-# diff and a properly formatted ChangeLog entry. ++# Originally written by Per Bothner. Please send patches (context ++# diff format) to and include a ChangeLog ++# entry. + # + # This script attempts to guess a canonical system name similar to + # config.sub. If it succeeds, it prints the system name on stdout, and + # exits with 0. Otherwise, it exits with 1. + # +-# The plan is that this can be called by configure scripts if you +-# don't specify an explicit build system type. ++# You can get the latest version of this script from: ++# http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess;hb=HEAD + + me=`echo "$0" | sed -e 's,.*/,,'` + +@@ -56,8 +54,9 @@ version="\ + GNU config.guess ($timestamp) + + Originally written by Per Bothner. +-Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, +-2002, 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc. ++Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, ++2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012 ++Free Software Foundation, Inc. + + This is free software; see the source for copying conditions. There is NO + warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." +@@ -144,7 +143,7 @@ UNAME_VERSION=`(uname -v) 2>/dev/null` || UNAME_VERSION=unknown + case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in + *:NetBSD:*:*) + # NetBSD (nbsd) targets should (where applicable) match one or +- # more of the tupples: *-*-netbsdelf*, *-*-netbsdaout*, ++ # more of the tuples: *-*-netbsdelf*, *-*-netbsdaout*, + # *-*-netbsdecoff* and *-*-netbsd*. For targets that recently + # switched to ELF, *-*-netbsd* would select the old + # object file format. This provides both forward +@@ -170,7 +169,7 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in + arm*|i386|m68k|ns32k|sh3*|sparc|vax) + eval $set_cc_for_build + if echo __ELF__ | $CC_FOR_BUILD -E - 2>/dev/null \ +- | grep __ELF__ >/dev/null ++ | grep -q __ELF__ + then + # Once all utilities can be ECOFF (netbsdecoff) or a.out (netbsdaout). + # Return netbsd for either. FIX? +@@ -180,7 +179,7 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in + fi + ;; + *) +- os=netbsd ++ os=netbsd + ;; + esac + # The OS release +@@ -223,7 +222,7 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in + UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $3}'` + ;; + *5.*) +- UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $4}'` ++ UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $4}'` + ;; + esac + # According to Compaq, /usr/sbin/psrinfo has been available on +@@ -269,7 +268,10 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in + # A Xn.n version is an unreleased experimental baselevel. + # 1.2 uses "1.2" for uname -r. + echo ${UNAME_MACHINE}-dec-osf`echo ${UNAME_RELEASE} | sed -e 's/^[PVTX]//' | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` +- exit ;; ++ # Reset EXIT trap before exiting to avoid spurious non-zero exit code. ++ exitcode=$? ++ trap '' 0 ++ exit $exitcode ;; + Alpha\ *:Windows_NT*:*) + # How do we know it's Interix rather than the generic POSIX subsystem? + # Should we change UNAME_MACHINE based on the output of uname instead +@@ -295,7 +297,7 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in + echo s390-ibm-zvmoe + exit ;; + *:OS400:*:*) +- echo powerpc-ibm-os400 ++ echo powerpc-ibm-os400 + exit ;; + arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*) + echo arm-acorn-riscix${UNAME_RELEASE} +@@ -324,12 +326,18 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in + case `/usr/bin/uname -p` in + sparc) echo sparc-icl-nx7; exit ;; + esac ;; ++ s390x:SunOS:*:*) ++ echo ${UNAME_MACHINE}-ibm-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` ++ exit ;; + sun4H:SunOS:5.*:*) + echo sparc-hal-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` + exit ;; + sun4*:SunOS:5.*:* | tadpole*:SunOS:5.*:*) + echo sparc-sun-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` + exit ;; ++ i86pc:AuroraUX:5.*:* | i86xen:AuroraUX:5.*:*) ++ echo i386-pc-auroraux${UNAME_RELEASE} ++ exit ;; + i86pc:SunOS:5.*:* | i86xen:SunOS:5.*:*) + eval $set_cc_for_build + SUN_ARCH="i386" +@@ -337,17 +345,7 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in + # Note that the Sun cc does not turn __LP64__ into 1 like gcc does. + # This test works for both compilers. + if [ "$CC_FOR_BUILD" != 'no_compiler_found' ]; then +- # bash is not able to generate correct code here +- # i.e. it leaves \ns there +- # so we need to use /usr/bin/echo to get what we want +- # note that if config.guess is run by /bin/sh then +- # this works as expected even without /usr/bin/echo +- # but the problem is that configure is clever enough +- # to find bash installed and then runs config.guess +- # by bash instead of by /bin/sh +- # It seems that using /usr/bin/echo here is the most +- # portable Solaris fix +- if /usr/bin/echo '\n#ifdef __amd64\nIS_64BIT_ARCH\n#endif' | \ ++ if (echo '#ifdef __amd64'; echo IS_64BIT_ARCH; echo '#endif') | \ + (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | \ + grep IS_64BIT_ARCH >/dev/null + then +@@ -398,23 +396,23 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in + # MiNT. But MiNT is downward compatible to TOS, so this should + # be no problem. + atarist[e]:*MiNT:*:* | atarist[e]:*mint:*:* | atarist[e]:*TOS:*:*) +- echo m68k-atari-mint${UNAME_RELEASE} ++ echo m68k-atari-mint${UNAME_RELEASE} + exit ;; + atari*:*MiNT:*:* | atari*:*mint:*:* | atarist[e]:*TOS:*:*) + echo m68k-atari-mint${UNAME_RELEASE} +- exit ;; ++ exit ;; + *falcon*:*MiNT:*:* | *falcon*:*mint:*:* | *falcon*:*TOS:*:*) +- echo m68k-atari-mint${UNAME_RELEASE} ++ echo m68k-atari-mint${UNAME_RELEASE} + exit ;; + milan*:*MiNT:*:* | milan*:*mint:*:* | *milan*:*TOS:*:*) +- echo m68k-milan-mint${UNAME_RELEASE} +- exit ;; ++ echo m68k-milan-mint${UNAME_RELEASE} ++ exit ;; + hades*:*MiNT:*:* | hades*:*mint:*:* | *hades*:*TOS:*:*) +- echo m68k-hades-mint${UNAME_RELEASE} +- exit ;; ++ echo m68k-hades-mint${UNAME_RELEASE} ++ exit ;; + *:*MiNT:*:* | *:*mint:*:* | *:*TOS:*:*) +- echo m68k-unknown-mint${UNAME_RELEASE} +- exit ;; ++ echo m68k-unknown-mint${UNAME_RELEASE} ++ exit ;; + m68k:machten:*:*) + echo m68k-apple-machten${UNAME_RELEASE} + exit ;; +@@ -484,8 +482,8 @@ EOF + echo m88k-motorola-sysv3 + exit ;; + AViiON:dgux:*:*) +- # DG/UX returns AViiON for all architectures +- UNAME_PROCESSOR=`/usr/bin/uname -p` ++ # DG/UX returns AViiON for all architectures ++ UNAME_PROCESSOR=`/usr/bin/uname -p` + if [ $UNAME_PROCESSOR = mc88100 ] || [ $UNAME_PROCESSOR = mc88110 ] + then + if [ ${TARGET_BINARY_INTERFACE}x = m88kdguxelfx ] || \ +@@ -498,7 +496,7 @@ EOF + else + echo i586-dg-dgux${UNAME_RELEASE} + fi +- exit ;; ++ exit ;; + M88*:DolphinOS:*:*) # DolphinOS (SVR3) + echo m88k-dolphin-sysv3 + exit ;; +@@ -555,7 +553,7 @@ EOF + echo rs6000-ibm-aix3.2 + fi + exit ;; +- *:AIX:*:[456]) ++ *:AIX:*:[4567]) + IBM_CPU_ID=`/usr/sbin/lsdev -C -c processor -S available | sed 1q | awk '{ print $1 }'` + if /usr/sbin/lsattr -El ${IBM_CPU_ID} | grep ' POWER' >/dev/null 2>&1; then + IBM_ARCH=rs6000 +@@ -598,52 +596,52 @@ EOF + 9000/[678][0-9][0-9]) + if [ -x /usr/bin/getconf ]; then + sc_cpu_version=`/usr/bin/getconf SC_CPU_VERSION 2>/dev/null` +- sc_kernel_bits=`/usr/bin/getconf SC_KERNEL_BITS 2>/dev/null` +- case "${sc_cpu_version}" in +- 523) HP_ARCH="hppa1.0" ;; # CPU_PA_RISC1_0 +- 528) HP_ARCH="hppa1.1" ;; # CPU_PA_RISC1_1 +- 532) # CPU_PA_RISC2_0 +- case "${sc_kernel_bits}" in +- 32) HP_ARCH="hppa2.0n" ;; +- 64) HP_ARCH="hppa2.0w" ;; ++ sc_kernel_bits=`/usr/bin/getconf SC_KERNEL_BITS 2>/dev/null` ++ case "${sc_cpu_version}" in ++ 523) HP_ARCH="hppa1.0" ;; # CPU_PA_RISC1_0 ++ 528) HP_ARCH="hppa1.1" ;; # CPU_PA_RISC1_1 ++ 532) # CPU_PA_RISC2_0 ++ case "${sc_kernel_bits}" in ++ 32) HP_ARCH="hppa2.0n" ;; ++ 64) HP_ARCH="hppa2.0w" ;; + '') HP_ARCH="hppa2.0" ;; # HP-UX 10.20 +- esac ;; +- esac ++ esac ;; ++ esac + fi + if [ "${HP_ARCH}" = "" ]; then + eval $set_cc_for_build +- sed 's/^ //' << EOF >$dummy.c ++ sed 's/^ //' << EOF >$dummy.c + +- #define _HPUX_SOURCE +- #include +- #include ++ #define _HPUX_SOURCE ++ #include ++ #include + +- int main () +- { +- #if defined(_SC_KERNEL_BITS) +- long bits = sysconf(_SC_KERNEL_BITS); +- #endif +- long cpu = sysconf (_SC_CPU_VERSION); ++ int main () ++ { ++ #if defined(_SC_KERNEL_BITS) ++ long bits = sysconf(_SC_KERNEL_BITS); ++ #endif ++ long cpu = sysconf (_SC_CPU_VERSION); + +- switch (cpu) +- { +- case CPU_PA_RISC1_0: puts ("hppa1.0"); break; +- case CPU_PA_RISC1_1: puts ("hppa1.1"); break; +- case CPU_PA_RISC2_0: +- #if defined(_SC_KERNEL_BITS) +- switch (bits) +- { +- case 64: puts ("hppa2.0w"); break; +- case 32: puts ("hppa2.0n"); break; +- default: puts ("hppa2.0"); break; +- } break; +- #else /* !defined(_SC_KERNEL_BITS) */ +- puts ("hppa2.0"); break; +- #endif +- default: puts ("hppa1.0"); break; +- } +- exit (0); +- } ++ switch (cpu) ++ { ++ case CPU_PA_RISC1_0: puts ("hppa1.0"); break; ++ case CPU_PA_RISC1_1: puts ("hppa1.1"); break; ++ case CPU_PA_RISC2_0: ++ #if defined(_SC_KERNEL_BITS) ++ switch (bits) ++ { ++ case 64: puts ("hppa2.0w"); break; ++ case 32: puts ("hppa2.0n"); break; ++ default: puts ("hppa2.0"); break; ++ } break; ++ #else /* !defined(_SC_KERNEL_BITS) */ ++ puts ("hppa2.0"); break; ++ #endif ++ default: puts ("hppa1.0"); break; ++ } ++ exit (0); ++ } + EOF + (CCOPTS= $CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null) && HP_ARCH=`$dummy` + test -z "$HP_ARCH" && HP_ARCH=hppa +@@ -663,7 +661,7 @@ EOF + # => hppa64-hp-hpux11.23 + + if echo __LP64__ | (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | +- grep __LP64__ >/dev/null ++ grep -q __LP64__ + then + HP_ARCH="hppa2.0w" + else +@@ -734,22 +732,22 @@ EOF + exit ;; + C1*:ConvexOS:*:* | convex:ConvexOS:C1*:*) + echo c1-convex-bsd +- exit ;; ++ exit ;; + C2*:ConvexOS:*:* | convex:ConvexOS:C2*:*) + if getsysinfo -f scalar_acc + then echo c32-convex-bsd + else echo c2-convex-bsd + fi +- exit ;; ++ exit ;; + C34*:ConvexOS:*:* | convex:ConvexOS:C34*:*) + echo c34-convex-bsd +- exit ;; ++ exit ;; + C38*:ConvexOS:*:* | convex:ConvexOS:C38*:*) + echo c38-convex-bsd +- exit ;; ++ exit ;; + C4*:ConvexOS:*:* | convex:ConvexOS:C4*:*) + echo c4-convex-bsd +- exit ;; ++ exit ;; + CRAY*Y-MP:*:*:*) + echo ymp-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' + exit ;; +@@ -773,14 +771,14 @@ EOF + exit ;; + F30[01]:UNIX_System_V:*:* | F700:UNIX_System_V:*:*) + FUJITSU_PROC=`uname -m | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` +- FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'` +- FUJITSU_REL=`echo ${UNAME_RELEASE} | sed -e 's/ /_/'` +- echo "${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" +- exit ;; ++ FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'` ++ FUJITSU_REL=`echo ${UNAME_RELEASE} | sed -e 's/ /_/'` ++ echo "${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" ++ exit ;; + 5000:UNIX_System_V:4.*:*) +- FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'` +- FUJITSU_REL=`echo ${UNAME_RELEASE} | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/ /_/'` +- echo "sparc-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" ++ FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'` ++ FUJITSU_REL=`echo ${UNAME_RELEASE} | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/ /_/'` ++ echo "sparc-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" + exit ;; + i*86:BSD/386:*:* | i*86:BSD/OS:*:* | *:Ascend\ Embedded/OS:*:*) + echo ${UNAME_MACHINE}-pc-bsdi${UNAME_RELEASE} +@@ -792,13 +790,12 @@ EOF + echo ${UNAME_MACHINE}-unknown-bsdi${UNAME_RELEASE} + exit ;; + *:FreeBSD:*:*) +- case ${UNAME_MACHINE} in +- pc98) +- echo i386-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;; ++ UNAME_PROCESSOR=`/usr/bin/uname -p` ++ case ${UNAME_PROCESSOR} in + amd64) + echo x86_64-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;; + *) +- echo ${UNAME_MACHINE}-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;; ++ echo ${UNAME_PROCESSOR}-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;; + esac + exit ;; + i*:CYGWIN*:*) +@@ -807,19 +804,22 @@ EOF + *:MINGW*:*) + echo ${UNAME_MACHINE}-pc-mingw32 + exit ;; ++ i*:MSYS*:*) ++ echo ${UNAME_MACHINE}-pc-msys ++ exit ;; + i*:windows32*:*) +- # uname -m includes "-pc" on this system. +- echo ${UNAME_MACHINE}-mingw32 ++ # uname -m includes "-pc" on this system. ++ echo ${UNAME_MACHINE}-mingw32 + exit ;; + i*:PW*:*) + echo ${UNAME_MACHINE}-pc-pw32 + exit ;; +- *:Interix*:[3456]*) +- case ${UNAME_MACHINE} in ++ *:Interix*:*) ++ case ${UNAME_MACHINE} in + x86) + echo i586-pc-interix${UNAME_RELEASE} + exit ;; +- EM64T | authenticamd | genuineintel) ++ authenticamd | genuineintel | EM64T) + echo x86_64-unknown-interix${UNAME_RELEASE} + exit ;; + IA64) +@@ -829,6 +829,9 @@ EOF + [345]86:Windows_95:* | [345]86:Windows_98:* | [345]86:Windows_NT:*) + echo i${UNAME_MACHINE}-pc-mks + exit ;; ++ 8664:Windows_NT:*) ++ echo x86_64-pc-mks ++ exit ;; + i*:Windows_NT*:* | Pentium*:Windows_NT*:*) + # How do we know it's Interix rather than the generic POSIX subsystem? + # It also conflicts with pre-2.0 versions of AT&T UWIN. Should we +@@ -858,6 +861,27 @@ EOF + i*86:Minix:*:*) + echo ${UNAME_MACHINE}-pc-minix + exit ;; ++ aarch64:Linux:*:*) ++ echo ${UNAME_MACHINE}-unknown-linux-gnu ++ exit ;; ++ aarch64_be:Linux:*:*) ++ UNAME_MACHINE=aarch64_be ++ echo ${UNAME_MACHINE}-unknown-linux-gnu ++ exit ;; ++ alpha:Linux:*:*) ++ case `sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' < /proc/cpuinfo` in ++ EV5) UNAME_MACHINE=alphaev5 ;; ++ EV56) UNAME_MACHINE=alphaev56 ;; ++ PCA56) UNAME_MACHINE=alphapca56 ;; ++ PCA57) UNAME_MACHINE=alphapca56 ;; ++ EV6) UNAME_MACHINE=alphaev6 ;; ++ EV67) UNAME_MACHINE=alphaev67 ;; ++ EV68*) UNAME_MACHINE=alphaev68 ;; ++ esac ++ objdump --private-headers /bin/sh | grep -q ld.so.1 ++ if test "$?" = 0 ; then LIBC="libc1" ; else LIBC="" ; fi ++ echo ${UNAME_MACHINE}-unknown-linux-gnu${LIBC} ++ exit ;; + arm*:Linux:*:*) + eval $set_cc_for_build + if echo __ARM_EABI__ | $CC_FOR_BUILD -E - 2>/dev/null \ +@@ -865,20 +889,40 @@ EOF + then + echo ${UNAME_MACHINE}-unknown-linux-gnu + else +- echo ${UNAME_MACHINE}-unknown-linux-gnueabi ++ if echo __ARM_PCS_VFP | $CC_FOR_BUILD -E - 2>/dev/null \ ++ | grep -q __ARM_PCS_VFP ++ then ++ echo ${UNAME_MACHINE}-unknown-linux-gnueabi ++ else ++ echo ${UNAME_MACHINE}-unknown-linux-gnueabihf ++ fi + fi + exit ;; + avr32*:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-gnu + exit ;; + cris:Linux:*:*) +- echo cris-axis-linux-gnu ++ echo ${UNAME_MACHINE}-axis-linux-gnu + exit ;; + crisv32:Linux:*:*) +- echo crisv32-axis-linux-gnu ++ echo ${UNAME_MACHINE}-axis-linux-gnu + exit ;; + frv:Linux:*:*) +- echo frv-unknown-linux-gnu ++ echo ${UNAME_MACHINE}-unknown-linux-gnu ++ exit ;; ++ hexagon:Linux:*:*) ++ echo ${UNAME_MACHINE}-unknown-linux-gnu ++ exit ;; ++ i*86:Linux:*:*) ++ LIBC=gnu ++ eval $set_cc_for_build ++ sed 's/^ //' << EOF >$dummy.c ++ #ifdef __dietlibc__ ++ LIBC=dietlibc ++ #endif ++EOF ++ eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep '^LIBC'` ++ echo "${UNAME_MACHINE}-pc-linux-${LIBC}" + exit ;; + ia64:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-gnu +@@ -889,78 +933,34 @@ EOF + m68*:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-gnu + exit ;; +- mips:Linux:*:*) +- eval $set_cc_for_build +- sed 's/^ //' << EOF >$dummy.c +- #undef CPU +- #undef mips +- #undef mipsel +- #if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL) +- CPU=mipsel +- #else +- #if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB) +- CPU=mips +- #else +- CPU= +- #endif +- #endif +-EOF +- eval "`$CC_FOR_BUILD -E $dummy.c 2>/dev/null | sed -n ' +- /^CPU/{ +- s: ::g +- p +- }'`" +- test x"${CPU}" != x && { echo "${CPU}-unknown-linux-gnu"; exit; } +- ;; +- mips64:Linux:*:*) ++ mips:Linux:*:* | mips64:Linux:*:*) + eval $set_cc_for_build + sed 's/^ //' << EOF >$dummy.c + #undef CPU +- #undef mips64 +- #undef mips64el ++ #undef ${UNAME_MACHINE} ++ #undef ${UNAME_MACHINE}el + #if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL) +- CPU=mips64el ++ CPU=${UNAME_MACHINE}el + #else + #if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB) +- CPU=mips64 ++ CPU=${UNAME_MACHINE} + #else + CPU= + #endif + #endif + EOF +- eval "`$CC_FOR_BUILD -E $dummy.c 2>/dev/null | sed -n ' +- /^CPU/{ +- s: ::g +- p +- }'`" ++ eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep '^CPU'` + test x"${CPU}" != x && { echo "${CPU}-unknown-linux-gnu"; exit; } + ;; + or32:Linux:*:*) +- echo or32-unknown-linux-gnu +- exit ;; +- ppc:Linux:*:*) +- echo powerpc-unknown-linux-gnu +- exit ;; +- ppc64:Linux:*:*) +- echo powerpc64-unknown-linux-gnu +- exit ;; +- alpha:Linux:*:*) +- case `sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' < /proc/cpuinfo` in +- EV5) UNAME_MACHINE=alphaev5 ;; +- EV56) UNAME_MACHINE=alphaev56 ;; +- PCA56) UNAME_MACHINE=alphapca56 ;; +- PCA57) UNAME_MACHINE=alphapca56 ;; +- EV6) UNAME_MACHINE=alphaev6 ;; +- EV67) UNAME_MACHINE=alphaev67 ;; +- EV68*) UNAME_MACHINE=alphaev68 ;; +- esac +- objdump --private-headers /bin/sh | grep ld.so.1 >/dev/null +- if test "$?" = 0 ; then LIBC="libc1" ; else LIBC="" ; fi +- echo ${UNAME_MACHINE}-unknown-linux-gnu${LIBC} ++ echo ${UNAME_MACHINE}-unknown-linux-gnu + exit ;; + padre:Linux:*:*) + echo sparc-unknown-linux-gnu + exit ;; ++ parisc64:Linux:*:* | hppa64:Linux:*:*) ++ echo hppa64-unknown-linux-gnu ++ exit ;; + parisc:Linux:*:* | hppa:Linux:*:*) + # Look for CPU level + case `grep '^cpu[^a-z]*:' /proc/cpuinfo 2>/dev/null | cut -d' ' -f2` in +@@ -969,14 +969,17 @@ EOF + *) echo hppa-unknown-linux-gnu ;; + esac + exit ;; +- parisc64:Linux:*:* | hppa64:Linux:*:*) +- echo hppa64-unknown-linux-gnu ++ ppc64:Linux:*:*) ++ echo powerpc64-unknown-linux-gnu ++ exit ;; ++ ppc:Linux:*:*) ++ echo powerpc-unknown-linux-gnu + exit ;; + s390:Linux:*:* | s390x:Linux:*:*) + echo ${UNAME_MACHINE}-ibm-linux + exit ;; + sh64*:Linux:*:*) +- echo ${UNAME_MACHINE}-unknown-linux-gnu ++ echo ${UNAME_MACHINE}-unknown-linux-gnu + exit ;; + sh*:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-gnu +@@ -984,75 +987,18 @@ EOF + sparc:Linux:*:* | sparc64:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-gnu + exit ;; ++ tile*:Linux:*:*) ++ echo ${UNAME_MACHINE}-unknown-linux-gnu ++ exit ;; + vax:Linux:*:*) + echo ${UNAME_MACHINE}-dec-linux-gnu + exit ;; + x86_64:Linux:*:*) +- echo x86_64-unknown-linux-gnu ++ echo ${UNAME_MACHINE}-unknown-linux-gnu + exit ;; + xtensa*:Linux:*:*) +- echo ${UNAME_MACHINE}-unknown-linux-gnu ++ echo ${UNAME_MACHINE}-unknown-linux-gnu + exit ;; +- i*86:Linux:*:*) +- # The BFD linker knows what the default object file format is, so +- # first see if it will tell us. cd to the root directory to prevent +- # problems with other programs or directories called `ld' in the path. +- # Set LC_ALL=C to ensure ld outputs messages in English. +- ld_supported_targets=`cd /; LC_ALL=C ld --help 2>&1 \ +- | sed -ne '/supported targets:/!d +- s/[ ][ ]*/ /g +- s/.*supported targets: *// +- s/ .*// +- p'` +- case "$ld_supported_targets" in +- elf32-i386) +- TENTATIVE="${UNAME_MACHINE}-pc-linux-gnu" +- ;; +- a.out-i386-linux) +- echo "${UNAME_MACHINE}-pc-linux-gnuaout" +- exit ;; +- "") +- # Either a pre-BFD a.out linker (linux-gnuoldld) or +- # one that does not give us useful --help. +- echo "${UNAME_MACHINE}-pc-linux-gnuoldld" +- exit ;; +- esac +- # Determine whether the default compiler is a.out or elf +- eval $set_cc_for_build +- sed 's/^ //' << EOF >$dummy.c +- #include +- #ifdef __ELF__ +- # ifdef __GLIBC__ +- # if __GLIBC__ >= 2 +- LIBC=gnu +- # else +- LIBC=gnulibc1 +- # endif +- # else +- LIBC=gnulibc1 +- # endif +- #else +- #if defined(__INTEL_COMPILER) || defined(__PGI) || defined(__SUNPRO_C) || defined(__SUNPRO_CC) +- LIBC=gnu +- #else +- LIBC=gnuaout +- #endif +- #endif +- #ifdef __dietlibc__ +- LIBC=dietlibc +- #endif +-EOF +- eval "`$CC_FOR_BUILD -E $dummy.c 2>/dev/null | sed -n ' +- /^LIBC/{ +- s: ::g +- p +- }'`" +- test x"${LIBC}" != x && { +- echo "${UNAME_MACHINE}-pc-linux-${LIBC}" +- exit +- } +- test x"${TENTATIVE}" != x && { echo "${TENTATIVE}"; exit; } +- ;; + i*86:DYNIX/ptx:4*:*) + # ptx 4.0 does uname -s correctly, with DYNIX/ptx in there. + # earlier versions are messed up and put the nodename in both +@@ -1060,11 +1006,11 @@ EOF + echo i386-sequent-sysv4 + exit ;; + i*86:UNIX_SV:4.2MP:2.*) +- # Unixware is an offshoot of SVR4, but it has its own version +- # number series starting with 2... +- # I am not positive that other SVR4 systems won't match this, ++ # Unixware is an offshoot of SVR4, but it has its own version ++ # number series starting with 2... ++ # I am not positive that other SVR4 systems won't match this, + # I just have to hope. -- rms. +- # Use sysv4.2uw... so that sysv4* matches it. ++ # Use sysv4.2uw... so that sysv4* matches it. + echo ${UNAME_MACHINE}-pc-sysv4.2uw${UNAME_VERSION} + exit ;; + i*86:OS/2:*:*) +@@ -1081,7 +1027,7 @@ EOF + i*86:syllable:*:*) + echo ${UNAME_MACHINE}-pc-syllable + exit ;; +- i*86:LynxOS:2.*:* | i*86:LynxOS:3.[01]*:* | i*86:LynxOS:4.0*:*) ++ i*86:LynxOS:2.*:* | i*86:LynxOS:3.[01]*:* | i*86:LynxOS:4.[02]*:*) + echo i386-unknown-lynxos${UNAME_RELEASE} + exit ;; + i*86:*DOS:*:*) +@@ -1096,7 +1042,7 @@ EOF + fi + exit ;; + i*86:*:5:[678]*) +- # UnixWare 7.x, OpenUNIX and OpenServer 6. ++ # UnixWare 7.x, OpenUNIX and OpenServer 6. + case `/bin/uname -X | grep "^Machine"` in + *486*) UNAME_MACHINE=i486 ;; + *Pentium) UNAME_MACHINE=i586 ;; +@@ -1124,10 +1070,13 @@ EOF + exit ;; + pc:*:*:*) + # Left here for compatibility: +- # uname -m prints for DJGPP always 'pc', but it prints nothing about +- # the processor, so we play safe by assuming i386. +- echo i386-pc-msdosdjgpp +- exit ;; ++ # uname -m prints for DJGPP always 'pc', but it prints nothing about ++ # the processor, so we play safe by assuming i586. ++ # Note: whatever this is, it MUST be the same as what config.sub ++ # prints for the "djgpp" host, or else GDB configury will decide that ++ # this is a cross-build. ++ echo i586-pc-msdosdjgpp ++ exit ;; + Intel:Mach:3*:*) + echo i386-pc-mach3 + exit ;; +@@ -1162,8 +1111,18 @@ EOF + /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \ + && { echo i586-ncr-sysv4.3${OS_REL}; exit; } ;; + 3[34]??:*:4.0:* | 3[34]??,*:*:4.0:*) +- /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ +- && { echo i486-ncr-sysv4; exit; } ;; ++ /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ ++ && { echo i486-ncr-sysv4; exit; } ;; ++ NCR*:*:4.2:* | MPRAS*:*:4.2:*) ++ OS_REL='.3' ++ test -r /etc/.relid \ ++ && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid` ++ /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ ++ && { echo i486-ncr-sysv4.3${OS_REL}; exit; } ++ /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \ ++ && { echo i586-ncr-sysv4.3${OS_REL}; exit; } ++ /bin/uname -p 2>/dev/null | /bin/grep pteron >/dev/null \ ++ && { echo i586-ncr-sysv4.3${OS_REL}; exit; } ;; + m68*:LynxOS:2.*:* | m68*:LynxOS:3.0*:*) + echo m68k-unknown-lynxos${UNAME_RELEASE} + exit ;; +@@ -1176,7 +1135,7 @@ EOF + rs6000:LynxOS:2.*:*) + echo rs6000-unknown-lynxos${UNAME_RELEASE} + exit ;; +- PowerPC:LynxOS:2.*:* | PowerPC:LynxOS:3.[01]*:* | PowerPC:LynxOS:4.0*:*) ++ PowerPC:LynxOS:2.*:* | PowerPC:LynxOS:3.[01]*:* | PowerPC:LynxOS:4.[02]*:*) + echo powerpc-unknown-lynxos${UNAME_RELEASE} + exit ;; + SM[BE]S:UNIX_SV:*:*) +@@ -1196,10 +1155,10 @@ EOF + echo ns32k-sni-sysv + fi + exit ;; +- PENTIUM:*:4.0*:*) # Unisys `ClearPath HMP IX 4000' SVR4/MP effort +- # says +- echo i586-unisys-sysv4 +- exit ;; ++ PENTIUM:*:4.0*:*) # Unisys `ClearPath HMP IX 4000' SVR4/MP effort ++ # says ++ echo i586-unisys-sysv4 ++ exit ;; + *:UNIX_System_V:4*:FTX*) + # From Gerald Hewes . + # How about differentiating between stratus architectures? -djm +@@ -1225,11 +1184,11 @@ EOF + exit ;; + R[34]000:*System_V*:*:* | R4000:UNIX_SYSV:*:* | R*000:UNIX_SV:*:*) + if [ -d /usr/nec ]; then +- echo mips-nec-sysv${UNAME_RELEASE} ++ echo mips-nec-sysv${UNAME_RELEASE} + else +- echo mips-unknown-sysv${UNAME_RELEASE} ++ echo mips-unknown-sysv${UNAME_RELEASE} + fi +- exit ;; ++ exit ;; + BeBox:BeOS:*:*) # BeOS running on hardware made by Be, PPC only. + echo powerpc-be-beos + exit ;; +@@ -1269,6 +1228,16 @@ EOF + *:Darwin:*:*) + UNAME_PROCESSOR=`uname -p` || UNAME_PROCESSOR=unknown + case $UNAME_PROCESSOR in ++ i386) ++ eval $set_cc_for_build ++ if [ "$CC_FOR_BUILD" != 'no_compiler_found' ]; then ++ if (echo '#ifdef __LP64__'; echo IS_64BIT_ARCH; echo '#endif') | \ ++ (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | \ ++ grep IS_64BIT_ARCH >/dev/null ++ then ++ UNAME_PROCESSOR="x86_64" ++ fi ++ fi ;; + unknown) UNAME_PROCESSOR=powerpc ;; + esac + echo ${UNAME_PROCESSOR}-apple-darwin${UNAME_RELEASE} +@@ -1284,6 +1253,9 @@ EOF + *:QNX:*:4*) + echo i386-pc-qnx + exit ;; ++ NEO-?:NONSTOP_KERNEL:*:*) ++ echo neo-tandem-nsk${UNAME_RELEASE} ++ exit ;; + NSE-?:NONSTOP_KERNEL:*:*) + echo nse-tandem-nsk${UNAME_RELEASE} + exit ;; +@@ -1329,13 +1301,13 @@ EOF + echo pdp10-unknown-its + exit ;; + SEI:*:*:SEIUX) +- echo mips-sei-seiux${UNAME_RELEASE} ++ echo mips-sei-seiux${UNAME_RELEASE} + exit ;; + *:DragonFly:*:*) + echo ${UNAME_MACHINE}-unknown-dragonfly`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` + exit ;; + *:*VMS:*:*) +- UNAME_MACHINE=`(uname -p) 2>/dev/null` ++ UNAME_MACHINE=`(uname -p) 2>/dev/null` + case "${UNAME_MACHINE}" in + A*) echo alpha-dec-vms ; exit ;; + I*) echo ia64-dec-vms ; exit ;; +@@ -1350,6 +1322,12 @@ EOF + i*86:rdos:*:*) + echo ${UNAME_MACHINE}-pc-rdos + exit ;; ++ i*86:AROS:*:*) ++ echo ${UNAME_MACHINE}-pc-aros ++ exit ;; ++ x86_64:VMkernel:*:*) ++ echo ${UNAME_MACHINE}-unknown-esx ++ exit ;; + esac + + #echo '(No uname command or uname output not recognized.)' 1>&2 +@@ -1372,11 +1350,11 @@ main () + #include + printf ("m68k-sony-newsos%s\n", + #ifdef NEWSOS4 +- "4" ++ "4" + #else +- "" ++ "" + #endif +- ); exit (0); ++ ); exit (0); + #endif + #endif + +diff --git a/configure.ac b/configure.ac +index 9237c77..8e3d9d2 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -210,6 +210,20 @@ AC_CANONICAL_BUILD + AC_CANONICAL_HOST + AC_CANONICAL_TARGET + ++# Testing ARM ABI ++# required for code generation (LLVM options) ++ARM_ABI=SOFT ++echo HOST: $host ++ ++case $host in ++ arm*-*-linux-gnueabihf) ++ ARM_ABI=HARD ++ ;; ++ arm*-*-linux-gnueabi) ++ ARM_ABI=SOFTFP ++ ;; ++esac ++ + FPTOOLS_SET_PLATFORM_VARS + + # Verify that the installed (bootstrap) GHC is capable of generating +-- +1.7.4.3 + diff --git a/ghc-debian-ARM-VFPv3D16.patch b/ghc-debian-ARM-VFPv3D16.patch deleted file mode 100644 index ffe76cb..0000000 --- a/ghc-debian-ARM-VFPv3D16.patch +++ /dev/null @@ -1,16 +0,0 @@ -Description: Use VFPv3-D16 FPU for ARM builds -Author: Jani Monoses - -Index: ghc/aclocal.m4 -=================================================================== ---- ghc.orig/aclocal.m4 2012-02-01 18:10:32.000000000 +0000 -+++ ghc/aclocal.m4 2012-03-10 16:40:32.415005650 +0000 -@@ -333,7 +333,7 @@ - ], - [changequote(, )dnl - ARM_ISA=ARMv7 -- ARM_ISA_EXT="[VFPv3,NEON]" -+ ARM_ISA_EXT="[VFPv3D16,NEON]" - changequote([, ])dnl - ]) - ]) diff --git a/ghc-debian-armhf_llvm_abi.patch b/ghc-debian-armhf_llvm_abi.patch deleted file mode 100644 index c3b045e..0000000 --- a/ghc-debian-armhf_llvm_abi.patch +++ /dev/null @@ -1,26 +0,0 @@ -Description: If we are on armhf, tell llvm to generate code for this ABI. Not - forwarded upstream, because they will do a more 'proper' patch. See upstream - bug #5914. -Author: Iain Lane - -Index: ghc/compiler/main/DriverPipeline.hs -=================================================================== ---- ghc.orig/compiler/main/DriverPipeline.hs 2012-03-10 16:41:46.000000000 +0000 -+++ ghc/compiler/main/DriverPipeline.hs 2012-03-10 16:42:59.209169474 +0000 -@@ -1,5 +1,5 @@ - {-# OPTIONS -fno-cse #-} --{-# LANGUAGE NamedFieldPuns #-} -+{-# LANGUAGE NamedFieldPuns, CPP #-} - -- -fno-cse is needed for GLOBAL_VAR's to behave properly - - ----------------------------------------------------------------------------- -@@ -1379,6 +1379,9 @@ - then ["-mattr=+v7,+vfp3"] - else if (elem VFPv3D16 ext) - then ["-mattr=+v7,+vfp3,+d16"] -+#ifdef __ARM_PCS_VFP -+ ++ ["-float-abi=hard"] -+#endif - else [] - _ -> [] - diff --git a/ghc.spec b/ghc.spec index 6ae21bd..70d797f 100644 --- a/ghc.spec +++ b/ghc.spec @@ -2,10 +2,10 @@ # (disabled for other archs in ghc-rpm-macros) # To bootstrap a new version of ghc, uncomment the following: -#%%global ghc_bootstrapping 1 -#%%{?ghc_bootstrap} -#%%global without_hscolour 1 -#%%global without_testsuite 1 +%global ghc_bootstrapping 1 +%{?ghc_bootstrap} +%global without_hscolour 1 +%global without_testsuite 1 # To do a test build instead with shared libs, uncomment the following: #%%global ghc_bootstrapping 1 @@ -25,12 +25,12 @@ Name: ghc # part of haskell-platform # ghc must be rebuilt after a version bump to avoid ABI change problems -Version: 7.4.1 +Version: 7.4.2 # Since library subpackages are versioned: # - release can only be reset if all library versions get bumped simultaneously # (eg for a major release) # - minor release numbers should be incremented monotonically -Release: 6%{?dist} +Release: 7%{?dist} Summary: Glasgow Haskell Compiler # fedora ghc has been bootstrapped on # %{ix86} x86_64 ppc alpha sparcv9 ppc64 armv7hl armv5tel s390 s390x @@ -98,12 +98,8 @@ Patch8: ghc-powerpc-linker-mmap.patch Patch9: Cabal-fix-dynamic-exec-for-TH.patch # add libffi include dir to ghc wrapper for archs using gcc/llc Patch10: ghc-wrapper-libffi-include.patch -# Debian armel fixes -Patch11: fix-ARM-s-StgCRun-clobbered-register-list-for-both-A.patch -Patch12: fix-ARM-StgCRun-to-not-save-and-restore-r11-fp-regis.patch -# Debian armhf fixes -Patch13: ghc-debian-ARM-VFPv3D16.patch -Patch14: ghc-debian-armhf_llvm_abi.patch +# latest arm hf patch +Patch11: ghc-7.4-add-support-for-ARM-hard-float-ABI-fixes-5914.patch %description GHC is a state-of-the-art, open source, compiler and interactive environment @@ -159,7 +155,7 @@ To install all of ghc, install the ghc base package. %if %{defined ghclibdir} %ghc_lib_subpackage Cabal 1.14.0 %ghc_lib_subpackage -l %BSDHaskellReport array 0.4.0.0 -%ghc_lib_subpackage -l %BSDHaskellReport -c gmp-devel%{?_isa},libffi-devel%{?_isa} base 4.5.0.0 +%ghc_lib_subpackage -l %BSDHaskellReport -c gmp-devel%{?_isa},libffi-devel%{?_isa} base 4.5.1.0 %ghc_lib_subpackage binary 0.5.1.0 %ghc_lib_subpackage bytestring 0.9.2.1 %ghc_lib_subpackage -l %BSDHaskellReport containers 0.4.2.1 @@ -181,7 +177,7 @@ To install all of ghc, install the ghc base package. %ghc_lib_subpackage -l %BSDHaskellReport process 1.1.0.1 %ghc_lib_subpackage template-haskell 2.7.0.0 %ghc_lib_subpackage time 1.4 -%ghc_lib_subpackage unix 2.5.1.0 +%ghc_lib_subpackage unix 2.5.1.1 %endif %global version %{ghc_version_override} @@ -224,14 +220,9 @@ ln -s $(pkg-config --variable=includedir libffi)/*.h rts/dist/build %endif # ARM patches -%ifarch armv7hl armv5tel -%patch11 -p1 -b .arm1 -%patch12 -p1 -b .arm2 -%endif %ifarch armv7hl # touches aclocal.m4 -%patch13 -p1 -b .arm -%patch14 -p1 -b .arm +%patch11 -p1 -b .arm autoreconf %endif @@ -249,9 +240,6 @@ BUILD_DOCBOOK_HTML = NO %if %{undefined without_hscolour} HSCOLOUR_SRCS = NO %endif -%ifarch armv7hl -SRC_HC_OPTS += -D__ARM_PCS_VFP -%endif EOF export CFLAGS="${CFLAGS:-%optflags}" @@ -263,10 +251,7 @@ export CFLAGS="${CFLAGS:-%optflags}" --sharedstatedir=%{_sharedstatedir} --mandir=%{_mandir} \ --with-gcc=%{_bindir}/gcc -# >4 cpus tends to break build -[ -z "$RPM_BUILD_NCPUS" ] && RPM_BUILD_NCPUS=$(%{_bindir}/getconf _NPROCESSORS_ONLN) -[ "$RPM_BUILD_NCPUS" -gt 4 ] && RPM_BUILD_NCPUS=4 -make -j$RPM_BUILD_NCPUS +make %{?_smp_mflags} %install make DESTDIR=${RPM_BUILD_ROOT} install @@ -435,6 +420,14 @@ fi %files libraries %changelog +* Fri Aug 24 2012 Jens Petersen - 7.4.2-7 +- 7.4.2 bootstrap + http://www.haskell.org/ghc/docs/7.4.2/html/users_guide/release-7-4-2.html +- update base and unix library versions +- ARM StgCRun patches not longer needed +- use Karel Gardas' ARM hardfloat patch committed upstream +- use _smp_mflags again + * Thu Jul 19 2012 Fedora Release Engineering - 7.4.1-6 - Rebuilt for https://fedoraproject.org/wiki/Fedora_18_Mass_Rebuild diff --git a/sources b/sources index 1013c18..f54a493 100644 --- a/sources +++ b/sources @@ -1,2 +1 @@ -54bc9405c14c3226b6e3de3cd61e2777 ghc-7.4.1-testsuite.tar.bz2 -5d86c420978b49cc60edea9bd4c36703 ghc-7.4.1-src.tar.bz2 +528005749c761fe6c12a0079bd84fb90 ghc-7.4.2-testsuite.tar.bz2