Skip to content

Instantly share code, notes, and snippets.

@hjelmn
Created November 29, 2020 04:10
Show Gist options
  • Save hjelmn/f7feb4ad37d31a1da2fd55c4aad7b123 to your computer and use it in GitHub Desktop.
Save hjelmn/f7feb4ad37d31a1da2fd55c4aad7b123 to your computer and use it in GitHub Desktop.
GHC 8.10.2 Apple Silicon Patch
diff -Nur ghc-8.10.2/aclocal.m4 ghc-8.10.2.new/aclocal.m4
--- ghc-8.10.2/aclocal.m4 2020-08-07 08:52:59.000000000 -0600
+++ ghc-8.10.2.new/aclocal.m4 2020-11-27 11:47:18.000000000 -0700
@@ -118,7 +118,7 @@
GHC_CONVERT_OS([$target_os], [$TargetArch], [TargetOS])
fi
- GHC_LLVM_TARGET([$target_cpu],[$target_vendor],[$target_os],[LlvmTarget])
+ GHC_LLVM_TARGET([$target],[$target_cpu],[$target_vendor],[$target_os],[LlvmTarget])
GHC_SELECT_FILE_EXTENSIONS([$host], [exeext_host], [soext_host])
GHC_SELECT_FILE_EXTENSIONS([$target], [exeext_target], [soext_target])
@@ -218,7 +218,7 @@
test -z "[$]2" || eval "[$]2=\"ArchARM {armISA = \$ARM_ISA, armISAExt = \$ARM_ISA_EXT, armABI = \$ARM_ABI}\""
;;
aarch64)
- test -z "[$]2" || eval "[$]2=ArchARM64"
+ test -z "[$]2" || eval "[$]2=ArchAArch64"
;;
alpha)
test -z "[$]2" || eval "[$]2=ArchAlpha"
@@ -327,9 +327,14 @@
AC_LINK_IFELSE(
[AC_LANG_PROGRAM([], [__asm__ (".subsections_via_symbols");])],
[AC_MSG_RESULT(yes)
- TargetHasSubsectionsViaSymbols=YES
- AC_DEFINE([HAVE_SUBSECTIONS_VIA_SYMBOLS],[1],
+ if test x"$TargetArch" = xaarch64; then
+ dnl subsections via symbols is busted on arm64
+ TargetHasSubsectionsViaSymbols=NO
+ else
+ TargetHasSubsectionsViaSymbols=YES
+ AC_DEFINE([HAVE_SUBSECTIONS_VIA_SYMBOLS],[1],
[Define to 1 if Apple-style dead-stripping is supported.])
+ fi
],
[TargetHasSubsectionsViaSymbols=NO
AC_MSG_RESULT(no)])
@@ -1919,7 +1924,7 @@
# converts cpu from gnu to ghc naming, and assigns the result to $target_var
AC_DEFUN([GHC_CONVERT_CPU],[
case "$1" in
- aarch64*)
+ aarch64*|arm64*)
$2="aarch64"
;;
alpha*)
@@ -2001,18 +2006,19 @@
esac
])
-# GHC_LLVM_TARGET(target_cpu, target_vendor, target_os, llvm_target_var)
+# GHC_LLVM_TARGET(target, target_cpu, target_vendor, target_os, llvm_target_var)
# --------------------------------
# converts the canonicalized target into someting llvm can understand
AC_DEFUN([GHC_LLVM_TARGET], [
- case "$2-$3" in
+ llvm_target_cpu=$2
+ case "$1" in
*-freebsd*-gnueabihf)
llvm_target_vendor="unknown"
llvm_target_os="freebsd-gnueabihf"
;;
- hardfloat-*eabi)
+ *-hardfloat-*eabi)
llvm_target_vendor="unknown"
- llvm_target_os="$3""hf"
+ llvm_target_os="$4""hf"
;;
*-mingw32|*-mingw64|*-msys)
llvm_target_vendor="unknown"
@@ -2022,16 +2028,26 @@
# for the LLVM Target. Otherwise these would be
# turned into just `-linux` and fail to be found
# in the `llvm-targets` file.
- *-android*|*-gnueabi*|*-musleabi*)
- GHC_CONVERT_VENDOR([$2],[llvm_target_vendor])
- llvm_target_os="$3"
+ *-android*|*-gnueabi*)
+ GHC_CONVERT_VENDOR([$3],[llvm_target_vendor])
+ llvm_target_os="$4"
+ ;;
+ # apple is a bit about their naming scheme for
+ # aarch64; and clang on macOS doesn't know that
+ # aarch64 would be arm64. So for LLVM we'll need
+ # to call it arm64; while we'll refer to it internally
+ # as aarch64 for consistency and sanity.
+ aarch64-apple-*|arm64-apple-*)
+ llvm_target_cpu="arm64"
+ GHC_CONVERT_VENDOR([$3],[llvm_target_vendor])
+ GHC_CONVERT_OS([$4],[$2],[llvm_target_os])
;;
*)
- GHC_CONVERT_VENDOR([$2],[llvm_target_vendor])
- GHC_CONVERT_OS([$3],[$1],[llvm_target_os])
+ GHC_CONVERT_VENDOR([$3],[llvm_target_vendor])
+ GHC_CONVERT_OS([$4],[$2],[llvm_target_os])
;;
esac
- $4="$1-$llvm_target_vendor-$llvm_target_os"
+ $5="$llvm_target_cpu-$llvm_target_vendor-$llvm_target_os"
])
diff -Nur ghc-8.10.2/compiler/GHC/Platform/AArch64.hs ghc-8.10.2.new/compiler/GHC/Platform/AArch64.hs
--- ghc-8.10.2/compiler/GHC/Platform/AArch64.hs 1969-12-31 17:00:00.000000000 -0700
+++ ghc-8.10.2.new/compiler/GHC/Platform/AArch64.hs 2020-11-27 09:20:02.000000000 -0700
@@ -0,0 +1,10 @@
+{-# LANGUAGE CPP #-}
+
+module GHC.Platform.AArch64 where
+
+import GhcPrelude
+
+#define MACHREGS_NO_REGS 0
+#define MACHREGS_aarch64 1
+#include "../../../includes/CodeGen.Platform.hs"
+
diff -Nur ghc-8.10.2/compiler/GHC/Platform/Regs.hs ghc-8.10.2.new/compiler/GHC/Platform/Regs.hs
--- ghc-8.10.2/compiler/GHC/Platform/Regs.hs 2020-08-03 15:51:22.000000000 -0600
+++ ghc-8.10.2.new/compiler/GHC/Platform/Regs.hs 2020-11-27 09:47:06.000000000 -0700
@@ -11,6 +11,7 @@
import qualified GHC.Platform.ARM as ARM
import qualified GHC.Platform.ARM64 as ARM64
+import qualified GHC.Platform.AArch64 as AArch64
import qualified GHC.Platform.PPC as PPC
import qualified GHC.Platform.S390X as S390X
import qualified GHC.Platform.SPARC as SPARC
@@ -32,6 +33,7 @@
ArchSPARC -> SPARC.callerSaves
ArchARM {} -> ARM.callerSaves
ArchARM64 -> ARM64.callerSaves
+ ArchAArch64 -> AArch64.callerSaves
arch
| arch `elem` [ArchPPC, ArchPPC_64 ELF_V1, ArchPPC_64 ELF_V2] ->
PPC.callerSaves
@@ -54,6 +56,7 @@
ArchSPARC -> SPARC.activeStgRegs
ArchARM {} -> ARM.activeStgRegs
ArchARM64 -> ARM64.activeStgRegs
+ ArchAArch64 -> AArch64.activeStgRegs
arch
| arch `elem` [ArchPPC, ArchPPC_64 ELF_V1, ArchPPC_64 ELF_V2] ->
PPC.activeStgRegs
@@ -71,6 +74,7 @@
ArchSPARC -> SPARC.haveRegBase
ArchARM {} -> ARM.haveRegBase
ArchARM64 -> ARM64.haveRegBase
+ ArchAArch64 -> AArch64.haveRegBase
arch
| arch `elem` [ArchPPC, ArchPPC_64 ELF_V1, ArchPPC_64 ELF_V2] ->
PPC.haveRegBase
@@ -88,6 +92,7 @@
ArchSPARC -> SPARC.globalRegMaybe
ArchARM {} -> ARM.globalRegMaybe
ArchARM64 -> ARM64.globalRegMaybe
+ ArchAArch64 -> AArch64.globalRegMaybe
arch
| arch `elem` [ArchPPC, ArchPPC_64 ELF_V1, ArchPPC_64 ELF_V2] ->
PPC.globalRegMaybe
@@ -105,6 +110,7 @@
ArchSPARC -> SPARC.freeReg
ArchARM {} -> ARM.freeReg
ArchARM64 -> ARM64.freeReg
+ ArchAArch64 -> AArch64.freeReg
arch
| arch `elem` [ArchPPC, ArchPPC_64 ELF_V1, ArchPPC_64 ELF_V2] ->
PPC.freeReg
diff -Nur ghc-8.10.2/compiler/cmm/PprC.hs ghc-8.10.2.new/compiler/cmm/PprC.hs
--- ghc-8.10.2/compiler/cmm/PprC.hs 2020-08-03 15:51:22.000000000 -0600
+++ ghc-8.10.2.new/compiler/cmm/PprC.hs 2020-11-27 08:45:57.000000000 -0700
@@ -1165,6 +1165,7 @@
bewareLoadStoreAlignment ArchMipsel = True
bewareLoadStoreAlignment (ArchARM {}) = True
bewareLoadStoreAlignment ArchARM64 = True
+ bewareLoadStoreAlignment ArchAArch64 = True
bewareLoadStoreAlignment ArchSPARC = True
bewareLoadStoreAlignment ArchSPARC64 = True
-- Pessimistically assume that they will also cause problems
diff -Nur ghc-8.10.2/compiler/codeGen/CodeGen/Platform/AArch64.hs ghc-8.10.2.new/compiler/codeGen/CodeGen/Platform/AArch64.hs
--- ghc-8.10.2/compiler/codeGen/CodeGen/Platform/AArch64.hs 1969-12-31 17:00:00.000000000 -0700
+++ ghc-8.10.2.new/compiler/codeGen/CodeGen/Platform/AArch64.hs 2020-11-26 21:24:21.000000000 -0700
@@ -0,0 +1,10 @@
+{-# LANGUAGE CPP #-}
+
+module CodeGen.Platform.AArch64 where
+
+import GhcPrelude
+
+#define MACHREGS_NO_REGS 0
+#define MACHREGS_aarch64 1
+#include "../../../../includes/CodeGen.Platform.hs"
+
diff -Nur ghc-8.10.2/compiler/ghc.cabal.in ghc-8.10.2.new/compiler/ghc.cabal.in
--- ghc-8.10.2/compiler/ghc.cabal.in 2020-08-03 15:51:22.000000000 -0600
+++ ghc-8.10.2.new/compiler/ghc.cabal.in 2020-11-27 09:16:27.000000000 -0700
@@ -292,6 +292,7 @@
GHC.Platform.Regs
GHC.Platform.ARM
GHC.Platform.ARM64
+ GHC.Platform.AArch64
GHC.Platform.NoRegs
GHC.Platform.PPC
GHC.Platform.S390X
diff -Nur ghc-8.10.2/compiler/main/DriverPipeline.hs ghc-8.10.2.new/compiler/main/DriverPipeline.hs
--- ghc-8.10.2/compiler/main/DriverPipeline.hs 2020-08-04 21:30:14.000000000 -0600
+++ ghc-8.10.2.new/compiler/main/DriverPipeline.hs 2020-11-26 21:24:43.000000000 -0700
@@ -1803,9 +1803,10 @@
(platformOS platform == OSDarwin) &&
case platformArch platform of
ArchX86 -> True
- ArchX86_64 -> True
- ArchARM {} -> True
- ArchARM64 -> True
+ ArchX86_64 -> True
+ ArchARM {} -> True
+ ArchARM64 -> True
+ ArchAArch64 -> True
_ -> False
then ["-Wl,-no_compact_unwind"]
else [])
diff -Nur ghc-8.10.2/compiler/nativeGen/AsmCodeGen.hs ghc-8.10.2.new/compiler/nativeGen/AsmCodeGen.hs
--- ghc-8.10.2/compiler/nativeGen/AsmCodeGen.hs 2020-08-03 15:51:22.000000000 -0600
+++ ghc-8.10.2.new/compiler/nativeGen/AsmCodeGen.hs 2020-11-26 21:24:43.000000000 -0700
@@ -173,6 +173,7 @@
ArchSPARC64 -> panic "nativeCodeGen: No NCG for SPARC64"
ArchARM {} -> panic "nativeCodeGen: No NCG for ARM"
ArchARM64 -> panic "nativeCodeGen: No NCG for ARM64"
+ ArchAArch64 -> panic "nativeCodeGen: No NCG for AArch64"
ArchPPC_64 _ -> nCG' (ppcNcgImpl dflags)
ArchAlpha -> panic "nativeCodeGen: No NCG for Alpha"
ArchMipseb -> panic "nativeCodeGen: No NCG for mipseb"
diff -Nur ghc-8.10.2/compiler/nativeGen/RegAlloc/Graph/TrivColorable.hs ghc-8.10.2.new/compiler/nativeGen/RegAlloc/Graph/TrivColorable.hs
--- ghc-8.10.2/compiler/nativeGen/RegAlloc/Graph/TrivColorable.hs 2020-08-03 15:51:22.000000000 -0600
+++ ghc-8.10.2.new/compiler/nativeGen/RegAlloc/Graph/TrivColorable.hs 2020-11-26 21:24:43.000000000 -0700
@@ -116,6 +116,7 @@
ArchPPC_64 _ -> 15
ArchARM _ _ _ -> panic "trivColorable ArchARM"
ArchARM64 -> panic "trivColorable ArchARM64"
+ ArchAArch64 -> panic "trivColorable ArchAArch64"
ArchAlpha -> panic "trivColorable ArchAlpha"
ArchMipseb -> panic "trivColorable ArchMipseb"
ArchMipsel -> panic "trivColorable ArchMipsel"
@@ -147,6 +148,7 @@
ArchPPC_64 _ -> 0
ArchARM _ _ _ -> panic "trivColorable ArchARM"
ArchARM64 -> panic "trivColorable ArchARM64"
+ ArchAArch64 -> panic "trivColorable ArchAArch64"
ArchAlpha -> panic "trivColorable ArchAlpha"
ArchMipseb -> panic "trivColorable ArchMipseb"
ArchMipsel -> panic "trivColorable ArchMipsel"
@@ -180,6 +182,7 @@
ArchPPC_64 _ -> 20
ArchARM _ _ _ -> panic "trivColorable ArchARM"
ArchARM64 -> panic "trivColorable ArchARM64"
+ ArchAArch64 -> panic "trivColorable ArchAArch64"
ArchAlpha -> panic "trivColorable ArchAlpha"
ArchMipseb -> panic "trivColorable ArchMipseb"
ArchMipsel -> panic "trivColorable ArchMipsel"
diff -Nur ghc-8.10.2/compiler/nativeGen/RegAlloc/Linear/FreeRegs.hs ghc-8.10.2.new/compiler/nativeGen/RegAlloc/Linear/FreeRegs.hs
--- ghc-8.10.2/compiler/nativeGen/RegAlloc/Linear/FreeRegs.hs 2020-08-03 15:51:22.000000000 -0600
+++ ghc-8.10.2.new/compiler/nativeGen/RegAlloc/Linear/FreeRegs.hs 2020-11-26 21:24:43.000000000 -0700
@@ -80,6 +80,7 @@
ArchSPARC64 -> panic "maxSpillSlots ArchSPARC64"
ArchARM _ _ _ -> panic "maxSpillSlots ArchARM"
ArchARM64 -> panic "maxSpillSlots ArchARM64"
+ ArchAArch64 -> panic "maxSpillSlots ArchAArch64"
ArchPPC_64 _ -> PPC.Instr.maxSpillSlots dflags
ArchAlpha -> panic "maxSpillSlots ArchAlpha"
ArchMipseb -> panic "maxSpillSlots ArchMipseb"
diff -Nur ghc-8.10.2/compiler/nativeGen/RegAlloc/Linear/Main.hs ghc-8.10.2.new/compiler/nativeGen/RegAlloc/Linear/Main.hs
--- ghc-8.10.2/compiler/nativeGen/RegAlloc/Linear/Main.hs 2020-08-03 15:51:22.000000000 -0600
+++ ghc-8.10.2.new/compiler/nativeGen/RegAlloc/Linear/Main.hs 2020-11-26 21:24:43.000000000 -0700
@@ -217,6 +217,7 @@
ArchPPC -> go $ (frInitFreeRegs platform :: PPC.FreeRegs)
ArchARM _ _ _ -> panic "linearRegAlloc ArchARM"
ArchARM64 -> panic "linearRegAlloc ArchARM64"
+ ArchAArch64 -> panic "linearRegAlloc ArchAArch64"
ArchPPC_64 _ -> go $ (frInitFreeRegs platform :: PPC.FreeRegs)
ArchAlpha -> panic "linearRegAlloc ArchAlpha"
ArchMipseb -> panic "linearRegAlloc ArchMipseb"
diff -Nur ghc-8.10.2/compiler/nativeGen/TargetReg.hs ghc-8.10.2.new/compiler/nativeGen/TargetReg.hs
--- ghc-8.10.2/compiler/nativeGen/TargetReg.hs 2020-08-03 15:51:22.000000000 -0600
+++ ghc-8.10.2.new/compiler/nativeGen/TargetReg.hs 2020-11-26 21:24:43.000000000 -0700
@@ -50,6 +50,7 @@
ArchPPC_64 _ -> PPC.virtualRegSqueeze
ArchARM _ _ _ -> panic "targetVirtualRegSqueeze ArchARM"
ArchARM64 -> panic "targetVirtualRegSqueeze ArchARM64"
+ ArchAArch64 -> panic "nativeCodeGen: No NCG for AArch64"
ArchAlpha -> panic "targetVirtualRegSqueeze ArchAlpha"
ArchMipseb -> panic "targetVirtualRegSqueeze ArchMipseb"
ArchMipsel -> panic "targetVirtualRegSqueeze ArchMipsel"
@@ -69,6 +70,7 @@
ArchPPC_64 _ -> PPC.realRegSqueeze
ArchARM _ _ _ -> panic "targetRealRegSqueeze ArchARM"
ArchARM64 -> panic "targetRealRegSqueeze ArchARM64"
+ ArchAArch64 -> panic "nativeCodeGen: No NCG for AArch64"
ArchAlpha -> panic "targetRealRegSqueeze ArchAlpha"
ArchMipseb -> panic "targetRealRegSqueeze ArchMipseb"
ArchMipsel -> panic "targetRealRegSqueeze ArchMipsel"
@@ -87,6 +89,7 @@
ArchPPC_64 _ -> PPC.classOfRealReg
ArchARM _ _ _ -> panic "targetClassOfRealReg ArchARM"
ArchARM64 -> panic "targetClassOfRealReg ArchARM64"
+ ArchAArch64 -> panic "nativeCodeGen: No NCG for AArch64"
ArchAlpha -> panic "targetClassOfRealReg ArchAlpha"
ArchMipseb -> panic "targetClassOfRealReg ArchMipseb"
ArchMipsel -> panic "targetClassOfRealReg ArchMipsel"
@@ -105,6 +108,7 @@
ArchPPC_64 _ -> PPC.mkVirtualReg
ArchARM _ _ _ -> panic "targetMkVirtualReg ArchARM"
ArchARM64 -> panic "targetMkVirtualReg ArchARM64"
+ ArchAArch64 -> panic "nativeCodeGen: No NCG for AArch64"
ArchAlpha -> panic "targetMkVirtualReg ArchAlpha"
ArchMipseb -> panic "targetMkVirtualReg ArchMipseb"
ArchMipsel -> panic "targetMkVirtualReg ArchMipsel"
@@ -123,6 +127,7 @@
ArchPPC_64 _ -> PPC.regDotColor
ArchARM _ _ _ -> panic "targetRegDotColor ArchARM"
ArchARM64 -> panic "targetRegDotColor ArchARM64"
+ ArchAArch64 -> panic "nativeCodeGen: No NCG for AArch64"
ArchAlpha -> panic "targetRegDotColor ArchAlpha"
ArchMipseb -> panic "targetRegDotColor ArchMipseb"
ArchMipsel -> panic "targetRegDotColor ArchMipsel"
diff -Nur ghc-8.10.2/config.guess ghc-8.10.2.new/config.guess
--- ghc-8.10.2/config.guess 2020-08-03 15:51:22.000000000 -0600
+++ ghc-8.10.2.new/config.guess 2020-11-26 21:22:54.000000000 -0700
@@ -2,7 +2,7 @@
# Attempt to guess a canonical system name.
# Copyright 1992-2019 Free Software Foundation, Inc.
-timestamp='2019-12-21'
+timestamp='2019-03-04'
# 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
@@ -99,8 +99,6 @@
trap 'test -z "$tmp" || rm -fr "$tmp"' 0 1 2 13 15
set_cc_for_build() {
- # prevent multiple calls if $tmp is already set
- test "$tmp" && return 0
: "${TMPDIR=/tmp}"
# shellcheck disable=SC2039
{ tmp=`(umask 077 && mktemp -d "$TMPDIR/cgXXXXXX") 2>/dev/null` && test -n "$tmp" && test -d "$tmp" ; } ||
@@ -264,9 +262,6 @@
*:SolidBSD:*:*)
echo "$UNAME_MACHINE"-unknown-solidbsd"$UNAME_RELEASE"
exit ;;
- *:OS108:*:*)
- echo "$UNAME_MACHINE"-unknown-os108_"$UNAME_RELEASE"
- exit ;;
macppc:MirBSD:*:*)
echo powerpc-unknown-mirbsd"$UNAME_RELEASE"
exit ;;
@@ -276,15 +271,12 @@
*:Sortix:*:*)
echo "$UNAME_MACHINE"-unknown-sortix
exit ;;
- *:Twizzler:*:*)
- echo "$UNAME_MACHINE"-unknown-twizzler
- exit ;;
*:Redox:*:*)
echo "$UNAME_MACHINE"-unknown-redox
exit ;;
mips:OSF1:*.*)
- echo mips-dec-osf1
- exit ;;
+ echo mips-dec-osf1
+ exit ;;
alpha:OSF1:*:*)
case $UNAME_RELEASE in
*4.0)
@@ -926,7 +918,7 @@
echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"
exit ;;
alpha:Linux:*:*)
- case `sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' /proc/cpuinfo 2>/dev/null` in
+ case `sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' < /proc/cpuinfo` in
EV5) UNAME_MACHINE=alphaev5 ;;
EV56) UNAME_MACHINE=alphaev56 ;;
PCA56) UNAME_MACHINE=alphapca56 ;;
@@ -1333,39 +1325,38 @@
echo "$UNAME_MACHINE"-apple-rhapsody"$UNAME_RELEASE"
exit ;;
*:Darwin:*:*)
- UNAME_PROCESSOR=`uname -p`
- case $UNAME_PROCESSOR in
- unknown) UNAME_PROCESSOR=powerpc ;;
- esac
- if command -v xcode-select > /dev/null 2> /dev/null && \
- ! xcode-select --print-path > /dev/null 2> /dev/null ; then
- # Avoid executing cc if there is no toolchain installed as
- # cc will be a stub that puts up a graphical alert
- # prompting the user to install developer tools.
- CC_FOR_BUILD=no_compiler_found
- else
- set_cc_for_build
+ UNAME_PROCESSOR=`uname -p` || UNAME_PROCESSOR=unknown
+ set_cc_for_build
+ if test "$UNAME_PROCESSOR" = unknown ; then
+ UNAME_PROCESSOR=powerpc
fi
- 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
- case $UNAME_PROCESSOR in
- i386) UNAME_PROCESSOR=x86_64 ;;
- powerpc) UNAME_PROCESSOR=powerpc64 ;;
- esac
- fi
- # On 10.4-10.6 one might compile for PowerPC via gcc -arch ppc
- if (echo '#ifdef __POWERPC__'; echo IS_PPC; echo '#endif') | \
- (CCOPTS="" $CC_FOR_BUILD -E - 2>/dev/null) | \
- grep IS_PPC >/dev/null
- then
- UNAME_PROCESSOR=powerpc
+ if test "`echo "$UNAME_RELEASE" | sed -e 's/\..*//'`" -le 10 ; then
+ 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
+ case $UNAME_PROCESSOR in
+ i386) UNAME_PROCESSOR=x86_64 ;;
+ powerpc) UNAME_PROCESSOR=powerpc64 ;;
+ esac
+ fi
+ # On 10.4-10.6 one might compile for PowerPC via gcc -arch ppc
+ if (echo '#ifdef __POWERPC__'; echo IS_PPC; echo '#endif') | \
+ (CCOPTS="" $CC_FOR_BUILD -E - 2>/dev/null) | \
+ grep IS_PPC >/dev/null
+ then
+ UNAME_PROCESSOR=powerpc
+ fi
fi
elif test "$UNAME_PROCESSOR" = i386 ; then
- # uname -m returns i386 or x86_64
- UNAME_PROCESSOR=$UNAME_MACHINE
+ # Avoid executing cc on OS X 10.9, as it ships with a stub
+ # that puts up a graphical alert prompting to install
+ # developer tools. Any system running Mac OS X 10.7 or
+ # later (Darwin 11 and later) is required to have a 64-bit
+ # processor. This is not true of the ARM version of Darwin
+ # that Apple uses in portable devices.
+ UNAME_PROCESSOR=x86_64
fi
echo "$UNAME_PROCESSOR"-apple-darwin"$UNAME_RELEASE"
exit ;;
@@ -1477,14 +1468,6 @@
#include <sys/types.h>
#include <sys/utsname.h>
#endif
-#if defined(ultrix) || defined(_ultrix) || defined(__ultrix) || defined(__ultrix__)
-#if defined (vax) || defined (__vax) || defined (__vax__) || defined(mips) || defined(__mips) || defined(__mips__) || defined(MIPS) || defined(__MIPS__)
-#include <signal.h>
-#if defined(_SIZE_T_) || defined(SIGLOST)
-#include <sys/utsname.h>
-#endif
-#endif
-#endif
main ()
{
#if defined (sony)
@@ -1572,23 +1555,18 @@
printf ("vax-dec-bsd\n"); exit (0);
#endif
#else
-#if defined(_SIZE_T_) || defined(SIGLOST)
- struct utsname un;
- uname (&un);
- printf ("vax-dec-ultrix%s\n", un.release); exit (0);
-#else
printf ("vax-dec-ultrix\n"); exit (0);
#endif
#endif
-#endif
#if defined(ultrix) || defined(_ultrix) || defined(__ultrix) || defined(__ultrix__)
#if defined(mips) || defined(__mips) || defined(__mips__) || defined(MIPS) || defined(__MIPS__)
-#if defined(_SIZE_T_) || defined(SIGLOST)
- struct utsname *un;
- uname (&un);
- printf ("mips-dec-ultrix%s\n", un.release); exit (0);
+#include <signal.h>
+#if defined(_SIZE_T_) /* >= ULTRIX4 */
+ printf ("mips-dec-ultrix4\n"); exit (0);
#else
- printf ("mips-dec-ultrix\n"); exit (0);
+#if defined(ULTRIX3) || defined(ultrix3) || defined(SIGLOST)
+ printf ("mips-dec-ultrix3\n"); exit (0);
+#endif
#endif
#endif
#endif
diff -Nur ghc-8.10.2/config.sub ghc-8.10.2.new/config.sub
--- ghc-8.10.2/config.sub 2020-08-03 15:51:22.000000000 -0600
+++ ghc-8.10.2.new/config.sub 2020-11-26 21:29:24.000000000 -0700
@@ -1,8 +1,8 @@
#! /bin/sh
# Configuration validation subroutine script.
-# Copyright 1992-2019 Free Software Foundation, Inc.
+# Copyright 1992-2020 Free Software Foundation, Inc.
-timestamp='2019-06-30'
+timestamp='2020-09-08'
# 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
@@ -67,7 +67,7 @@
version="\
GNU config.sub ($timestamp)
-Copyright 1992-2019 Free Software Foundation, Inc.
+Copyright 1992-2020 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."
@@ -124,28 +124,27 @@
;;
*-*-*-*)
basic_machine=$field1-$field2
- os=$field3-$field4
+ basic_os=$field3-$field4
;;
*-*-*)
# Ambiguous whether COMPANY is present, or skipped and KERNEL-OS is two
# parts
maybe_os=$field2-$field3
case $maybe_os in
- nto-qnx* | linux-gnu* | linux-android* | linux-dietlibc \
- | linux-newlib* | linux-musl* | linux-uclibc* | uclinux-uclibc* \
+ nto-qnx* | linux-* | uclinux-uclibc* \
| uclinux-gnu* | kfreebsd*-gnu* | knetbsd*-gnu* | netbsd*-gnu* \
| netbsd*-eabi* | kopensolaris*-gnu* | cloudabi*-eabi* \
| storm-chaos* | os2-emx* | rtmk-nova*)
basic_machine=$field1
- os=$maybe_os
+ basic_os=$maybe_os
;;
android-linux)
basic_machine=$field1-unknown
- os=linux-android
+ basic_os=linux-android
;;
*)
basic_machine=$field1-$field2
- os=$field3
+ basic_os=$field3
;;
esac
;;
@@ -154,7 +153,7 @@
case $field1-$field2 in
decstation-3100)
basic_machine=mips-dec
- os=
+ basic_os=
;;
*-*)
# Second component is usually, but not always the OS
@@ -162,7 +161,7 @@
# Prevent following clause from handling this valid os
sun*os*)
basic_machine=$field1
- os=$field2
+ basic_os=$field2
;;
# Manufacturers
dec* | mips* | sequent* | encore* | pc533* | sgi* | sony* \
@@ -175,11 +174,11 @@
| microblaze* | sim | cisco \
| oki | wec | wrs | winbond)
basic_machine=$field1-$field2
- os=
+ basic_os=
;;
*)
basic_machine=$field1
- os=$field2
+ basic_os=$field2
;;
esac
;;
@@ -191,447 +190,451 @@
case $field1 in
386bsd)
basic_machine=i386-pc
- os=bsd
+ basic_os=bsd
;;
a29khif)
basic_machine=a29k-amd
- os=udi
+ basic_os=udi
;;
adobe68k)
basic_machine=m68010-adobe
- os=scout
+ basic_os=scout
;;
alliant)
basic_machine=fx80-alliant
- os=
+ basic_os=
;;
altos | altos3068)
basic_machine=m68k-altos
- os=
+ basic_os=
;;
am29k)
basic_machine=a29k-none
- os=bsd
+ basic_os=bsd
;;
amdahl)
basic_machine=580-amdahl
- os=sysv
+ basic_os=sysv
;;
amiga)
basic_machine=m68k-unknown
- os=
+ basic_os=
;;
amigaos | amigados)
basic_machine=m68k-unknown
- os=amigaos
+ basic_os=amigaos
;;
amigaunix | amix)
basic_machine=m68k-unknown
- os=sysv4
+ basic_os=sysv4
;;
apollo68)
basic_machine=m68k-apollo
- os=sysv
+ basic_os=sysv
;;
apollo68bsd)
basic_machine=m68k-apollo
- os=bsd
+ basic_os=bsd
;;
aros)
basic_machine=i386-pc
- os=aros
+ basic_os=aros
;;
aux)
basic_machine=m68k-apple
- os=aux
+ basic_os=aux
;;
balance)
basic_machine=ns32k-sequent
- os=dynix
+ basic_os=dynix
;;
blackfin)
basic_machine=bfin-unknown
- os=linux
+ basic_os=linux
;;
cegcc)
basic_machine=arm-unknown
- os=cegcc
+ basic_os=cegcc
;;
convex-c1)
basic_machine=c1-convex
- os=bsd
+ basic_os=bsd
;;
convex-c2)
basic_machine=c2-convex
- os=bsd
+ basic_os=bsd
;;
convex-c32)
basic_machine=c32-convex
- os=bsd
+ basic_os=bsd
;;
convex-c34)
basic_machine=c34-convex
- os=bsd
+ basic_os=bsd
;;
convex-c38)
basic_machine=c38-convex
- os=bsd
+ basic_os=bsd
;;
cray)
basic_machine=j90-cray
- os=unicos
+ basic_os=unicos
;;
crds | unos)
basic_machine=m68k-crds
- os=
+ basic_os=
;;
da30)
basic_machine=m68k-da30
- os=
+ basic_os=
;;
decstation | pmax | pmin | dec3100 | decstatn)
basic_machine=mips-dec
- os=
+ basic_os=
;;
delta88)
basic_machine=m88k-motorola
- os=sysv3
+ basic_os=sysv3
;;
dicos)
basic_machine=i686-pc
- os=dicos
+ basic_os=dicos
;;
djgpp)
basic_machine=i586-pc
- os=msdosdjgpp
+ basic_os=msdosdjgpp
;;
ebmon29k)
basic_machine=a29k-amd
- os=ebmon
+ basic_os=ebmon
;;
es1800 | OSE68k | ose68k | ose | OSE)
basic_machine=m68k-ericsson
- os=ose
+ basic_os=ose
;;
gmicro)
basic_machine=tron-gmicro
- os=sysv
+ basic_os=sysv
;;
go32)
basic_machine=i386-pc
- os=go32
+ basic_os=go32
;;
h8300hms)
basic_machine=h8300-hitachi
- os=hms
+ basic_os=hms
;;
h8300xray)
basic_machine=h8300-hitachi
- os=xray
+ basic_os=xray
;;
h8500hms)
basic_machine=h8500-hitachi
- os=hms
+ basic_os=hms
;;
harris)
basic_machine=m88k-harris
- os=sysv3
+ basic_os=sysv3
;;
hp300 | hp300hpux)
basic_machine=m68k-hp
- os=hpux
+ basic_os=hpux
;;
hp300bsd)
basic_machine=m68k-hp
- os=bsd
+ basic_os=bsd
;;
hppaosf)
basic_machine=hppa1.1-hp
- os=osf
+ basic_os=osf
;;
hppro)
basic_machine=hppa1.1-hp
- os=proelf
+ basic_os=proelf
;;
i386mach)
basic_machine=i386-mach
- os=mach
+ basic_os=mach
;;
isi68 | isi)
basic_machine=m68k-isi
- os=sysv
+ basic_os=sysv
;;
m68knommu)
basic_machine=m68k-unknown
- os=linux
+ basic_os=linux
;;
magnum | m3230)
basic_machine=mips-mips
- os=sysv
+ basic_os=sysv
;;
merlin)
basic_machine=ns32k-utek
- os=sysv
+ basic_os=sysv
;;
mingw64)
basic_machine=x86_64-pc
- os=mingw64
+ basic_os=mingw64
;;
mingw32)
basic_machine=i686-pc
- os=mingw32
+ basic_os=mingw32
;;
mingw32ce)
basic_machine=arm-unknown
- os=mingw32ce
+ basic_os=mingw32ce
;;
monitor)
basic_machine=m68k-rom68k
- os=coff
+ basic_os=coff
;;
morphos)
basic_machine=powerpc-unknown
- os=morphos
+ basic_os=morphos
;;
moxiebox)
basic_machine=moxie-unknown
- os=moxiebox
+ basic_os=moxiebox
;;
msdos)
basic_machine=i386-pc
- os=msdos
+ basic_os=msdos
;;
msys)
basic_machine=i686-pc
- os=msys
+ basic_os=msys
;;
mvs)
basic_machine=i370-ibm
- os=mvs
+ basic_os=mvs
;;
nacl)
basic_machine=le32-unknown
- os=nacl
+ basic_os=nacl
;;
ncr3000)
basic_machine=i486-ncr
- os=sysv4
+ basic_os=sysv4
;;
netbsd386)
basic_machine=i386-pc
- os=netbsd
+ basic_os=netbsd
;;
netwinder)
basic_machine=armv4l-rebel
- os=linux
+ basic_os=linux
;;
news | news700 | news800 | news900)
basic_machine=m68k-sony
- os=newsos
+ basic_os=newsos
;;
news1000)
basic_machine=m68030-sony
- os=newsos
+ basic_os=newsos
;;
necv70)
basic_machine=v70-nec
- os=sysv
+ basic_os=sysv
;;
nh3000)
basic_machine=m68k-harris
- os=cxux
+ basic_os=cxux
;;
nh[45]000)
basic_machine=m88k-harris
- os=cxux
+ basic_os=cxux
;;
nindy960)
basic_machine=i960-intel
- os=nindy
+ basic_os=nindy
;;
mon960)
basic_machine=i960-intel
- os=mon960
+ basic_os=mon960
;;
nonstopux)
basic_machine=mips-compaq
- os=nonstopux
+ basic_os=nonstopux
;;
os400)
basic_machine=powerpc-ibm
- os=os400
+ basic_os=os400
;;
OSE68000 | ose68000)
basic_machine=m68000-ericsson
- os=ose
+ basic_os=ose
;;
os68k)
basic_machine=m68k-none
- os=os68k
+ basic_os=os68k
;;
paragon)
basic_machine=i860-intel
- os=osf
+ basic_os=osf
;;
parisc)
basic_machine=hppa-unknown
- os=linux
+ basic_os=linux
+ ;;
+ psp)
+ basic_machine=mipsallegrexel-sony
+ basic_os=psp
;;
pw32)
basic_machine=i586-unknown
- os=pw32
+ basic_os=pw32
;;
rdos | rdos64)
basic_machine=x86_64-pc
- os=rdos
+ basic_os=rdos
;;
rdos32)
basic_machine=i386-pc
- os=rdos
+ basic_os=rdos
;;
rom68k)
basic_machine=m68k-rom68k
- os=coff
+ basic_os=coff
;;
sa29200)
basic_machine=a29k-amd
- os=udi
+ basic_os=udi
;;
sei)
basic_machine=mips-sei
- os=seiux
+ basic_os=seiux
;;
sequent)
basic_machine=i386-sequent
- os=
+ basic_os=
;;
sps7)
basic_machine=m68k-bull
- os=sysv2
+ basic_os=sysv2
;;
st2000)
basic_machine=m68k-tandem
- os=
+ basic_os=
;;
stratus)
basic_machine=i860-stratus
- os=sysv4
+ basic_os=sysv4
;;
sun2)
basic_machine=m68000-sun
- os=
+ basic_os=
;;
sun2os3)
basic_machine=m68000-sun
- os=sunos3
+ basic_os=sunos3
;;
sun2os4)
basic_machine=m68000-sun
- os=sunos4
+ basic_os=sunos4
;;
sun3)
basic_machine=m68k-sun
- os=
+ basic_os=
;;
sun3os3)
basic_machine=m68k-sun
- os=sunos3
+ basic_os=sunos3
;;
sun3os4)
basic_machine=m68k-sun
- os=sunos4
+ basic_os=sunos4
;;
sun4)
basic_machine=sparc-sun
- os=
+ basic_os=
;;
sun4os3)
basic_machine=sparc-sun
- os=sunos3
+ basic_os=sunos3
;;
sun4os4)
basic_machine=sparc-sun
- os=sunos4
+ basic_os=sunos4
;;
sun4sol2)
basic_machine=sparc-sun
- os=solaris2
+ basic_os=solaris2
;;
sun386 | sun386i | roadrunner)
basic_machine=i386-sun
- os=
+ basic_os=
;;
sv1)
basic_machine=sv1-cray
- os=unicos
+ basic_os=unicos
;;
symmetry)
basic_machine=i386-sequent
- os=dynix
+ basic_os=dynix
;;
t3e)
basic_machine=alphaev5-cray
- os=unicos
+ basic_os=unicos
;;
t90)
basic_machine=t90-cray
- os=unicos
+ basic_os=unicos
;;
toad1)
basic_machine=pdp10-xkl
- os=tops20
+ basic_os=tops20
;;
tpf)
basic_machine=s390x-ibm
- os=tpf
+ basic_os=tpf
;;
udi29k)
basic_machine=a29k-amd
- os=udi
+ basic_os=udi
;;
ultra3)
basic_machine=a29k-nyu
- os=sym1
+ basic_os=sym1
;;
v810 | necv810)
basic_machine=v810-nec
- os=none
+ basic_os=none
;;
vaxv)
basic_machine=vax-dec
- os=sysv
+ basic_os=sysv
;;
vms)
basic_machine=vax-dec
- os=vms
+ basic_os=vms
;;
vsta)
basic_machine=i386-pc
- os=vsta
+ basic_os=vsta
;;
vxworks960)
basic_machine=i960-wrs
- os=vxworks
+ basic_os=vxworks
;;
vxworks68)
basic_machine=m68k-wrs
- os=vxworks
+ basic_os=vxworks
;;
vxworks29k)
basic_machine=a29k-wrs
- os=vxworks
+ basic_os=vxworks
;;
xbox)
basic_machine=i686-pc
- os=mingw32
+ basic_os=mingw32
;;
ymp)
basic_machine=ymp-cray
- os=unicos
+ basic_os=unicos
;;
*)
basic_machine=$1
- os=
+ basic_os=
;;
esac
;;
@@ -683,17 +686,17 @@
bluegene*)
cpu=powerpc
vendor=ibm
- os=cnk
+ basic_os=cnk
;;
decsystem10* | dec10*)
cpu=pdp10
vendor=dec
- os=tops10
+ basic_os=tops10
;;
decsystem20* | dec20*)
cpu=pdp10
vendor=dec
- os=tops20
+ basic_os=tops20
;;
delta | 3300 | motorola-3300 | motorola-delta \
| 3300-motorola | delta-motorola)
@@ -703,7 +706,7 @@
dpx2*)
cpu=m68k
vendor=bull
- os=sysv3
+ basic_os=sysv3
;;
encore | umax | mmax)
cpu=ns32k
@@ -712,7 +715,7 @@
elxsi)
cpu=elxsi
vendor=elxsi
- os=${os:-bsd}
+ basic_os=${basic_os:-bsd}
;;
fx2800)
cpu=i860
@@ -725,7 +728,7 @@
h3050r* | hiux*)
cpu=hppa1.1
vendor=hitachi
- os=hiuxwe2
+ basic_os=hiuxwe2
;;
hp3k9[0-9][0-9] | hp9[0-9][0-9])
cpu=hppa1.0
@@ -768,36 +771,36 @@
i*86v32)
cpu=`echo "$1" | sed -e 's/86.*/86/'`
vendor=pc
- os=sysv32
+ basic_os=sysv32
;;
i*86v4*)
cpu=`echo "$1" | sed -e 's/86.*/86/'`
vendor=pc
- os=sysv4
+ basic_os=sysv4
;;
i*86v)
cpu=`echo "$1" | sed -e 's/86.*/86/'`
vendor=pc
- os=sysv
+ basic_os=sysv
;;
i*86sol2)
cpu=`echo "$1" | sed -e 's/86.*/86/'`
vendor=pc
- os=solaris2
+ basic_os=solaris2
;;
j90 | j90-cray)
cpu=j90
vendor=cray
- os=${os:-unicos}
+ basic_os=${basic_os:-unicos}
;;
iris | iris4d)
cpu=mips
vendor=sgi
- case $os in
+ case $basic_os in
irix*)
;;
*)
- os=irix4
+ basic_os=irix4
;;
esac
;;
@@ -808,26 +811,26 @@
*mint | mint[0-9]* | *MiNT | *MiNT[0-9]*)
cpu=m68k
vendor=atari
- os=mint
+ basic_os=mint
;;
news-3600 | risc-news)
cpu=mips
vendor=sony
- os=newsos
+ basic_os=newsos
;;
next | m*-next)
cpu=m68k
vendor=next
- case $os in
+ case $basic_os in
openstep*)
;;
nextstep*)
;;
ns2*)
- os=nextstep2
+ basic_os=nextstep2
;;
*)
- os=nextstep3
+ basic_os=nextstep3
;;
esac
;;
@@ -838,12 +841,12 @@
op50n-* | op60c-*)
cpu=hppa1.1
vendor=oki
- os=proelf
+ basic_os=proelf
;;
pa-hitachi)
cpu=hppa1.1
vendor=hitachi
- os=hiuxwe2
+ basic_os=hiuxwe2
;;
pbd)
cpu=sparc
@@ -880,12 +883,12 @@
sde)
cpu=mipsisa32
vendor=sde
- os=${os:-elf}
+ basic_os=${basic_os:-elf}
;;
simso-wrs)
cpu=sparclite
vendor=wrs
- os=vxworks
+ basic_os=vxworks
;;
tower | tower-32)
cpu=m68k
@@ -902,7 +905,7 @@
w89k-*)
cpu=hppa1.1
vendor=winbond
- os=proelf
+ basic_os=proelf
;;
none)
cpu=none
@@ -955,11 +958,11 @@
# some cases the only manufacturer, in others, it is the most popular.
craynv-unknown)
vendor=cray
- os=${os:-unicosmp}
+ basic_os=${basic_os:-unicosmp}
;;
c90-unknown | c90-cray)
vendor=cray
- os=${os:-unicos}
+ basic_os=${Basic_os:-unicos}
;;
fx80-unknown)
vendor=alliant
@@ -1003,7 +1006,7 @@
dpx20-unknown | dpx20-bull)
cpu=rs6000
vendor=bull
- os=${os:-bosx}
+ basic_os=${basic_os:-bosx}
;;
# Here we normalize CPU types irrespective of the vendor
@@ -1012,7 +1015,7 @@
;;
blackfin-*)
cpu=bfin
- os=linux
+ basic_os=linux
;;
c54x-*)
cpu=tic54x
@@ -1025,7 +1028,7 @@
;;
e500v[12]-*)
cpu=powerpc
- os=$os"spe"
+ basic_os=${basic_os}"spe"
;;
mips3*-*)
cpu=mips64
@@ -1035,7 +1038,7 @@
;;
m68knommu-*)
cpu=m68k
- os=linux
+ basic_os=linux
;;
m9s12z-* | m68hcs12z-* | hcs12z-* | s12z-*)
cpu=s12z
@@ -1045,7 +1048,7 @@
;;
parisc-*)
cpu=hppa
- os=linux
+ basic_os=linux
;;
pentium-* | p5-* | k5-* | k6-* | nexgen-* | viac3-*)
cpu=i586
@@ -1101,11 +1104,14 @@
xscale-* | xscalee[bl]-*)
cpu=`echo "$cpu" | sed 's/^xscale/arm/'`
;;
+ arm64-*)
+ cpu=aarch64
+ ;;
# Recognize the canonical CPU Types that limit and/or modify the
# company names they are paired with.
cr16-*)
- os=${os:-elf}
+ basic_os=${basic_os:-elf}
;;
crisv32-* | etraxfs*-*)
cpu=crisv32
@@ -1116,7 +1122,7 @@
vendor=axis
;;
crx-*)
- os=${os:-elf}
+ basic_os=${basic_os:-elf}
;;
neo-tandem)
cpu=neo
@@ -1138,16 +1144,12 @@
cpu=nsx
vendor=tandem
;;
- s390-*)
- cpu=s390
- vendor=ibm
- ;;
- s390x-*)
- cpu=s390x
- vendor=ibm
+ mipsallegrexel-sony)
+ cpu=mipsallegrexel
+ vendor=sony
;;
tile*-*)
- os=${os:-linux-gnu}
+ basic_os=${basic_os:-linux-gnu}
;;
*)
@@ -1164,7 +1166,7 @@
| am33_2.0 \
| amdgcn \
| arc | arceb \
- | arm | arm[lb]e | arme[lb] | armv* \
+ | arm | arm[lb]e | arme[lb] | armv* \
| avr | avr32 \
| asmjs \
| ba \
@@ -1229,6 +1231,7 @@
| pyramid \
| riscv | riscv32 | riscv64 \
| rl78 | romp | rs6000 | rx \
+ | s390 | s390x \
| score \
| sh | shl \
| sh[1234] | sh[24]a | sh[24]ae[lb] | sh[23]e | she[lb] | sh[lb]e \
@@ -1275,8 +1278,43 @@
# Decode manufacturer-specific aliases for certain operating systems.
-if [ x$os != x ]
+if test x$basic_os != x
then
+
+# First recognize some ad-hoc caes, or perhaps split kernel-os, or else just
+# set os.
+case $basic_os in
+ gnu/linux*)
+ kernel=linux
+ os=`echo $basic_os | sed -e 's|gnu/linux|gnu|'`
+ ;;
+ nto-qnx*)
+ kernel=nto
+ os=`echo $basic_os | sed -e 's|nto-qnx|qnx|'`
+ ;;
+ *-*)
+ # shellcheck disable=SC2162
+ IFS="-" read kernel os <<EOF
+$basic_os
+EOF
+ ;;
+ # Default OS when just kernel was specified
+ nto*)
+ kernel=nto
+ os=`echo $basic_os | sed -e 's|nto|qnx|'`
+ ;;
+ linux*)
+ kernel=linux
+ os=`echo $basic_os | sed -e 's|linux|gnu|'`
+ ;;
+ *)
+ kernel=
+ os=$basic_os
+ ;;
+esac
+
+# Now, normalize the OS (knowing we just have one component, it's not a kernel,
+# etc.)
case $os in
# First match some system type aliases that might get confused
# with valid system types.
@@ -1296,9 +1334,6 @@
unixware*)
os=sysv4.2uw
;;
- gnu/linux*)
- os=`echo $os | sed -e 's|gnu/linux|linux-gnu|'`
- ;;
# es1800 is here to avoid being matched by es* (a different OS)
es1800*)
os=ose
@@ -1322,10 +1357,7 @@
sco3.2.[4-9]*)
os=`echo $os | sed -e 's/sco3.2./sco3.2v/'`
;;
- sco3.2v[4-9]* | sco5v6*)
- # Don't forget version if it is 3.2v4 or newer.
- ;;
- scout)
+ sco*v* | scout)
# Don't match below
;;
sco*)
@@ -1334,78 +1366,25 @@
psos*)
os=psos
;;
- # Now accept the basic system types.
- # The portable systems comes first.
- # Each alternative MUST end in a * to match a version number.
- # sysv* is not here because it comes later, after sysvr4.
- gnu* | bsd* | mach* | minix* | genix* | ultrix* | irix* \
- | *vms* | esix* | aix* | cnk* | sunos | sunos[34]*\
- | hpux* | unos* | osf* | luna* | dgux* | auroraux* | solaris* \
- | sym* | kopensolaris* | plan9* \
- | amigaos* | amigados* | msdos* | newsos* | unicos* | aof* \
- | aos* | aros* | cloudabi* | sortix* | twizzler* \
- | nindy* | vxsim* | vxworks* | ebmon* | hms* | mvs* \
- | clix* | riscos* | uniplus* | iris* | isc* | rtu* | xenix* \
- | knetbsd* | mirbsd* | netbsd* \
- | bitrig* | openbsd* | solidbsd* | libertybsd* | os108* \
- | ekkobsd* | kfreebsd* | freebsd* | riscix* | lynxos* \
- | bosx* | nextstep* | cxux* | aout* | elf* | oabi* \
- | ptx* | coff* | ecoff* | winnt* | domain* | vsta* \
- | udi* | eabi* | lites* | ieee* | go32* | aux* | hcos* \
- | chorusrdb* | cegcc* | glidix* \
- | cygwin* | msys* | pe* | moss* | proelf* | rtems* \
- | midipix* | mingw32* | mingw64* | linux-gnu* | linux-android* \
- | linux-newlib* | linux-musl* | linux-uclibc* \
- | uxpv* | beos* | mpeix* | udk* | moxiebox* \
- | interix* | uwin* | mks* | rhapsody* | darwin* \
- | openstep* | oskit* | conix* | pw32* | nonstopux* \
- | storm-chaos* | tops10* | tenex* | tops20* | its* \
- | os2* | vos* | palmos* | uclinux* | nucleus* \
- | morphos* | superux* | rtmk* | windiss* \
- | powermax* | dnix* | nx6 | nx7 | sei* | dragonfly* \
- | skyos* | haiku* | rdos* | toppers* | drops* | es* \
- | onefs* | tirtos* | phoenix* | fuchsia* | redox* | bme* \
- | midnightbsd* | amdhsa* | unleashed* | emscripten* | wasi* \
- | nsk* | powerunix)
- # Remember, each alternative MUST END IN *, to match a version number.
- ;;
qnx*)
- case $cpu in
- x86 | i*86)
- ;;
- *)
- os=nto-$os
- ;;
- esac
+ os=qnx
;;
hiux*)
os=hiuxwe2
;;
- nto-qnx*)
- ;;
- nto*)
- os=`echo $os | sed -e 's|nto|nto-qnx|'`
- ;;
- sim | xray | os68k* | v88r* \
- | windows* | osx | abug | netware* | os9* \
- | macos* | mpw* | magic* | mmixware* | mon960* | lnews*)
- ;;
- linux-dietlibc)
- os=linux-dietlibc
- ;;
- linux*)
- os=`echo $os | sed -e 's|linux|linux-gnu|'`
- ;;
lynx*178)
os=lynxos178
;;
lynx*5)
os=lynxos5
;;
+ lynxos*)
+ # don't get caught up in next wildcard
+ ;;
lynx*)
os=lynxos
;;
- mac*)
+ mac[0-9]*)
os=`echo "$os" | sed -e 's|mac|macos|'`
;;
opened*)
@@ -1475,18 +1454,12 @@
sysvr4)
os=sysv4
;;
- # This must come after sysvr4.
- sysv*)
- ;;
ose*)
os=ose
;;
*mint | mint[0-9]* | *MiNT | MiNT[0-9]*)
os=mint
;;
- zvmoe)
- os=zvmoe
- ;;
dicos*)
os=dicos
;;
@@ -1503,19 +1476,11 @@
;;
esac
;;
- nacl*)
- ;;
- ios)
- ;;
- none)
- ;;
- *-eabi)
- ;;
*)
- echo Invalid configuration \`"$1"\': system \`"$os"\' not recognized 1>&2
- exit 1
+ # No normalization, but not necessarily accepted, that comes below.
;;
esac
+
else
# Here we handle the default operating systems that come with various machines.
@@ -1528,6 +1493,7 @@
# will signal an error saying that MANUFACTURER isn't an operating
# system, and we'll never get to this point.
+kernel=
case $cpu-$vendor in
score-*)
os=elf
@@ -1539,7 +1505,8 @@
os=riscix1.2
;;
arm*-rebel)
- os=linux
+ kernel=linux
+ os=gnu
;;
arm*-semi)
os=aout
@@ -1705,84 +1672,169 @@
os=none
;;
esac
+
fi
+# Now, validate our (potentially fixed-up) OS.
+case $os in
+ # Sometimes we do "kernel-abi", so those need to count as OSes.
+ musl* | newlib* | uclibc*)
+ ;;
+ # Likewise for "kernel-libc"
+ eabi | eabihf | gnueabi | gnueabihf)
+ ;;
+ # Now accept the basic system types.
+ # The portable systems comes first.
+ # Each alternative MUST end in a * to match a version number.
+ gnu* | android* | bsd* | mach* | minix* | genix* | ultrix* | irix* \
+ | *vms* | esix* | aix* | cnk* | sunos | sunos[34]* \
+ | hpux* | unos* | osf* | luna* | dgux* | auroraux* | solaris* \
+ | sym* | plan9* | psp* | sim* | xray* | os68k* | v88r* \
+ | hiux* | abug | nacl* | netware* | windows* \
+ | os9* | macos* | osx* | ios* \
+ | mpw* | magic* | mmixware* | mon960* | lnews* \
+ | amigaos* | amigados* | msdos* | newsos* | unicos* | aof* \
+ | aos* | aros* | cloudabi* | sortix* | twizzler* \
+ | nindy* | vxsim* | vxworks* | ebmon* | hms* | mvs* \
+ | clix* | riscos* | uniplus* | iris* | isc* | rtu* | xenix* \
+ | mirbsd* | netbsd* | dicos* | openedition* | ose* \
+ | bitrig* | openbsd* | solidbsd* | libertybsd* | os108* \
+ | ekkobsd* | freebsd* | riscix* | lynxos* | os400* \
+ | bosx* | nextstep* | cxux* | aout* | elf* | oabi* \
+ | ptx* | coff* | ecoff* | winnt* | domain* | vsta* \
+ | udi* | lites* | ieee* | go32* | aux* | hcos* \
+ | chorusrdb* | cegcc* | glidix* \
+ | cygwin* | msys* | pe* | moss* | proelf* | rtems* \
+ | midipix* | mingw32* | mingw64* | mint* \
+ | uxpv* | beos* | mpeix* | udk* | moxiebox* \
+ | interix* | uwin* | mks* | rhapsody* | darwin* \
+ | openstep* | oskit* | conix* | pw32* | nonstopux* \
+ | storm-chaos* | tops10* | tenex* | tops20* | its* \
+ | os2* | vos* | palmos* | uclinux* | nucleus* | morphos* \
+ | scout* | superux* | sysv* | rtmk* | tpf* | windiss* \
+ | powermax* | dnix* | nx6 | nx7 | sei* | dragonfly* \
+ | skyos* | haiku* | rdos* | toppers* | drops* | es* \
+ | onefs* | tirtos* | phoenix* | fuchsia* | redox* | bme* \
+ | midnightbsd* | amdhsa* | unleashed* | emscripten* | wasi* \
+ | nsk* | powerunix* | genode* | zvmoe* | qnx* )
+ ;;
+ # This one is extra strict with allowed versions
+ sco3.2v2 | sco3.2v[4-9]* | sco5v6*)
+ # Don't forget version if it is 3.2v4 or newer.
+ ;;
+ none)
+ ;;
+ *)
+ echo Invalid configuration \`"$1"\': OS \`"$os"\' not recognized 1>&2
+ exit 1
+ ;;
+esac
+
+# As a final step for OS-related things, validate the OS-kernel combination
+# (given a valid OS), if there is a kernel.
+case $kernel-$os in
+ linux-gnu* | linux-dietlibc* | linux-android* | linux-newlib* | linux-musl* | linux-uclibc* )
+ ;;
+ -dietlibc* | -newlib* | -musl* | -uclibc* )
+ # These are just libc implementations, not actual OSes, and thus
+ # require a kernel.
+ echo "Invalid configuration \`$1': libc \`$os' needs explicit kernel." 1>&2
+ exit 1
+ ;;
+ kfreebsd*-gnu* | kopensolaris*-gnu*)
+ ;;
+ nto-qnx*)
+ ;;
+ *-eabi* | *-gnueabi*)
+ ;;
+ -*)
+ # Blank kernel with real OS is always fine.
+ ;;
+ *-*)
+ echo "Invalid configuration \`$1': Kernel \`$kernel' not known to work with OS \`$os'." 1>&2
+ exit 1
+ ;;
+esac
+
# Here we handle the case where we know the os, and the CPU type, but not the
# manufacturer. We pick the logical manufacturer.
case $vendor in
unknown)
- case $os in
- riscix*)
+ case $cpu-$os in
+ *-riscix*)
vendor=acorn
;;
- sunos*)
+ *-sunos*)
vendor=sun
;;
- cnk*|-aix*)
+ *-cnk* | *-aix*)
vendor=ibm
;;
- beos*)
+ *-beos*)
vendor=be
;;
- hpux*)
+ *-hpux*)
vendor=hp
;;
- mpeix*)
+ *-mpeix*)
vendor=hp
;;
- hiux*)
+ *-hiux*)
vendor=hitachi
;;
- unos*)
+ *-unos*)
vendor=crds
;;
- dgux*)
+ *-dgux*)
vendor=dg
;;
- luna*)
+ *-luna*)
vendor=omron
;;
- genix*)
+ *-genix*)
vendor=ns
;;
- clix*)
+ *-clix*)
vendor=intergraph
;;
- mvs* | opened*)
+ *-mvs* | *-opened*)
+ vendor=ibm
+ ;;
+ *-os400*)
vendor=ibm
;;
- os400*)
+ s390-* | s390x-*)
vendor=ibm
;;
- ptx*)
+ *-ptx*)
vendor=sequent
;;
- tpf*)
+ *-tpf*)
vendor=ibm
;;
- vxsim* | vxworks* | windiss*)
+ *-vxsim* | *-vxworks* | *-windiss*)
vendor=wrs
;;
- aux*)
+ *-aux*)
vendor=apple
;;
- hms*)
+ *-hms*)
vendor=hitachi
;;
- mpw* | macos*)
+ *-mpw* | *-macos*)
vendor=apple
;;
- *mint | mint[0-9]* | *MiNT | MiNT[0-9]*)
+ *-*mint | *-mint[0-9]* | *-*MiNT | *-MiNT[0-9]*)
vendor=atari
;;
- vos*)
+ *-vos*)
vendor=stratus
;;
esac
;;
esac
-echo "$cpu-$vendor-$os"
+echo "$cpu-$vendor-${kernel:+$kernel-}$os"
exit
# Local variables:
diff -Nur ghc-8.10.2/configure ghc-8.10.2.new/configure
--- ghc-8.10.2/configure 2020-08-08 04:53:43.000000000 -0600
+++ ghc-8.10.2.new/configure 2020-11-27 12:00:06.000000000 -0700
@@ -3552,7 +3552,7 @@
else
case "$build_cpu" in
- aarch64*)
+ aarch64*|arm64*)
BuildArch="aarch64"
;;
alpha*)
@@ -3717,7 +3717,7 @@
else
case "$host_cpu" in
- aarch64*)
+ aarch64*|arm64*)
HostArch="aarch64"
;;
alpha*)
@@ -3871,7 +3871,7 @@
then
case "$host_cpu" in
- aarch64*)
+ aarch64*|arm64*)
TargetArch="aarch64"
;;
alpha*)
@@ -4034,7 +4034,7 @@
else
case "$target_cpu" in
- aarch64*)
+ aarch64*|arm64*)
TargetArch="aarch64"
;;
alpha*)
@@ -4183,12 +4183,13 @@
fi
- case "$target_vendor-$target_os" in
+ llvm_target_cpu=$target_cpu
+ case "$target" in
*-freebsd*-gnueabihf)
llvm_target_vendor="unknown"
llvm_target_os="freebsd-gnueabihf"
;;
- hardfloat-*eabi)
+ *-hardfloat-*eabi)
llvm_target_vendor="unknown"
llvm_target_os="$target_os""hf"
;;
@@ -4200,7 +4201,7 @@
# for the LLVM Target. Otherwise these would be
# turned into just `-linux` and fail to be found
# in the `llvm-targets` file.
- *-android*|*-gnueabi*|*-musleabi*)
+ *-android*|*-gnueabi*)
case "$target_vendor" in
pc|gentoo|w64) # like i686-pc-linux-gnu, i686-gentoo-freebsd8, x86_64-w64-mingw32
@@ -4218,7 +4219,80 @@
;;
esac
- llvm_target_os="$target_os"
+ llvm_target_os="$target_os"
+ ;;
+ # apple is a bit about their naming scheme for
+ # aarch64; and clang on macOS doesn't know that
+ # aarch64 would be arm64. So for LLVM we'll need
+ # to call it arm64; while we'll refer to it internally
+ # as aarch64 for consistency and sanity.
+ aarch64-apple-*|arm64-apple-*)
+ llvm_target_cpu="arm64"
+
+ case "$target_vendor" in
+ pc|gentoo|w64) # like i686-pc-linux-gnu, i686-gentoo-freebsd8, x86_64-w64-mingw32
+ llvm_target_vendor="unknown"
+ ;;
+ softfloat) # like armv5tel-softfloat-linux-gnueabi
+ llvm_target_vendor="unknown"
+ ;;
+ hardfloat) # like armv7a-hardfloat-linux-gnueabi
+ llvm_target_vendor="unknown"
+ ;;
+ *)
+ #pass thru by default
+ llvm_target_vendor="$target_vendor"
+ ;;
+ esac
+
+
+ case "$target_os" in
+ gnu*) # e.g. i686-unknown-gnu0.9
+ llvm_target_os="gnu"
+ ;;
+ # watchos and tvos are ios variants as of May 2017.
+ ios|watchos|tvos)
+ llvm_target_os="ios"
+ ;;
+ linux-android*)
+ llvm_target_os="linux-android"
+ ;;
+ linux-*|linux)
+ llvm_target_os="linux"
+ ;;
+ openbsd*)
+ llvm_target_os="openbsd"
+ ;;
+ # As far as I'm aware, none of these have relevant variants
+ freebsd|netbsd|dragonfly|hpux|linuxaout|kfreebsdgnu|freebsd2|mingw32|darwin|nextstep2|nextstep3|sunos4|ultrix|haiku)
+ llvm_target_os="$target_os"
+ ;;
+ msys)
+ as_fn_error $? "Building GHC using the msys toolchain is not supported; please use mingw instead. Perhaps you need to set 'MSYSTEM=MINGW64 or MINGW32?'" "$LINENO" 5
+ ;;
+ aix*) # e.g. powerpc-ibm-aix7.1.3.0
+ llvm_target_os="aix"
+ ;;
+ darwin*) # e.g. aarch64-apple-darwin14
+ llvm_target_os="darwin"
+ ;;
+ solaris2*)
+ llvm_target_os="solaris2"
+ ;;
+ freebsd*) # like i686-gentoo-freebsd7
+ # i686-gentoo-freebsd8
+ # i686-gentoo-freebsd8.2
+ llvm_target_os="freebsd"
+ ;;
+ nto-qnx*)
+ llvm_target_os="nto-qnx"
+ ;;
+ *)
+ echo "Unknown OS $target_os"
+ exit 1
+ ;;
+ esac
+
;;
*)
@@ -4288,7 +4362,7 @@
;;
esac
- LlvmTarget="$target_cpu-$llvm_target_vendor-$llvm_target_os"
+ LlvmTarget="$llvm_target_cpu-$llvm_target_vendor-$llvm_target_os"
@@ -10243,7 +10317,7 @@
test -z "$2" || eval "$2=\"ArchARM {armISA = \$ARM_ISA, armISAExt = \$ARM_ISA_EXT, armABI = \$ARM_ABI}\""
;;
aarch64)
- test -z "$2" || eval "$2=ArchARM64"
+ test -z "$2" || eval "$2=ArchAArch64"
;;
alpha)
test -z "$2" || eval "$2=ArchAlpha"
@@ -10344,10 +10418,14 @@
if ac_fn_c_try_link "$LINENO"; then :
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
$as_echo "yes" >&6; }
- TargetHasSubsectionsViaSymbols=YES
+ if test x"$TargetArch" = xaarch64; then
+ TargetHasSubsectionsViaSymbols=NO
+ else
+ TargetHasSubsectionsViaSymbols=YES
$as_echo "#define HAVE_SUBSECTIONS_VIA_SYMBOLS 1" >>confdefs.h
+ fi
else
TargetHasSubsectionsViaSymbols=NO
diff -Nur ghc-8.10.2/includes/CodeGen.Platform.hs ghc-8.10.2.new/includes/CodeGen.Platform.hs
--- ghc-8.10.2/includes/CodeGen.Platform.hs 2020-08-03 15:51:22.000000000 -0600
+++ ghc-8.10.2.new/includes/CodeGen.Platform.hs 2020-11-26 21:24:44.000000000 -0700
@@ -94,7 +94,7 @@
# define zmm14 30
# define zmm15 31
--- Note: these are only needed for ARM/ARM64 because globalRegMaybe is now used in CmmSink.hs.
+-- Note: these are only needed for ARM/AArch64 because globalRegMaybe is now used in CmmSink.hs.
-- Since it's only used to check 'isJust', the actual values don't matter, thus
-- I'm not sure if these are the correct numberings.
-- Normally, the register names are just stringified as part of the REG() macro
@@ -1096,4 +1096,3 @@
freeReg = panic "freeReg not defined for this platform"
#endif
-
diff -Nur ghc-8.10.2/includes/rts/storage/GC.h ghc-8.10.2.new/includes/rts/storage/GC.h
--- ghc-8.10.2/includes/rts/storage/GC.h 2020-08-03 15:51:22.000000000 -0600
+++ ghc-8.10.2.new/includes/rts/storage/GC.h 2020-11-26 21:24:44.000000000 -0700
@@ -199,7 +199,7 @@
AdjustorWritable allocateExec(W_ len, AdjustorExecutable *exec_addr);
void flushExec(W_ len, AdjustorExecutable exec_addr);
-#if defined(ios_HOST_OS)
+#if (defined(arm_HOST_ARCH) || defined(aarch64_HOST_ARCH)) && (defined(ios_HOST_OS) || defined(darwin_HOST_OS))
AdjustorWritable execToWritable(AdjustorExecutable exec);
#endif
void freeExec (AdjustorExecutable p);
diff -Nur ghc-8.10.2/includes/stg/Regs.h ghc-8.10.2.new/includes/stg/Regs.h
--- ghc-8.10.2/includes/stg/Regs.h 2019-11-02 08:49:16.000000000 -0600
+++ ghc-8.10.2.new/includes/stg/Regs.h 2020-11-27 21:28:42.000000000 -0700
@@ -442,7 +442,7 @@
#error BaseReg must be in a register for THREADED_RTS
#endif
#define BaseReg (&((struct PartCapability_ *)MainCapability)->r)
-#define ASSIGN_BaseReg(e) (e)
+#define ASSIGN_BaseReg(e) ((void)e)
#endif
#if defined(REG_Sp) && !defined(NO_GLOBAL_REG_DECLS)
diff -Nur ghc-8.10.2/libraries/ghc-boot/GHC/Platform.hs ghc-8.10.2.new/libraries/ghc-boot/GHC/Platform.hs
--- ghc-8.10.2/libraries/ghc-boot/GHC/Platform.hs 2020-08-03 15:51:22.000000000 -0600
+++ ghc-8.10.2.new/libraries/ghc-boot/GHC/Platform.hs 2020-11-27 10:54:58.000000000 -0700
@@ -115,6 +115,7 @@
, armABI :: ArmABI
}
| ArchARM64
+ | ArchAArch64
| ArchAlpha
| ArchMipseb
| ArchMipsel
@@ -156,6 +157,7 @@
ARMv6 -> "v6"
ARMv7 -> "v7"
ArchARM64 -> "aarch64"
+ ArchAArch64 -> "aarch64"
ArchAlpha -> "alpha"
ArchMipseb -> "mipseb"
ArchMipsel -> "mipsel"
@@ -164,6 +166,7 @@
isARM :: Arch -> Bool
isARM (ArchARM {}) = True
isARM ArchARM64 = True
+isARM ArchAArch64 = True
isARM _ = False
-- | Operating systems that the native code generator knows about.
diff -Nur ghc-8.10.2/libraries/ghci/GHCi/InfoTable.hsc ghc-8.10.2.new/libraries/ghci/GHCi/InfoTable.hsc
--- ghc-8.10.2/libraries/ghci/GHCi/InfoTable.hsc 2020-08-03 15:51:22.000000000 -0600
+++ ghc-8.10.2.new/libraries/ghci/GHCi/InfoTable.hsc 2020-11-26 21:24:44.000000000 -0700
@@ -73,7 +73,7 @@
| ArchX86_64
| ArchAlpha
| ArchARM
- | ArchARM64
+ | ArchAArch64
| ArchPPC64
| ArchPPC64LE
| ArchS390X
@@ -95,7 +95,7 @@
#elif defined(arm_HOST_ARCH)
ArchARM
#elif defined(aarch64_HOST_ARCH)
- ArchARM64
+ ArchAArch64
#elif defined(powerpc64_HOST_ARCH)
ArchPPC64
#elif defined(powerpc64le_HOST_ARCH)
@@ -211,7 +211,7 @@
, 0x11, 0xff, 0x2f, 0xe1
, byte0 w32, byte1 w32, byte2 w32, byte3 w32]
- ArchARM64 { } ->
+ ArchAArch64 { } ->
-- Generates:
--
-- ldr x1, label
Binary files ghc-8.10.2/libraries/integer-gmp/gmp/gmp-tarballs/gmp-6.1.2-nodoc.tar.bz2 and ghc-8.10.2.new/libraries/integer-gmp/gmp/gmp-tarballs/gmp-6.1.2-nodoc.tar.bz2 differ
Binary files ghc-8.10.2/libraries/integer-gmp/gmp/gmp-tarballs/gmp-6.2.1-nodoc.tar.bz2 and ghc-8.10.2.new/libraries/integer-gmp/gmp/gmp-tarballs/gmp-6.2.1-nodoc.tar.bz2 differ
diff -Nur ghc-8.10.2/libraries/integer-gmp/gmp/gmpsrc.patch ghc-8.10.2.new/libraries/integer-gmp/gmp/gmpsrc.patch
--- ghc-8.10.2/libraries/integer-gmp/gmp/gmpsrc.patch 2020-08-03 15:51:22.000000000 -0600
+++ ghc-8.10.2.new/libraries/integer-gmp/gmp/gmpsrc.patch 2020-11-26 21:28:29.000000000 -0700
@@ -1,16 +1,70 @@
-diff -Naur gmp-6.1.2/configure gmpbuild/configure
---- gmp-6.1.2/configure 2016-12-16 10:45:32.000000000 -0500
-+++ gmpbuild/configure 2017-01-29 15:18:01.037775639 -0500
-@@ -28181,7 +28181,7 @@
+diff -Naur gmp-6.2.1/Makefile.am gmpbuild/Makefile.am
+--- gmp-6.2.1/Makefile.am 2020-11-14 11:45:09.000000000 -0700
++++ gmpbuild/Makefile.am 2020-11-19 22:53:46.000000000 -0700
+@@ -112,7 +112,7 @@
+ LIBGMPXX_LT_AGE = 6
+
+
+-SUBDIRS = tests mpn mpz mpq mpf printf scanf rand cxx demos tune doc
++SUBDIRS = tests mpn mpz mpq mpf printf scanf rand cxx demos tune
+
+ EXTRA_DIST = configfsf.guess configfsf.sub .gdbinit INSTALL.autoconf \
+ COPYING.LESSERv3 COPYINGv2 COPYINGv3
+diff -Naur gmp-6.2.1/Makefile.in gmpbuild/Makefile.in
+--- gmp-6.2.1/Makefile.in 2020-11-14 11:45:16.000000000 -0700
++++ gmpbuild/Makefile.in 2020-11-19 22:58:19.000000000 -0700
+@@ -572,7 +572,7 @@
+ LIBGMPXX_LT_CURRENT = 10
+ LIBGMPXX_LT_REVISION = 1
+ LIBGMPXX_LT_AGE = 6
+-SUBDIRS = tests mpn mpz mpq mpf printf scanf rand cxx demos tune doc
++SUBDIRS = tests mpn mpz mpq mpf printf scanf rand cxx demos tune
+
+ # Put asl.h here for now.
+
+diff -Naur gmp-6.2.1/configure gmpbuild/configure
+--- gmp-6.2.1/configure 2020-11-14 11:45:15.000000000 -0700
++++ gmpbuild/configure 2020-11-19 23:00:13.000000000 -0700
+@@ -4088,8 +4088,8 @@
+ #
+ cclist="gcc cc"
+
+-gcc_cflags="-O2 -pedantic"
+-gcc_64_cflags="-O2 -pedantic"
++gcc_cflags="-O2 -pedantic -fPIC"
++gcc_64_cflags="-O2 -pedantic -fPIC"
+ cc_cflags="-O"
+ cc_64_cflags="-O"
+
+@@ -26220,6 +26220,8 @@
+ 64)
+ case $host in
+ *-*-darwin*)
++echo "define(<PIC_ALWAYS>,<yes>)" >> $gmp_tmpconfigm4
++
+
+ echo "include_mpn(\`arm64/darwin.m4')" >> $gmp_tmpconfigm4i
+ ;;
+@@ -27176,6 +27178,9 @@
+ case $host in
+ *-*-darwin*)
+
++echo "define(<PIC_ALWAYS>,<yes>)" >> $gmp_tmpconfigm4
++
++
+ echo "include_mpn(\`x86_64/darwin.m4')" >> $gmp_tmpconfigm4i
+ ;;
+ *-*-mingw* | *-*-msys | *-*-cygwin)
+@@ -27985,7 +27990,7 @@
# FIXME: Upcoming version of autoconf/automake may not like broken lines.
# Right now automake isn't accepting the new AC_CONFIG_FILES scheme.
--ac_config_files="$ac_config_files Makefile mpf/Makefile mpn/Makefile mpq/Makefile mpz/Makefile printf/Makefile scanf/Makefile rand/Makefile cxx/Makefile tests/Makefile tests/devel/Makefile tests/mpf/Makefile tests/mpn/Makefile tests/mpq/Makefile tests/mpz/Makefile tests/rand/Makefile tests/misc/Makefile tests/cxx/Makefile doc/Makefile tune/Makefile demos/Makefile demos/calc/Makefile demos/expr/Makefile gmp.h:gmp-h.in"
-+ac_config_files="$ac_config_files Makefile mpf/Makefile mpn/Makefile mpq/Makefile mpz/Makefile printf/Makefile scanf/Makefile rand/Makefile cxx/Makefile tests/Makefile tests/devel/Makefile tests/mpf/Makefile tests/mpn/Makefile tests/mpq/Makefile tests/mpz/Makefile tests/rand/Makefile tests/misc/Makefile tests/cxx/Makefile tune/Makefile demos/Makefile demos/calc/Makefile demos/expr/Makefile gmp.h:gmp-h.in"
+-ac_config_files="$ac_config_files Makefile mpf/Makefile mpn/Makefile mpq/Makefile mpz/Makefile printf/Makefile scanf/Makefile rand/Makefile cxx/Makefile tests/Makefile tests/devel/Makefile tests/mpf/Makefile tests/mpn/Makefile tests/mpq/Makefile tests/mpz/Makefile tests/rand/Makefile tests/misc/Makefile tests/cxx/Makefile doc/Makefile tune/Makefile demos/Makefile demos/calc/Makefile demos/expr/Makefile gmp.h:gmp-h.in gmp.pc:gmp.pc.in gmpxx.pc:gmpxx.pc.in"
++ac_config_files="$ac_config_files Makefile mpf/Makefile mpn/Makefile mpq/Makefile mpz/Makefile printf/Makefile scanf/Makefile rand/Makefile cxx/Makefile tests/Makefile tests/devel/Makefile tests/mpf/Makefile tests/mpn/Makefile tests/mpq/Makefile tests/mpz/Makefile tests/rand/Makefile tests/misc/Makefile tests/cxx/Makefile tune/Makefile demos/Makefile demos/calc/Makefile demos/expr/Makefile gmp.h:gmp-h.in gmp.pc:gmp.pc.in gmpxx.pc:gmpxx.pc.in"
cat >confcache <<\_ACEOF
# This file is a shell script that caches the results of configure
-@@ -29325,7 +29325,6 @@
+@@ -29129,7 +29134,6 @@
"tests/rand/Makefile") CONFIG_FILES="$CONFIG_FILES tests/rand/Makefile" ;;
"tests/misc/Makefile") CONFIG_FILES="$CONFIG_FILES tests/misc/Makefile" ;;
"tests/cxx/Makefile") CONFIG_FILES="$CONFIG_FILES tests/cxx/Makefile" ;;
@@ -18,27 +72,26 @@
"tune/Makefile") CONFIG_FILES="$CONFIG_FILES tune/Makefile" ;;
"demos/Makefile") CONFIG_FILES="$CONFIG_FILES demos/Makefile" ;;
"demos/calc/Makefile") CONFIG_FILES="$CONFIG_FILES demos/calc/Makefile" ;;
-diff -Naur gmp-6.1.2/Makefile.am gmpbuild/Makefile.am
---- gmp-6.1.2/Makefile.am 2016-12-16 10:45:27.000000000 -0500
-+++ gmpbuild/Makefile.am 2017-01-29 15:14:20.764370926 -0500
-@@ -110,7 +110,7 @@
- LIBGMPXX_LT_AGE = 5
-
+diff -Naur gmp-6.2.1/configure.ac gmpbuild/configure.ac
+--- gmp-6.2.1/configure.ac 2020-11-14 11:45:09.000000000 -0700
++++ gmpbuild/configure.ac 2020-11-19 22:56:58.000000000 -0700
+@@ -3703,6 +3703,7 @@
+ 64)
+ case $host in
+ *-*-darwin*)
++ GMP_DEFINE_RAW(["define(<PIC_ALWAYS>,<yes>)"])
+ GMP_INCLUDE_MPN(arm64/darwin.m4) ;;
+ *)
+ GMP_INCLUDE_MPN(arm64/arm64-defs.m4) ;;
+diff -Naur gmp-6.2.1/mpn/asm-defs.m4 gmpbuild/mpn/asm-defs.m4
+--- gmp-6.2.1/mpn/asm-defs.m4 2020-11-14 11:45:09.000000000 -0700
++++ gmpbuild/mpn/asm-defs.m4 2020-11-19 22:53:46.000000000 -0700
+@@ -1051,7 +1051,7 @@
+ dnl systems which are always PIC. PIC_ALWAYS established in config.m4
+ dnl identifies these for us.
--SUBDIRS = tests mpn mpz mpq mpf printf scanf rand cxx demos tune doc
-+SUBDIRS = tests mpn mpz mpq mpf printf scanf rand cxx demos tune
+-ifelse(`PIC_ALWAYS',`yes',`define(`PIC')')
++ifelse(PIC_ALWAYS,yes,`define(`PIC')')
- EXTRA_DIST = configfsf.guess configfsf.sub .gdbinit INSTALL.autoconf \
- COPYING.LESSERv3 COPYINGv2 COPYINGv3
-diff -Naur gmp-6.1.2/Makefile.in gmpbuild/Makefile.in
---- gmp-6.1.2/Makefile.in 2016-12-16 10:45:34.000000000 -0500
-+++ gmpbuild/Makefile.in 2017-01-29 15:14:32.596446554 -0500
-@@ -566,7 +566,7 @@
- LIBGMPXX_LT_CURRENT = 9
- LIBGMPXX_LT_REVISION = 2
- LIBGMPXX_LT_AGE = 5
--SUBDIRS = tests mpn mpz mpq mpf printf scanf rand cxx demos tune doc
-+SUBDIRS = tests mpn mpz mpq mpf printf scanf rand cxx demos tune
- # The "test -f" support for srcdir!=builddir is similar to the automake .c.o
- # etc rules, but with each foo.c explicitly, since $< is not portable
+ dnl Various possible defines passed from the Makefile that are to be tested
diff -Nur ghc-8.10.2/llvm-targets ghc-8.10.2.new/llvm-targets
--- ghc-8.10.2/llvm-targets 2020-08-03 15:51:22.000000000 -0600
+++ ghc-8.10.2.new/llvm-targets 2020-11-26 21:24:44.000000000 -0700
@@ -36,6 +36,8 @@
,("s390x-ibm-linux", ("E-m:e-i1:8:16-i8:8:16-i64:64-f128:64-a:8:16-n32:64", "z10", ""))
,("i386-apple-darwin", ("e-m:o-p:32:32-f64:32:64-f80:128-n8:16:32-S128", "yonah", ""))
,("x86_64-apple-darwin", ("e-m:o-i64:64-f80:128-n8:16:32:64-S128", "core2", ""))
+,("arm64-apple-darwin", ("e-m:o-i64:64-i128:128-n32:64-S128", "vortex", "+v8.3a +fp-armv8 +neon +crc +crypto +fullfp16 +ras +lse +rdm +rcpc +zcm +zcz +sha2 +aes"))
+,("aarch64-apple-darwin", ("e-m:o-i64:64-i128:128-n32:64-S128", "vortex", "+v8.3a +fp-armv8 +neon +crc +crypto +fullfp16 +ras +lse +rdm +rcpc +zcm +zcz +sha2 +aes"))
,("armv7-apple-ios", ("e-m:o-p:32:32-f64:32:64-v64:32:64-v128:32:128-a:0:32-n32-S32", "generic", ""))
,("aarch64-apple-ios", ("e-m:o-i64:64-i128:128-n32:64-S128", "generic", "+neon"))
,("i386-apple-ios", ("e-m:o-p:32:32-f64:32:64-f80:128-n8:16:32-S128", "yonah", ""))
diff -Nur ghc-8.10.2/rts/Adjustor.c ghc-8.10.2.new/rts/Adjustor.c
--- ghc-8.10.2/rts/Adjustor.c 2019-11-02 08:49:16.000000000 -0600
+++ ghc-8.10.2.new/rts/Adjustor.c 2020-11-26 21:24:44.000000000 -0700
@@ -99,7 +99,7 @@
{
ffi_closure *cl;
-#if defined(ios_HOST_OS)
+#if defined(ios_HOST_OS) || defined(darwin_HOST_OS)
cl = execToWritable(ptr);
#else
cl = (ffi_closure*)ptr;
diff -Nur ghc-8.10.2/rts/StgCRun.c ghc-8.10.2.new/rts/StgCRun.c
--- ghc-8.10.2/rts/StgCRun.c 2020-08-03 15:51:22.000000000 -0600
+++ ghc-8.10.2.new/rts/StgCRun.c 2020-11-26 21:24:44.000000000 -0700
@@ -973,7 +973,7 @@
"br %1\n\t"
".globl " STG_RETURN "\n\t"
-#if !defined(ios_HOST_OS)
+#if !defined(ios_HOST_OS) && !defined(darwin_HOST_OS)
".type " STG_RETURN ", %%function\n"
#endif
STG_RETURN ":\n\t"
@@ -982,7 +982,7 @@
*/
"add sp, sp, %3\n\t"
/*
- * Return the new register table, taking it from Stg's R1 (ARM64's R22).
+ * Return the new register table, taking it from Stg's R1 (AArch64's R22).
*/
"mov %0, x22\n\t"
/*
diff -Nur ghc-8.10.2/rts/linker/elf_plt_aarch64.c ghc-8.10.2.new/rts/linker/elf_plt_aarch64.c
--- ghc-8.10.2/rts/linker/elf_plt_aarch64.c 2019-11-10 07:20:41.000000000 -0700
+++ ghc-8.10.2.new/rts/linker/elf_plt_aarch64.c 2020-11-26 21:24:44.000000000 -0700
@@ -46,8 +46,8 @@
bool
makeStubAarch64(Stub * s) {
// We (the linker) may corrupt registers x16 (IP0) and x17 (IP1) [AAPCS64]
- // and the condition flags, according to the "ELF for the ARM64
- // Architecture".
+ // and the condition flags, according to the "ELF for the ARM 64-bit
+ // Architecture (AArch64)".
//
// [Special purpose regs]
// X16 and X17 are IP0 and IP1, intra-procedure-call temporary registers.
diff -Nur ghc-8.10.2/rts/linker/elf_reloc.c ghc-8.10.2.new/rts/linker/elf_reloc.c
--- ghc-8.10.2/rts/linker/elf_reloc.c 2019-11-10 07:20:41.000000000 -0700
+++ ghc-8.10.2.new/rts/linker/elf_reloc.c 2020-11-26 21:27:32.000000000 -0700
@@ -4,7 +4,7 @@
#if defined(OBJFORMAT_ELF)
-/* we currently only use this abstraction for elf/arm64 */
+/* we currently only use this abstraction for elf/aarch64 */
#if defined(aarch64_HOST_ARCH)
bool
diff -Nur ghc-8.10.2/rts/package.conf.in ghc-8.10.2.new/rts/package.conf.in
--- ghc-8.10.2/rts/package.conf.in 2020-08-03 15:51:22.000000000 -0600
+++ ghc-8.10.2.new/rts/package.conf.in 2020-11-26 21:24:44.000000000 -0700
@@ -296,7 +296,7 @@
, "-Wl,-search_paths_first"
#endif
-#if defined(darwin_HOST_OS) && !defined(x86_64_HOST_ARCH)
+#if defined(darwin_HOST_OS) && !defined(x86_64_HOST_ARCH) && !defined(aarch64_HOST_ARCH)
, "-read_only_relocs", "warning"
#endif
diff -Nur ghc-8.10.2/rts/rts.cabal.in ghc-8.10.2.new/rts/rts.cabal.in
--- ghc-8.10.2/rts/rts.cabal.in 2020-08-03 15:51:22.000000000 -0600
+++ ghc-8.10.2.new/rts/rts.cabal.in 2020-11-26 21:24:44.000000000 -0700
@@ -355,7 +355,7 @@
if os(osx)
ld-options: "-Wl,-search_paths_first"
- if !arch(x86_64)
+ if !arch(x86_64) && !arch(aarch64)
ld-options: -read_only_relocs warning
cmm-sources: Apply.cmm
diff -Nur ghc-8.10.2/rts/sm/Storage.c ghc-8.10.2.new/rts/sm/Storage.c
--- ghc-8.10.2/rts/sm/Storage.c 2020-08-03 15:51:22.000000000 -0600
+++ ghc-8.10.2.new/rts/sm/Storage.c 2020-11-26 21:26:50.000000000 -0700
@@ -30,7 +30,7 @@
#include "GC.h"
#include "Evac.h"
#include "NonMoving.h"
-#if defined(ios_HOST_OS)
+#if defined(ios_HOST_OS) || defined(darwin_HOST_OS)
#include "Hash.h"
#endif
@@ -1541,7 +1541,7 @@
should be modified to use allocateExec instead of VirtualAlloc.
------------------------------------------------------------------------- */
-#if (defined(arm_HOST_ARCH) || defined(aarch64_HOST_ARCH)) && defined(ios_HOST_OS)
+#if (defined(arm_HOST_ARCH) || defined(aarch64_HOST_ARCH)) && (defined(ios_HOST_OS) || defined(darwin_HOST_OS))
#include <libkern/OSCacheControl.h>
#endif
@@ -1572,7 +1572,7 @@
/* x86 doesn't need to do anything, so just suppress some warnings. */
(void)len;
(void)exec_addr;
-#elif (defined(arm_HOST_ARCH) || defined(aarch64_HOST_ARCH)) && defined(ios_HOST_OS)
+#elif (defined(arm_HOST_ARCH) || defined(aarch64_HOST_ARCH)) && (defined(ios_HOST_OS) || defined(darwin_HOST_OS))
/* On iOS we need to use the special 'sys_icache_invalidate' call. */
sys_icache_invalidate(exec_addr, len);
#elif defined(__clang__)
@@ -1626,7 +1626,7 @@
RELEASE_SM_LOCK
}
-#elif defined(ios_HOST_OS)
+#elif (defined(arm_HOST_ARCH) || defined(aarch64_HOST_ARCH)) && (defined(ios_HOST_OS) || defined(darwin_HOST_OS))
static HashTable* allocatedExecs;
diff -Nur ghc-8.10.2/utils/llvm-targets/gen-data-layout.sh ghc-8.10.2.new/utils/llvm-targets/gen-data-layout.sh
--- ghc-8.10.2/utils/llvm-targets/gen-data-layout.sh 2020-08-03 15:51:22.000000000 -0600
+++ ghc-8.10.2.new/utils/llvm-targets/gen-data-layout.sh 2020-11-26 21:26:10.000000000 -0700
@@ -80,6 +80,9 @@
# macOS
"i386-apple-darwin"
"x86_64-apple-darwin"
+ "arm64-apple-darin"
+ "aarch64-apple-darwin"
+
# iOS
"armv7-apple-ios arm64-apple-ios"
"i386-apple-ios x86_64-apple-ios"
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment