Accepting request 324452 from devel:languages:haskell
1 OBS-URL: https://build.opensuse.org/request/show/324452 OBS-URL: https://build.opensuse.org/package/show/openSUSE:Factory/ghc?expand=0&rev=31
This commit is contained in:
commit
6adf9f27c3
File diff suppressed because it is too large
Load Diff
293
D349.patch
293
D349.patch
@ -1,293 +0,0 @@
|
||||
Index: ghc-7.8.4/compiler/ghci/Linker.lhs
|
||||
===================================================================
|
||||
--- ghc-7.8.4.orig/compiler/ghci/Linker.lhs
|
||||
+++ ghc-7.8.4/compiler/ghci/Linker.lhs
|
||||
@@ -123,7 +123,10 @@ data PersistentLinkerState
|
||||
-- The currently-loaded packages; always object code
|
||||
-- Held, as usual, in dependency order; though I am not sure if
|
||||
-- that is really important
|
||||
- pkgs_loaded :: ![PackageId]
|
||||
+ pkgs_loaded :: ![PackageId],
|
||||
+ -- we need to remember the name of the last temporary DLL/.so
|
||||
+ -- so we can link it
|
||||
+ last_temp_so :: !(Maybe FilePath)
|
||||
}
|
||||
|
||||
emptyPLS :: DynFlags -> PersistentLinkerState
|
||||
@@ -132,7 +135,8 @@ emptyPLS _ = PersistentLinkerState {
|
||||
itbl_env = emptyNameEnv,
|
||||
pkgs_loaded = init_pkgs,
|
||||
bcos_loaded = [],
|
||||
- objs_loaded = [] }
|
||||
+ objs_loaded = [],
|
||||
+ last_temp_so = Nothing }
|
||||
|
||||
-- Packages that don't need loading, because the compiler
|
||||
-- shares them with the interpreted program.
|
||||
@@ -314,14 +318,15 @@ reallyInitDynLinker dflags =
|
||||
; if null cmdline_lib_specs then return pls
|
||||
else do
|
||||
|
||||
- { mapM_ (preloadLib dflags lib_paths framework_paths) cmdline_lib_specs
|
||||
+ { pls1 <- foldM (preloadLib dflags lib_paths framework_paths) pls
|
||||
+ cmdline_lib_specs
|
||||
; maybePutStr dflags "final link ... "
|
||||
; ok <- resolveObjs
|
||||
|
||||
; if succeeded ok then maybePutStrLn dflags "done"
|
||||
else throwGhcExceptionIO (ProgramError "linking extra libraries/objects failed")
|
||||
|
||||
- ; return pls
|
||||
+ ; return pls1
|
||||
}}
|
||||
|
||||
|
||||
@@ -360,19 +365,22 @@ classifyLdInput dflags f
|
||||
return Nothing
|
||||
where platform = targetPlatform dflags
|
||||
|
||||
-preloadLib :: DynFlags -> [String] -> [String] -> LibrarySpec -> IO ()
|
||||
-preloadLib dflags lib_paths framework_paths lib_spec
|
||||
+preloadLib :: DynFlags -> [String] -> [String] -> PersistentLinkerState
|
||||
+ -> LibrarySpec -> IO (PersistentLinkerState)
|
||||
+preloadLib dflags lib_paths framework_paths pls lib_spec
|
||||
= do maybePutStr dflags ("Loading object " ++ showLS lib_spec ++ " ... ")
|
||||
case lib_spec of
|
||||
Object static_ish
|
||||
- -> do b <- preload_static lib_paths static_ish
|
||||
+ -> do (b, pls1) <- preload_static lib_paths static_ish
|
||||
maybePutStrLn dflags (if b then "done"
|
||||
else "not found")
|
||||
+ return pls1
|
||||
|
||||
Archive static_ish
|
||||
-> do b <- preload_static_archive lib_paths static_ish
|
||||
maybePutStrLn dflags (if b then "done"
|
||||
else "not found")
|
||||
+ return pls
|
||||
|
||||
DLL dll_unadorned
|
||||
-> do maybe_errstr <- loadDLL (mkSOName platform dll_unadorned)
|
||||
@@ -388,12 +396,14 @@ preloadLib dflags lib_paths framework_pa
|
||||
case err2 of
|
||||
Nothing -> maybePutStrLn dflags "done"
|
||||
Just _ -> preloadFailed mm lib_paths lib_spec
|
||||
+ return pls
|
||||
|
||||
DLLPath dll_path
|
||||
-> do maybe_errstr <- loadDLL dll_path
|
||||
case maybe_errstr of
|
||||
Nothing -> maybePutStrLn dflags "done"
|
||||
Just mm -> preloadFailed mm lib_paths lib_spec
|
||||
+ return pls
|
||||
|
||||
Framework framework ->
|
||||
if platformUsesFrameworks (targetPlatform dflags)
|
||||
@@ -401,6 +411,7 @@ preloadLib dflags lib_paths framework_pa
|
||||
case maybe_errstr of
|
||||
Nothing -> maybePutStrLn dflags "done"
|
||||
Just mm -> preloadFailed mm framework_paths lib_spec
|
||||
+ return pls
|
||||
else panic "preloadLib Framework"
|
||||
|
||||
where
|
||||
@@ -420,11 +431,13 @@ preloadLib dflags lib_paths framework_pa
|
||||
-- Not interested in the paths in the static case.
|
||||
preload_static _paths name
|
||||
= do b <- doesFileExist name
|
||||
- if not b then return False
|
||||
- else do if dynamicGhc
|
||||
- then dynLoadObjs dflags [name]
|
||||
- else loadObj name
|
||||
- return True
|
||||
+ if not b then return (False, pls)
|
||||
+ else if dynamicGhc
|
||||
+ then do pls1 <- dynLoadObjs dflags pls [name]
|
||||
+ return (True, pls1)
|
||||
+ else do loadObj name
|
||||
+ return (True, pls)
|
||||
+
|
||||
preload_static_archive _paths name
|
||||
= do b <- doesFileExist name
|
||||
if not b then return False
|
||||
@@ -791,8 +804,8 @@ dynLinkObjs dflags pls objs = do
|
||||
wanted_objs = map nameOfObject unlinkeds
|
||||
|
||||
if dynamicGhc
|
||||
- then do dynLoadObjs dflags wanted_objs
|
||||
- return (pls1, Succeeded)
|
||||
+ then do pls2 <- dynLoadObjs dflags pls1 wanted_objs
|
||||
+ return (pls2, Succeeded)
|
||||
else do mapM_ loadObj wanted_objs
|
||||
|
||||
-- Link them all together
|
||||
@@ -806,9 +819,11 @@ dynLinkObjs dflags pls objs = do
|
||||
pls2 <- unload_wkr dflags [] pls1
|
||||
return (pls2, Failed)
|
||||
|
||||
-dynLoadObjs :: DynFlags -> [FilePath] -> IO ()
|
||||
-dynLoadObjs _ [] = return ()
|
||||
-dynLoadObjs dflags objs = do
|
||||
+
|
||||
+dynLoadObjs :: DynFlags -> PersistentLinkerState -> [FilePath]
|
||||
+ -> IO PersistentLinkerState
|
||||
+dynLoadObjs _ pls [] = return pls
|
||||
+dynLoadObjs dflags pls objs = do
|
||||
let platform = targetPlatform dflags
|
||||
soFile <- newTempName dflags (soExt platform)
|
||||
let -- When running TH for a non-dynamic way, we still need to make
|
||||
@@ -816,10 +831,22 @@ dynLoadObjs dflags objs = do
|
||||
-- Opt_Static off
|
||||
dflags1 = gopt_unset dflags Opt_Static
|
||||
dflags2 = dflags1 {
|
||||
- -- We don't want to link the ldInputs in; we'll
|
||||
- -- be calling dynLoadObjs with any objects that
|
||||
- -- need to be linked.
|
||||
- ldInputs = [],
|
||||
+ -- We don't want the original ldInputs in
|
||||
+ -- (they're already linked in), but we do want
|
||||
+ -- to link against the previous dynLoadObjs
|
||||
+ -- library if there was one, so that the linker
|
||||
+ -- can resolve dependencies when it loads this
|
||||
+ -- library.
|
||||
+ ldInputs =
|
||||
+ case last_temp_so pls of
|
||||
+ Nothing -> []
|
||||
+ Just so ->
|
||||
+ let (lp, l) = splitFileName so in
|
||||
+ [ Option ("-L" ++ lp)
|
||||
+ , Option ("-Wl,-rpath")
|
||||
+ , Option ("-Wl," ++ lp)
|
||||
+ , Option ("-l:" ++ l)
|
||||
+ ],
|
||||
-- Even if we're e.g. profiling, we still want
|
||||
-- the vanilla dynamic libraries, so we set the
|
||||
-- ways / build tag to be just WayDyn.
|
||||
@@ -831,7 +858,7 @@ dynLoadObjs dflags objs = do
|
||||
consIORef (filesToNotIntermediateClean dflags) soFile
|
||||
m <- loadDLL soFile
|
||||
case m of
|
||||
- Nothing -> return ()
|
||||
+ Nothing -> return pls { last_temp_so = Just soFile }
|
||||
Just err -> panic ("Loading temp shared object failed: " ++ err)
|
||||
|
||||
rmDupLinkables :: [Linkable] -- Already loaded
|
||||
Index: ghc-7.8.4/compiler/main/SysTools.lhs
|
||||
===================================================================
|
||||
--- ghc-7.8.4.orig/compiler/main/SysTools.lhs
|
||||
+++ ghc-7.8.4/compiler/main/SysTools.lhs
|
||||
@@ -1416,6 +1416,7 @@ linkDynLib dflags0 o_files dep_packages
|
||||
in package_hs_libs ++ extra_libs ++ other_flags
|
||||
|
||||
-- probably _stub.o files
|
||||
+ -- and last temporary shaerd object file
|
||||
let extra_ld_inputs = ldInputs dflags
|
||||
|
||||
case os of
|
||||
@@ -1533,8 +1534,8 @@ linkDynLib dflags0 o_files dep_packages
|
||||
-- Set the library soname. We use -h rather than -soname as
|
||||
-- Solaris 10 doesn't support the latter:
|
||||
++ [ Option ("-Wl,-h," ++ takeFileName output_fn) ]
|
||||
- ++ map Option lib_path_opts
|
||||
++ extra_ld_inputs
|
||||
+ ++ map Option lib_path_opts
|
||||
++ map Option pkg_lib_path_opts
|
||||
++ map Option pkg_link_opts
|
||||
)
|
||||
Index: ghc-7.8.4/rts/Linker.c
|
||||
===================================================================
|
||||
--- ghc-7.8.4.orig/rts/Linker.c
|
||||
+++ ghc-7.8.4/rts/Linker.c
|
||||
@@ -1777,7 +1777,7 @@ internal_dlopen(const char *dll_name)
|
||||
// (see POSIX also)
|
||||
|
||||
ACQUIRE_LOCK(&dl_mutex);
|
||||
- hdl = dlopen(dll_name, RTLD_LAZY | RTLD_GLOBAL);
|
||||
+ hdl = dlopen(dll_name, RTLD_LAZY|RTLD_LOCAL); /* see Note [RTLD_LOCAL] */
|
||||
|
||||
errmsg = NULL;
|
||||
if (hdl == NULL) {
|
||||
@@ -1787,11 +1787,12 @@ internal_dlopen(const char *dll_name)
|
||||
errmsg_copy = stgMallocBytes(strlen(errmsg)+1, "addDLL");
|
||||
strcpy(errmsg_copy, errmsg);
|
||||
errmsg = errmsg_copy;
|
||||
+ } else {
|
||||
+ o_so = stgMallocBytes(sizeof(OpenedSO), "addDLL");
|
||||
+ o_so->handle = hdl;
|
||||
+ o_so->next = openedSOs;
|
||||
+ openedSOs = o_so;
|
||||
}
|
||||
- o_so = stgMallocBytes(sizeof(OpenedSO), "addDLL");
|
||||
- o_so->handle = hdl;
|
||||
- o_so->next = openedSOs;
|
||||
- openedSOs = o_so;
|
||||
|
||||
RELEASE_LOCK(&dl_mutex);
|
||||
//--------------- End critical section -------------------
|
||||
@@ -1799,14 +1800,39 @@ internal_dlopen(const char *dll_name)
|
||||
return errmsg;
|
||||
}
|
||||
|
||||
+/*
|
||||
+ Note [RTLD_LOCAL]
|
||||
+
|
||||
+ In GHCi we want to be able to override previous .so's with newly
|
||||
+ loaded .so's when we recompile something. This further implies that
|
||||
+ when we look up a symbol in internal_dlsym() we have to iterate
|
||||
+ through the loaded libraries (in order from most recently loaded to
|
||||
+ oldest) looking up the symbol in each one until we find it.
|
||||
+
|
||||
+ However, this can cause problems for some symbols that are copied
|
||||
+ by the linker into the executable image at runtime - see #8935 for a
|
||||
+ lengthy discussion. To solve that problem we need to look up
|
||||
+ symbols in the main executable *first*, before attempting to look
|
||||
+ them up in the loaded .so's. But in order to make that work, we
|
||||
+ have to always call dlopen with RTLD_LOCAL, so that the loaded
|
||||
+ libraries don't populate the global symbol table.
|
||||
+*/
|
||||
+
|
||||
static void *
|
||||
-internal_dlsym(void *hdl, const char *symbol) {
|
||||
+internal_dlsym(const char *symbol) {
|
||||
OpenedSO* o_so;
|
||||
void *v;
|
||||
|
||||
// We acquire dl_mutex as concurrent dl* calls may alter dlerror
|
||||
ACQUIRE_LOCK(&dl_mutex);
|
||||
dlerror();
|
||||
+ // look in program first
|
||||
+ v = dlsym(dl_prog_handle, symbol);
|
||||
+ if (dlerror() == NULL) {
|
||||
+ RELEASE_LOCK(&dl_mutex);
|
||||
+ return v;
|
||||
+ }
|
||||
+
|
||||
for (o_so = openedSOs; o_so != NULL; o_so = o_so->next) {
|
||||
v = dlsym(o_so->handle, symbol);
|
||||
if (dlerror() == NULL) {
|
||||
@@ -1814,7 +1840,6 @@ internal_dlsym(void *hdl, const char *sy
|
||||
return v;
|
||||
}
|
||||
}
|
||||
- v = dlsym(hdl, symbol);
|
||||
RELEASE_LOCK(&dl_mutex);
|
||||
return v;
|
||||
}
|
||||
@@ -1982,7 +2007,7 @@ lookupSymbol( char *lbl )
|
||||
if (!ghciLookupSymbolTable(symhash, lbl, &val)) {
|
||||
IF_DEBUG(linker, debugBelch("lookupSymbol: symbol not found\n"));
|
||||
# if defined(OBJFORMAT_ELF)
|
||||
- return internal_dlsym(dl_prog_handle, lbl);
|
||||
+ return internal_dlsym(lbl);
|
||||
# elif defined(OBJFORMAT_MACHO)
|
||||
# if HAVE_DLFCN_H
|
||||
/* On OS X 10.3 and later, we use dlsym instead of the old legacy
|
||||
@@ -1996,7 +2021,7 @@ lookupSymbol( char *lbl )
|
||||
*/
|
||||
IF_DEBUG(linker, debugBelch("lookupSymbol: looking up %s with dlsym\n", lbl));
|
||||
ASSERT(lbl[0] == '_');
|
||||
- return internal_dlsym(dl_prog_handle, lbl + 1);
|
||||
+ return internal_dlsym(lbl + 1);
|
||||
# else
|
||||
if (NSIsSymbolNameDefined(lbl)) {
|
||||
NSSymbol symbol = NSLookupAndBindSymbol(lbl);
|
320
D560.patch
320
D560.patch
@ -1,320 +0,0 @@
|
||||
Index: ghc-7.8.3/compiler/cmm/CLabel.hs
|
||||
===================================================================
|
||||
--- ghc-7.8.3.orig/compiler/cmm/CLabel.hs
|
||||
+++ ghc-7.8.3/compiler/cmm/CLabel.hs
|
||||
@@ -1158,7 +1158,8 @@ pprDynamicLinkerAsmLabel platform dllInf
|
||||
else if osElfTarget (platformOS platform)
|
||||
then if platformArch platform == ArchPPC
|
||||
then case dllInfo of
|
||||
- CodeStub -> ppr lbl <> text "@plt"
|
||||
+ CodeStub -> -- See Note [.LCTOC1 in PPC PIC code]
|
||||
+ ppr lbl <> text "+32768@plt"
|
||||
SymbolPtr -> text ".LC_" <> ppr lbl
|
||||
_ -> panic "pprDynamicLinkerAsmLabel"
|
||||
else if platformArch platform == ArchX86_64
|
||||
Index: ghc-7.8.3/compiler/nativeGen/PIC.hs
|
||||
===================================================================
|
||||
--- ghc-7.8.3.orig/compiler/nativeGen/PIC.hs
|
||||
+++ ghc-7.8.3/compiler/nativeGen/PIC.hs
|
||||
@@ -54,7 +54,6 @@ import qualified X86.Instr as X86
|
||||
|
||||
import Platform
|
||||
import Instruction
|
||||
-import Size
|
||||
import Reg
|
||||
import NCGMonad
|
||||
|
||||
@@ -468,11 +467,8 @@ pprGotDeclaration dflags ArchX86 OSDarwi
|
||||
pprGotDeclaration _ _ OSDarwin
|
||||
= empty
|
||||
|
||||
--- pprGotDeclaration
|
||||
+-- Emit GOT declaration
|
||||
-- Output whatever needs to be output once per .s file.
|
||||
--- The .LCTOC1 label is defined to point 32768 bytes into the table,
|
||||
--- to make the most of the PPC's 16-bit displacements.
|
||||
--- Only needed for PIC.
|
||||
pprGotDeclaration dflags arch os
|
||||
| osElfTarget os
|
||||
, arch /= ArchPPC_64
|
||||
@@ -482,6 +478,7 @@ pprGotDeclaration dflags arch os
|
||||
| osElfTarget os
|
||||
, arch /= ArchPPC_64
|
||||
= vcat [
|
||||
+ -- See Note [.LCTOC1 in PPC PIC code]
|
||||
ptext (sLit ".section \".got2\",\"aw\""),
|
||||
ptext (sLit ".LCTOC1 = .+32768") ]
|
||||
|
||||
@@ -688,12 +685,7 @@ pprImportedSymbol _ _ _
|
||||
|
||||
|
||||
-- Get a pointer to our own fake GOT, which is defined on a per-module basis.
|
||||
--- This is exactly how GCC does it, and it's quite horrible:
|
||||
--- We first fetch the address of a local label (mkPicBaseLabel).
|
||||
--- Then we add a 16-bit offset to that to get the address of a .long that we
|
||||
--- define in .text space right next to the proc. This .long literal contains
|
||||
--- the (32-bit) offset from our local label to our global offset table
|
||||
--- (.LCTOC1 aka gotOffLabel).
|
||||
+-- This is exactly how GCC does it in linux.
|
||||
|
||||
initializePicBase_ppc
|
||||
:: Arch -> OS -> Reg
|
||||
@@ -704,18 +696,9 @@ initializePicBase_ppc ArchPPC os picReg
|
||||
(CmmProc info lab live (ListGraph blocks) : statics)
|
||||
| osElfTarget os
|
||||
= do
|
||||
- dflags <- getDynFlags
|
||||
- gotOffLabel <- getNewLabelNat
|
||||
- tmp <- getNewRegNat $ intSize (wordWidth dflags)
|
||||
let
|
||||
- gotOffset = CmmData Text $ Statics gotOffLabel [
|
||||
- CmmStaticLit (CmmLabelDiffOff gotLabel
|
||||
- mkPicBaseLabel
|
||||
- 0)
|
||||
- ]
|
||||
- offsetToOffset
|
||||
- = PPC.ImmConstantDiff
|
||||
- (PPC.ImmCLbl gotOffLabel)
|
||||
+ gotOffset = PPC.ImmConstantDiff
|
||||
+ (PPC.ImmCLbl gotLabel)
|
||||
(PPC.ImmCLbl mkPicBaseLabel)
|
||||
|
||||
blocks' = case blocks of
|
||||
@@ -726,15 +709,23 @@ initializePicBase_ppc ArchPPC os picReg
|
||||
| bID `mapMember` info = fetchPC b
|
||||
| otherwise = b
|
||||
|
||||
+ -- GCC does PIC prologs thusly:
|
||||
+ -- bcl 20,31,.L1
|
||||
+ -- .L1:
|
||||
+ -- mflr 30
|
||||
+ -- addis 30,30,.LCTOC1-.L1@ha
|
||||
+ -- addi 30,30,.LCTOC1-.L1@l
|
||||
+ -- TODO: below we use it over temporary register,
|
||||
+ -- it can and should be optimised by picking
|
||||
+ -- correct PIC reg.
|
||||
fetchPC (BasicBlock bID insns) =
|
||||
BasicBlock bID (PPC.FETCHPC picReg
|
||||
- : PPC.ADDIS tmp picReg (PPC.HI offsetToOffset)
|
||||
- : PPC.LD PPC.archWordSize tmp
|
||||
- (PPC.AddrRegImm tmp (PPC.LO offsetToOffset))
|
||||
- : PPC.ADD picReg picReg (PPC.RIReg picReg)
|
||||
+ : PPC.ADDIS picReg picReg (PPC.HA gotOffset)
|
||||
+ : PPC.ADDI picReg picReg (PPC.LO gotOffset)
|
||||
+ : PPC.MR PPC.r30 picReg
|
||||
: insns)
|
||||
|
||||
- return (CmmProc info lab live (ListGraph blocks') : gotOffset : statics)
|
||||
+ return (CmmProc info lab live (ListGraph blocks') : statics)
|
||||
|
||||
|
||||
initializePicBase_ppc ArchPPC OSDarwin picReg
|
||||
Index: ghc-7.8.3/compiler/nativeGen/PPC/CodeGen.hs
|
||||
===================================================================
|
||||
--- ghc-7.8.3.orig/compiler/nativeGen/PPC/CodeGen.hs
|
||||
+++ ghc-7.8.3/compiler/nativeGen/PPC/CodeGen.hs
|
||||
@@ -54,7 +54,7 @@ import Outputable
|
||||
import Unique
|
||||
import DynFlags
|
||||
|
||||
-import Control.Monad ( mapAndUnzipM )
|
||||
+import Control.Monad ( mapAndUnzipM, when )
|
||||
import Data.Bits
|
||||
import Data.Word
|
||||
|
||||
@@ -355,6 +355,19 @@ iselExpr64 (CmmMachOp (MO_Add _) [e1,e2]
|
||||
ADDE rhi r1hi r2hi ]
|
||||
return (ChildCode64 code rlo)
|
||||
|
||||
+iselExpr64 (CmmMachOp (MO_Sub _) [e1,e2]) = do
|
||||
+ ChildCode64 code1 r1lo <- iselExpr64 e1
|
||||
+ ChildCode64 code2 r2lo <- iselExpr64 e2
|
||||
+ (rlo,rhi) <- getNewRegPairNat II32
|
||||
+ let
|
||||
+ r1hi = getHiVRegFromLo r1lo
|
||||
+ r2hi = getHiVRegFromLo r2lo
|
||||
+ code = code1 `appOL`
|
||||
+ code2 `appOL`
|
||||
+ toOL [ SUBFC rlo r2lo r1lo,
|
||||
+ SUBFE rhi r2hi r1hi ]
|
||||
+ return (ChildCode64 code rlo)
|
||||
+
|
||||
iselExpr64 (CmmMachOp (MO_UU_Conv W32 W64) [expr]) = do
|
||||
(expr_reg,expr_code) <- getSomeReg expr
|
||||
(rlo, rhi) <- getNewRegPairNat II32
|
||||
@@ -927,8 +940,12 @@ genCCall' dflags gcp target dest_regs ar
|
||||
(toOL []) []
|
||||
|
||||
(labelOrExpr, reduceToFF32) <- case target of
|
||||
- ForeignTarget (CmmLit (CmmLabel lbl)) _ -> return (Left lbl, False)
|
||||
- ForeignTarget expr _ -> return (Right expr, False)
|
||||
+ ForeignTarget (CmmLit (CmmLabel lbl)) _ -> do
|
||||
+ uses_pic_base_implicitly
|
||||
+ return (Left lbl, False)
|
||||
+ ForeignTarget expr _ -> do
|
||||
+ uses_pic_base_implicitly
|
||||
+ return (Right expr, False)
|
||||
PrimTarget mop -> outOfLineMachOp mop
|
||||
|
||||
let codeBefore = move_sp_down finalStack `appOL` passArgumentsCode
|
||||
@@ -949,6 +966,13 @@ genCCall' dflags gcp target dest_regs ar
|
||||
where
|
||||
platform = targetPlatform dflags
|
||||
|
||||
+ uses_pic_base_implicitly = do
|
||||
+ -- See Note [implicit register in PPC PIC code]
|
||||
+ -- on why we claim to use PIC register here
|
||||
+ when (gopt Opt_PIC dflags) $ do
|
||||
+ _ <- getPicBaseNat archWordSize
|
||||
+ return ()
|
||||
+
|
||||
initialStackOffset = case gcp of
|
||||
GCPDarwin -> 24
|
||||
GCPLinux -> 8
|
||||
@@ -1432,3 +1456,21 @@ coerceFP2Int _ toRep x = do
|
||||
-- read low word of value (high word is undefined)
|
||||
LD II32 dst (spRel dflags 3)]
|
||||
return (Any (intSize toRep) code')
|
||||
+
|
||||
+-- Note [.LCTOC1 in PPC PIC code]
|
||||
+-- The .LCTOC1 label is defined to point 32768 bytes into the GOT table
|
||||
+-- to make the most of the PPC's 16-bit displacements.
|
||||
+-- As 16-bit signed offset is used (usually via addi/lwz instructions)
|
||||
+-- first element will have '-32768' offset against .LCTOC1.
|
||||
+
|
||||
+-- Note [implicit register in PPC PIC code]
|
||||
+-- PPC generates calls by labels in assembly
|
||||
+-- in form of:
|
||||
+-- bl puts+32768@plt
|
||||
+-- in this form it's not seen directly (by GHC NCG)
|
||||
+-- that r30 (PicBaseReg) is used,
|
||||
+-- but r30 is a required part of PLT code setup:
|
||||
+-- puts+32768@plt:
|
||||
+-- lwz r11,-30484(r30) ; offset in .LCTOC1
|
||||
+-- mtctr r11
|
||||
+-- bctr
|
||||
Index: ghc-7.8.3/compiler/nativeGen/PPC/Instr.hs
|
||||
===================================================================
|
||||
--- ghc-7.8.3.orig/compiler/nativeGen/PPC/Instr.hs
|
||||
+++ ghc-7.8.3/compiler/nativeGen/PPC/Instr.hs
|
||||
@@ -203,8 +203,11 @@ data Instr
|
||||
| ADD Reg Reg RI -- dst, src1, src2
|
||||
| ADDC Reg Reg Reg -- (carrying) dst, src1, src2
|
||||
| ADDE Reg Reg Reg -- (extend) dst, src1, src2
|
||||
+ | ADDI Reg Reg Imm -- Add Immediate dst, src1, src2
|
||||
| ADDIS Reg Reg Imm -- Add Immediate Shifted dst, src1, src2
|
||||
| SUBF Reg Reg Reg -- dst, src1, src2 ; dst = src2 - src1
|
||||
+ | SUBFC Reg Reg Reg -- (carrying) dst, src1, src2 ; dst = src2 - src1
|
||||
+ | SUBFE Reg Reg Reg -- (extend) dst, src1, src2 ; dst = src2 - src1
|
||||
| MULLW Reg Reg RI
|
||||
| DIVW Reg Reg Reg
|
||||
| DIVWU Reg Reg Reg
|
||||
@@ -282,8 +285,11 @@ ppc_regUsageOfInstr platform instr
|
||||
ADD reg1 reg2 ri -> usage (reg2 : regRI ri, [reg1])
|
||||
ADDC reg1 reg2 reg3 -> usage ([reg2,reg3], [reg1])
|
||||
ADDE reg1 reg2 reg3 -> usage ([reg2,reg3], [reg1])
|
||||
+ ADDI reg1 reg2 _ -> usage ([reg2], [reg1])
|
||||
ADDIS reg1 reg2 _ -> usage ([reg2], [reg1])
|
||||
SUBF reg1 reg2 reg3 -> usage ([reg2,reg3], [reg1])
|
||||
+ SUBFC reg1 reg2 reg3 -> usage ([reg2,reg3], [reg1])
|
||||
+ SUBFE reg1 reg2 reg3 -> usage ([reg2,reg3], [reg1])
|
||||
MULLW reg1 reg2 ri -> usage (reg2 : regRI ri, [reg1])
|
||||
DIVW reg1 reg2 reg3 -> usage ([reg2,reg3], [reg1])
|
||||
DIVWU reg1 reg2 reg3 -> usage ([reg2,reg3], [reg1])
|
||||
@@ -356,8 +362,11 @@ ppc_patchRegsOfInstr instr env
|
||||
ADD reg1 reg2 ri -> ADD (env reg1) (env reg2) (fixRI ri)
|
||||
ADDC reg1 reg2 reg3 -> ADDC (env reg1) (env reg2) (env reg3)
|
||||
ADDE reg1 reg2 reg3 -> ADDE (env reg1) (env reg2) (env reg3)
|
||||
+ ADDI reg1 reg2 imm -> ADDI (env reg1) (env reg2) imm
|
||||
ADDIS reg1 reg2 imm -> ADDIS (env reg1) (env reg2) imm
|
||||
SUBF reg1 reg2 reg3 -> SUBF (env reg1) (env reg2) (env reg3)
|
||||
+ SUBFC reg1 reg2 reg3 -> SUBFC (env reg1) (env reg2) (env reg3)
|
||||
+ SUBFE reg1 reg2 reg3 -> SUBFE (env reg1) (env reg2) (env reg3)
|
||||
MULLW reg1 reg2 ri -> MULLW (env reg1) (env reg2) (fixRI ri)
|
||||
DIVW reg1 reg2 reg3 -> DIVW (env reg1) (env reg2) (env reg3)
|
||||
DIVWU reg1 reg2 reg3 -> DIVWU (env reg1) (env reg2) (env reg3)
|
||||
Index: ghc-7.8.3/compiler/nativeGen/PPC/Ppr.hs
|
||||
===================================================================
|
||||
--- ghc-7.8.3.orig/compiler/nativeGen/PPC/Ppr.hs
|
||||
+++ ghc-7.8.3/compiler/nativeGen/PPC/Ppr.hs
|
||||
@@ -530,6 +530,16 @@ pprInstr (BCTRL _) = hcat [
|
||||
ptext (sLit "bctrl")
|
||||
]
|
||||
pprInstr (ADD reg1 reg2 ri) = pprLogic (sLit "add") reg1 reg2 ri
|
||||
+pprInstr (ADDI reg1 reg2 imm) = hcat [
|
||||
+ char '\t',
|
||||
+ ptext (sLit "addi"),
|
||||
+ char '\t',
|
||||
+ pprReg reg1,
|
||||
+ ptext (sLit ", "),
|
||||
+ pprReg reg2,
|
||||
+ ptext (sLit ", "),
|
||||
+ pprImm imm
|
||||
+ ]
|
||||
pprInstr (ADDIS reg1 reg2 imm) = hcat [
|
||||
char '\t',
|
||||
ptext (sLit "addis"),
|
||||
@@ -544,6 +554,8 @@ pprInstr (ADDIS reg1 reg2 imm) = hcat [
|
||||
pprInstr (ADDC reg1 reg2 reg3) = pprLogic (sLit "addc") reg1 reg2 (RIReg reg3)
|
||||
pprInstr (ADDE reg1 reg2 reg3) = pprLogic (sLit "adde") reg1 reg2 (RIReg reg3)
|
||||
pprInstr (SUBF reg1 reg2 reg3) = pprLogic (sLit "subf") reg1 reg2 (RIReg reg3)
|
||||
+pprInstr (SUBFC reg1 reg2 reg3) = pprLogic (sLit "subfc") reg1 reg2 (RIReg reg3)
|
||||
+pprInstr (SUBFE reg1 reg2 reg3) = pprLogic (sLit "subfe") reg1 reg2 (RIReg reg3)
|
||||
pprInstr (MULLW reg1 reg2 ri@(RIReg _)) = pprLogic (sLit "mullw") reg1 reg2 ri
|
||||
pprInstr (MULLW reg1 reg2 ri@(RIImm _)) = pprLogic (sLit "mull") reg1 reg2 ri
|
||||
pprInstr (DIVW reg1 reg2 reg3) = pprLogic (sLit "divw") reg1 reg2 (RIReg reg3)
|
||||
Index: ghc-7.8.3/compiler/nativeGen/PPC/Regs.hs
|
||||
===================================================================
|
||||
--- ghc-7.8.3.orig/compiler/nativeGen/PPC/Regs.hs
|
||||
+++ ghc-7.8.3/compiler/nativeGen/PPC/Regs.hs
|
||||
@@ -35,7 +35,8 @@ module PPC.Regs (
|
||||
fits16Bits,
|
||||
makeImmediate,
|
||||
fReg,
|
||||
- sp, r3, r4, r27, r28, f1, f20, f21,
|
||||
+ sp, r3, r4, r27, r28, r30,
|
||||
+ f1, f20, f21,
|
||||
|
||||
allocatableRegs
|
||||
|
||||
@@ -293,12 +294,13 @@ point registers.
|
||||
fReg :: Int -> RegNo
|
||||
fReg x = (32 + x)
|
||||
|
||||
-sp, r3, r4, r27, r28, f1, f20, f21 :: Reg
|
||||
+sp, r3, r4, r27, r28, r30, f1, f20, f21 :: Reg
|
||||
sp = regSingle 1
|
||||
r3 = regSingle 3
|
||||
r4 = regSingle 4
|
||||
r27 = regSingle 27
|
||||
r28 = regSingle 28
|
||||
+r30 = regSingle 30
|
||||
f1 = regSingle $ fReg 1
|
||||
f20 = regSingle $ fReg 20
|
||||
f21 = regSingle $ fReg 21
|
||||
Index: ghc-7.8.3/includes/CodeGen.Platform.hs
|
||||
===================================================================
|
||||
--- ghc-7.8.3.orig/includes/CodeGen.Platform.hs
|
||||
+++ ghc-7.8.3/includes/CodeGen.Platform.hs
|
||||
@@ -804,6 +804,8 @@ freeReg 1 = fastBool False -- The Stack
|
||||
# if !MACHREGS_darwin
|
||||
-- most non-darwin powerpc OSes use r2 as a TOC pointer or something like that
|
||||
freeReg 2 = fastBool False
|
||||
+-- at least linux in -fPIC relies on r30 in PLT stubs
|
||||
+freeReg 30 = fastBool False
|
||||
# endif
|
||||
# ifdef REG_Base
|
||||
freeReg REG_Base = fastBool False
|
||||
Index: ghc-7.8.3/mk/config.mk.in
|
||||
===================================================================
|
||||
--- ghc-7.8.3.orig/mk/config.mk.in
|
||||
+++ ghc-7.8.3/mk/config.mk.in
|
||||
@@ -95,7 +95,7 @@ TargetElf = YES
|
||||
endif
|
||||
|
||||
# Some platforms don't support shared libraries
|
||||
-NoSharedLibsPlatformList = powerpc-unknown-linux \
|
||||
+NoSharedLibsPlatformList = \
|
||||
x86_64-unknown-mingw32 \
|
||||
i386-unknown-mingw32 \
|
||||
sparc-sun-solaris2 \
|
3
_service
3
_service
@ -1,3 +0,0 @@
|
||||
<services>
|
||||
<service name="download_files" mode="localonly"/>
|
||||
</services>
|
3
ghc-7.10.2-src.tar.xz
Normal file
3
ghc-7.10.2-src.tar.xz
Normal file
@ -0,0 +1,3 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:54cd73755b784d78e2f13d5eb161bfa38d3efee9e8a56f7eb6cd9f2d6e2615f5
|
||||
size 11113204
|
@ -1,34 +0,0 @@
|
||||
commit b0cf3ab7a69b878a4335d21a347b56e4b0ca0b7b
|
||||
Author: Sergei Trofimovich <slyfox@gentoo.org>
|
||||
Date: Mon Apr 14 19:06:24 2014 +0300
|
||||
|
||||
compiler/cmm/PprC.hs: constify local string literals
|
||||
|
||||
Consider one-line module
|
||||
module B (v) where v = "hello"
|
||||
in -fvia-C mode it generates code like
|
||||
static char gibberish_str[] = "hello";
|
||||
|
||||
It uselessly eats data section (precious resource on ia64!).
|
||||
The patch switches genrator to emit:
|
||||
static const char gibberish_str[] = "hello";
|
||||
|
||||
Signed-off-by: Sergei Trofimovich <slyfox@gentoo.org>
|
||||
|
||||
diff --git a/compiler/cmm/PprC.hs b/compiler/cmm/PprC.hs
|
||||
index 2398981..fdb578d 100644
|
||||
--- a/compiler/cmm/PprC.hs
|
||||
+++ b/compiler/cmm/PprC.hs
|
||||
@@ -112,6 +112,12 @@ pprTop (CmmProc infos clbl _ graph) =
|
||||
|
||||
-- We only handle (a) arrays of word-sized things and (b) strings.
|
||||
|
||||
+pprTop (CmmData ReadOnlyData (Statics lbl [CmmString str])) =
|
||||
+ hcat [
|
||||
+ pprLocalness lbl, ptext (sLit "const char "), ppr lbl,
|
||||
+ ptext (sLit "[] = "), pprStringInCStyle str, semi
|
||||
+ ]
|
||||
+
|
||||
pprTop (CmmData _section (Statics lbl [CmmString str])) =
|
||||
hcat [
|
||||
pprLocalness lbl, ptext (sLit "char "), ppr lbl,
|
@ -1,3 +0,0 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:c319cd94adb284177ed0e6d21546ed0b900ad84b86b87c06a99eac35152982c4
|
||||
size 9128576
|
322
ghc-arm64.patch
322
ghc-arm64.patch
@ -1,322 +0,0 @@
|
||||
commit c29bf984dd20431cd4344e8a5c444d7a5be08389
|
||||
Author: Colin Watson <cjwatson@debian.org>
|
||||
Date: Mon Apr 21 22:26:56 2014 -0500
|
||||
Bug: https://ghc.haskell.org/trac/ghc/ticket/7942
|
||||
|
||||
ghc: initial AArch64 patches
|
||||
|
||||
Signed-off-by: Austin Seipp <austin@well-typed.com>
|
||||
|
||||
Index: ghc-7.8.4/aclocal.m4
|
||||
===================================================================
|
||||
--- ghc-7.8.4.orig/aclocal.m4
|
||||
+++ ghc-7.8.4/aclocal.m4
|
||||
@@ -200,6 +200,9 @@ AC_DEFUN([FPTOOLS_SET_HASKELL_PLATFORM_V
|
||||
GET_ARM_ISA()
|
||||
test -z "[$]2" || eval "[$]2=\"ArchARM {armISA = \$ARM_ISA, armISAExt = \$ARM_ISA_EXT, armABI = \$ARM_ABI}\""
|
||||
;;
|
||||
+ aarch64)
|
||||
+ test -z "[$]2" || eval "[$]2=ArchARM64"
|
||||
+ ;;
|
||||
alpha)
|
||||
test -z "[$]2" || eval "[$]2=ArchAlpha"
|
||||
;;
|
||||
@@ -1865,6 +1868,9 @@ AC_MSG_CHECKING(for path to top of build
|
||||
# converts cpu from gnu to ghc naming, and assigns the result to $target_var
|
||||
AC_DEFUN([GHC_CONVERT_CPU],[
|
||||
case "$1" in
|
||||
+ aarch64*)
|
||||
+ $2="aarch64"
|
||||
+ ;;
|
||||
alpha*)
|
||||
$2="alpha"
|
||||
;;
|
||||
Index: ghc-7.8.4/compiler/nativeGen/AsmCodeGen.lhs
|
||||
===================================================================
|
||||
--- ghc-7.8.4.orig/compiler/nativeGen/AsmCodeGen.lhs
|
||||
+++ ghc-7.8.4/compiler/nativeGen/AsmCodeGen.lhs
|
||||
@@ -166,6 +166,7 @@ nativeCodeGen dflags this_mod h us cmms
|
||||
ArchPPC -> nCG' (ppcNcgImpl dflags)
|
||||
ArchSPARC -> nCG' (sparcNcgImpl dflags)
|
||||
ArchARM {} -> panic "nativeCodeGen: No NCG for ARM"
|
||||
+ ArchARM64 -> panic "nativeCodeGen: No NCG for ARM64"
|
||||
ArchPPC_64 _ -> nCG' (ppcNcgImpl dflags)
|
||||
ArchAlpha -> panic "nativeCodeGen: No NCG for Alpha"
|
||||
ArchMipseb -> panic "nativeCodeGen: No NCG for mipseb"
|
||||
Index: ghc-7.8.4/compiler/nativeGen/RegAlloc/Graph/TrivColorable.hs
|
||||
===================================================================
|
||||
--- ghc-7.8.4.orig/compiler/nativeGen/RegAlloc/Graph/TrivColorable.hs
|
||||
+++ ghc-7.8.4/compiler/nativeGen/RegAlloc/Graph/TrivColorable.hs
|
||||
@@ -113,6 +113,7 @@ trivColorable platform virtualRegSqueeze
|
||||
ArchSPARC -> 14
|
||||
ArchPPC_64 _ -> panic "trivColorable ArchPPC_64"
|
||||
ArchARM _ _ _ -> panic "trivColorable ArchARM"
|
||||
+ ArchARM64 -> panic "trivColorable ArchARM64"
|
||||
ArchAlpha -> panic "trivColorable ArchAlpha"
|
||||
ArchMipseb -> panic "trivColorable ArchMipseb"
|
||||
ArchMipsel -> panic "trivColorable ArchMipsel"
|
||||
@@ -137,6 +138,7 @@ trivColorable platform virtualRegSqueeze
|
||||
ArchSPARC -> 22
|
||||
ArchPPC_64 _ -> panic "trivColorable ArchPPC_64"
|
||||
ArchARM _ _ _ -> panic "trivColorable ArchARM"
|
||||
+ ArchARM64 -> panic "trivColorable ArchARM64"
|
||||
ArchAlpha -> panic "trivColorable ArchAlpha"
|
||||
ArchMipseb -> panic "trivColorable ArchMipseb"
|
||||
ArchMipsel -> panic "trivColorable ArchMipsel"
|
||||
@@ -161,6 +163,7 @@ trivColorable platform virtualRegSqueeze
|
||||
ArchSPARC -> 11
|
||||
ArchPPC_64 _ -> panic "trivColorable ArchPPC_64"
|
||||
ArchARM _ _ _ -> panic "trivColorable ArchARM"
|
||||
+ ArchARM64 -> panic "trivColorable ArchARM64"
|
||||
ArchAlpha -> panic "trivColorable ArchAlpha"
|
||||
ArchMipseb -> panic "trivColorable ArchMipseb"
|
||||
ArchMipsel -> panic "trivColorable ArchMipsel"
|
||||
@@ -185,6 +188,7 @@ trivColorable platform virtualRegSqueeze
|
||||
ArchSPARC -> 0
|
||||
ArchPPC_64 _ -> panic "trivColorable ArchPPC_64"
|
||||
ArchARM _ _ _ -> panic "trivColorable ArchARM"
|
||||
+ ArchARM64 -> panic "trivColorable ArchARM64"
|
||||
ArchAlpha -> panic "trivColorable ArchAlpha"
|
||||
ArchMipseb -> panic "trivColorable ArchMipseb"
|
||||
ArchMipsel -> panic "trivColorable ArchMipsel"
|
||||
Index: ghc-7.8.4/compiler/nativeGen/RegAlloc/Linear/FreeRegs.hs
|
||||
===================================================================
|
||||
--- ghc-7.8.4.orig/compiler/nativeGen/RegAlloc/Linear/FreeRegs.hs
|
||||
+++ ghc-7.8.4/compiler/nativeGen/RegAlloc/Linear/FreeRegs.hs
|
||||
@@ -74,6 +74,7 @@ maxSpillSlots dflags
|
||||
ArchPPC -> PPC.Instr.maxSpillSlots dflags
|
||||
ArchSPARC -> SPARC.Instr.maxSpillSlots dflags
|
||||
ArchARM _ _ _ -> panic "maxSpillSlots ArchARM"
|
||||
+ ArchARM64 -> panic "maxSpillSlots ArchARM64"
|
||||
ArchPPC_64 _ -> PPC.Instr.maxSpillSlots dflags
|
||||
ArchAlpha -> panic "maxSpillSlots ArchAlpha"
|
||||
ArchMipseb -> panic "maxSpillSlots ArchMipseb"
|
||||
Index: ghc-7.8.4/compiler/nativeGen/RegAlloc/Linear/Main.hs
|
||||
===================================================================
|
||||
--- ghc-7.8.4.orig/compiler/nativeGen/RegAlloc/Linear/Main.hs
|
||||
+++ ghc-7.8.4/compiler/nativeGen/RegAlloc/Linear/Main.hs
|
||||
@@ -207,6 +207,7 @@ linearRegAlloc dflags entry_ids block_li
|
||||
ArchSPARC -> linearRegAlloc' dflags (frInitFreeRegs platform :: SPARC.FreeRegs) entry_ids block_live sccs
|
||||
ArchPPC -> linearRegAlloc' dflags (frInitFreeRegs platform :: PPC.FreeRegs) entry_ids block_live sccs
|
||||
ArchARM _ _ _ -> panic "linearRegAlloc ArchARM"
|
||||
+ ArchARM64 -> panic "linearRegAlloc ArchARM64"
|
||||
ArchPPC_64 _ -> linearRegAlloc' dflags (frInitFreeRegs platform :: PPC.FreeRegs) entry_ids block_live sccs
|
||||
ArchAlpha -> panic "linearRegAlloc ArchAlpha"
|
||||
ArchMipseb -> panic "linearRegAlloc ArchMipseb"
|
||||
Index: ghc-7.8.4/compiler/nativeGen/TargetReg.hs
|
||||
===================================================================
|
||||
--- ghc-7.8.4.orig/compiler/nativeGen/TargetReg.hs
|
||||
+++ ghc-7.8.4/compiler/nativeGen/TargetReg.hs
|
||||
@@ -54,6 +54,7 @@ targetVirtualRegSqueeze platform
|
||||
ArchSPARC -> SPARC.virtualRegSqueeze
|
||||
ArchPPC_64 _ -> PPC.virtualRegSqueeze
|
||||
ArchARM _ _ _ -> panic "targetVirtualRegSqueeze ArchARM"
|
||||
+ ArchARM64 -> panic "targetVirtualRegSqueeze ArchARM64"
|
||||
ArchAlpha -> panic "targetVirtualRegSqueeze ArchAlpha"
|
||||
ArchMipseb -> panic "targetVirtualRegSqueeze ArchMipseb"
|
||||
ArchMipsel -> panic "targetVirtualRegSqueeze ArchMipsel"
|
||||
@@ -70,6 +71,7 @@ targetRealRegSqueeze platform
|
||||
ArchSPARC -> SPARC.realRegSqueeze
|
||||
ArchPPC_64 _ -> PPC.realRegSqueeze
|
||||
ArchARM _ _ _ -> panic "targetRealRegSqueeze ArchARM"
|
||||
+ ArchARM64 -> panic "targetRealRegSqueeze ArchARM64"
|
||||
ArchAlpha -> panic "targetRealRegSqueeze ArchAlpha"
|
||||
ArchMipseb -> panic "targetRealRegSqueeze ArchMipseb"
|
||||
ArchMipsel -> panic "targetRealRegSqueeze ArchMipsel"
|
||||
@@ -85,6 +87,7 @@ targetClassOfRealReg platform
|
||||
ArchSPARC -> SPARC.classOfRealReg
|
||||
ArchPPC_64 _ -> PPC.classOfRealReg
|
||||
ArchARM _ _ _ -> panic "targetClassOfRealReg ArchARM"
|
||||
+ ArchARM64 -> panic "targetClassOfRealReg ArchARM64"
|
||||
ArchAlpha -> panic "targetClassOfRealReg ArchAlpha"
|
||||
ArchMipseb -> panic "targetClassOfRealReg ArchMipseb"
|
||||
ArchMipsel -> panic "targetClassOfRealReg ArchMipsel"
|
||||
@@ -100,6 +103,7 @@ targetMkVirtualReg platform
|
||||
ArchSPARC -> SPARC.mkVirtualReg
|
||||
ArchPPC_64 _ -> PPC.mkVirtualReg
|
||||
ArchARM _ _ _ -> panic "targetMkVirtualReg ArchARM"
|
||||
+ ArchARM64 -> panic "targetMkVirtualReg ArchARM64"
|
||||
ArchAlpha -> panic "targetMkVirtualReg ArchAlpha"
|
||||
ArchMipseb -> panic "targetMkVirtualReg ArchMipseb"
|
||||
ArchMipsel -> panic "targetMkVirtualReg ArchMipsel"
|
||||
@@ -115,6 +119,7 @@ targetRegDotColor platform
|
||||
ArchSPARC -> SPARC.regDotColor
|
||||
ArchPPC_64 _ -> PPC.regDotColor
|
||||
ArchARM _ _ _ -> panic "targetRegDotColor ArchARM"
|
||||
+ ArchARM64 -> panic "targetRegDotColor ArchARM64"
|
||||
ArchAlpha -> panic "targetRegDotColor ArchAlpha"
|
||||
ArchMipseb -> panic "targetRegDotColor ArchMipseb"
|
||||
ArchMipsel -> panic "targetRegDotColor ArchMipsel"
|
||||
Index: ghc-7.8.4/compiler/utils/Platform.hs
|
||||
===================================================================
|
||||
--- ghc-7.8.4.orig/compiler/utils/Platform.hs
|
||||
+++ ghc-7.8.4/compiler/utils/Platform.hs
|
||||
@@ -55,6 +55,7 @@ data Arch
|
||||
, armISAExt :: [ArmISAExt]
|
||||
, armABI :: ArmABI
|
||||
}
|
||||
+ | ArchARM64
|
||||
| ArchAlpha
|
||||
| ArchMipseb
|
||||
| ArchMipsel
|
||||
Index: ghc-7.8.4/includes/stg/HaskellMachRegs.h
|
||||
===================================================================
|
||||
--- ghc-7.8.4.orig/includes/stg/HaskellMachRegs.h
|
||||
+++ ghc-7.8.4/includes/stg/HaskellMachRegs.h
|
||||
@@ -39,6 +39,7 @@
|
||||
|| powerpc64le_TARGET_ARCH || rs6000_TARGET_ARCH)
|
||||
#define MACHREGS_sparc sparc_TARGET_ARCH
|
||||
#define MACHREGS_arm arm_TARGET_ARCH
|
||||
+#define MACHREGS_aarch64 aarch64_TARGET_ARCH
|
||||
#define MACHREGS_darwin darwin_TARGET_OS
|
||||
|
||||
#endif
|
||||
Index: ghc-7.8.4/includes/stg/MachRegs.h
|
||||
===================================================================
|
||||
--- ghc-7.8.4.orig/includes/stg/MachRegs.h
|
||||
+++ ghc-7.8.4/includes/stg/MachRegs.h
|
||||
@@ -1,6 +1,6 @@
|
||||
/* -----------------------------------------------------------------------------
|
||||
*
|
||||
- * (c) The GHC Team, 1998-2011
|
||||
+ * (c) The GHC Team, 1998-2014
|
||||
*
|
||||
* Registers used in STG code. Might or might not correspond to
|
||||
* actual machine registers.
|
||||
@@ -531,6 +531,61 @@
|
||||
#define REG_D2 d11
|
||||
#endif
|
||||
|
||||
+/* -----------------------------------------------------------------------------
|
||||
+ The ARMv8/AArch64 ABI register mapping
|
||||
+
|
||||
+ The AArch64 provides 31 64-bit general purpose registers
|
||||
+ and 32 128-bit SIMD/floating point registers.
|
||||
+
|
||||
+ General purpose registers (see Chapter 5.1.1 in ARM IHI 0055B)
|
||||
+
|
||||
+ Register | Special | Role in the procedure call standard
|
||||
+ ---------+---------+------------------------------------
|
||||
+ SP | | The Stack Pointer
|
||||
+ r30 | LR | The Link Register
|
||||
+ r29 | FP | The Frame Pointer
|
||||
+ r19-r28 | | Callee-saved registers
|
||||
+ r18 | | The Platform Register, if needed;
|
||||
+ | | or temporary register
|
||||
+ r17 | IP1 | The second intra-procedure-call temporary register
|
||||
+ r16 | IP0 | The first intra-procedure-call scratch register
|
||||
+ r9-r15 | | Temporary registers
|
||||
+ r8 | | Indirect result location register
|
||||
+ r0-r7 | | Parameter/result registers
|
||||
+
|
||||
+
|
||||
+ FPU/SIMD registers
|
||||
+
|
||||
+ s/d/q/v0-v7 Argument / result/ scratch registers
|
||||
+ s/d/q/v8-v15 callee-saved registers (must be preserved across subrutine calls,
|
||||
+ but only bottom 64-bit value needs to be preserved)
|
||||
+ s/d/q/v16-v31 temporary registers
|
||||
+
|
||||
+ ----------------------------------------------------------------------------- */
|
||||
+
|
||||
+#elif MACHREGS_aarch64
|
||||
+
|
||||
+#define REG(x) __asm__(#x)
|
||||
+
|
||||
+#define REG_Base r19
|
||||
+#define REG_Sp r20
|
||||
+#define REG_Hp r21
|
||||
+#define REG_R1 r22
|
||||
+#define REG_R2 r23
|
||||
+#define REG_R3 r24
|
||||
+#define REG_R4 r25
|
||||
+#define REG_R5 r26
|
||||
+#define REG_R6 r27
|
||||
+#define REG_SpLim r28
|
||||
+
|
||||
+#define REG_F1 s8
|
||||
+#define REG_F2 s9
|
||||
+#define REG_F3 s10
|
||||
+#define REG_F4 s11
|
||||
+
|
||||
+#define REG_D1 d12
|
||||
+#define REG_D2 d13
|
||||
+
|
||||
#else
|
||||
|
||||
#error Cannot find platform to give register info for
|
||||
Index: ghc-7.8.4/rts/StgCRun.c
|
||||
===================================================================
|
||||
--- ghc-7.8.4.orig/rts/StgCRun.c
|
||||
+++ ghc-7.8.4/rts/StgCRun.c
|
||||
@@ -756,4 +756,70 @@ StgRun(StgFunPtr f, StgRegTable *basereg
|
||||
}
|
||||
#endif
|
||||
|
||||
+#ifdef aarch64_HOST_ARCH
|
||||
+
|
||||
+StgRegTable *
|
||||
+StgRun(StgFunPtr f, StgRegTable *basereg) {
|
||||
+ StgRegTable * r;
|
||||
+ __asm__ volatile (
|
||||
+ /*
|
||||
+ * save callee-saves registers on behalf of the STG code.
|
||||
+ */
|
||||
+ "stp x19, x20, [sp, #-16]!\n\t"
|
||||
+ "stp x21, x22, [sp, #-16]!\n\t"
|
||||
+ "stp x23, x24, [sp, #-16]!\n\t"
|
||||
+ "stp x25, x26, [sp, #-16]!\n\t"
|
||||
+ "stp x27, x28, [sp, #-16]!\n\t"
|
||||
+ "stp ip0, ip1, [sp, #-16]!\n\t"
|
||||
+ "str lr, [sp, #-8]!\n\t"
|
||||
+
|
||||
+ /*
|
||||
+ * allocate some space for Stg machine's temporary storage.
|
||||
+ * Note: RESERVER_C_STACK_BYTES has to be a round number here or
|
||||
+ * the assembler can't assemble it.
|
||||
+ */
|
||||
+ "str lr, [sp, %3]"
|
||||
+ /* "sub sp, sp, %3\n\t" */
|
||||
+ /*
|
||||
+ * Set BaseReg
|
||||
+ */
|
||||
+ "mov x19, %2\n\t"
|
||||
+ /*
|
||||
+ * Jump to function argument.
|
||||
+ */
|
||||
+ "bx %1\n\t"
|
||||
+
|
||||
+ ".globl " STG_RETURN "\n\t"
|
||||
+ ".type " STG_RETURN ", %%function\n"
|
||||
+ STG_RETURN ":\n\t"
|
||||
+ /*
|
||||
+ * Free the space we allocated
|
||||
+ */
|
||||
+ "ldr lr, [sp], %3\n\t"
|
||||
+ /* "add sp, sp, %3\n\t" */
|
||||
+ /*
|
||||
+ * Return the new register table, taking it from Stg's R1 (ARM64's R22).
|
||||
+ */
|
||||
+ "mov %0, x22\n\t"
|
||||
+ /*
|
||||
+ * restore callee-saves registers.
|
||||
+ */
|
||||
+ "ldr lr, [sp], #8\n\t"
|
||||
+ "ldp ip0, ip1, [sp], #16\n\t"
|
||||
+ "ldp x27, x28, [sp], #16\n\t"
|
||||
+ "ldp x25, x26, [sp], #16\n\t"
|
||||
+ "ldp x23, x24, [sp], #16\n\t"
|
||||
+ "ldp x21, x22, [sp], #16\n\t"
|
||||
+ "ldp x19, x20, [sp], #16\n\t"
|
||||
+
|
||||
+ : "=r" (r)
|
||||
+ : "r" (f), "r" (basereg), "i" (RESERVED_C_STACK_BYTES)
|
||||
+ : "%x19", "%x20", "%x21", "%x22", "%x23", "%x24", "%x25", "%x26", "%x27", "%x28",
|
||||
+ "%ip0", "%ip1", "%lr"
|
||||
+ );
|
||||
+ return r;
|
||||
+}
|
||||
+
|
||||
+#endif
|
||||
+
|
||||
#endif /* !USE_MINIINTERPRETER */
|
@ -1,31 +0,0 @@
|
||||
From 44cee4852282f63393d532aad59c5cd865ff3ed6 Mon Sep 17 00:00:00 2001
|
||||
From: Erik de Castro Lopo <erikd@mega-nerd.com>
|
||||
Date: Wed, 1 Apr 2015 04:46:01 +0000
|
||||
Subject: [PATCH] mk/config.mk.in : Enable SMP and GHCi support for Aarch64.
|
||||
|
||||
---
|
||||
mk/config.mk.in | 4 ++--
|
||||
1 file changed, 2 insertions(+), 2 deletions(-)
|
||||
|
||||
Index: ghc-7.8.4/mk/config.mk.in
|
||||
===================================================================
|
||||
--- ghc-7.8.4.orig/mk/config.mk.in
|
||||
+++ ghc-7.8.4/mk/config.mk.in
|
||||
@@ -174,7 +174,7 @@ HaveLibDL = @HaveLibDL@
|
||||
|
||||
# ArchSupportsSMP should be set iff there is support for that arch in
|
||||
# includes/stg/SMP.h
|
||||
-ArchSupportsSMP=$(strip $(patsubst $(TargetArch_CPP), YES, $(findstring $(TargetArch_CPP), i386 x86_64 sparc powerpc powerpc64 powerpc64le arm)))
|
||||
+ArchSupportsSMP=$(strip $(patsubst $(TargetArch_CPP), YES, $(findstring $(TargetArch_CPP), i386 x86_64 sparc powerpc powerpc64 powerpc64le arm aarch64)))
|
||||
|
||||
GhcWithSMP := $(strip $(if $(filter YESNO, $(ArchSupportsSMP)$(GhcUnregisterised)),YES,NO))
|
||||
|
||||
@@ -182,7 +182,7 @@ GhcWithSMP := $(strip $(if $(filter YESN
|
||||
# has support for this OS/ARCH combination.
|
||||
|
||||
OsSupportsGHCi=$(strip $(patsubst $(TargetOS_CPP), YES, $(findstring $(TargetOS_CPP), mingw32 cygwin32 linux solaris2 freebsd dragonfly netbsd openbsd darwin kfreebsdgnu)))
|
||||
-ArchSupportsGHCi=$(strip $(patsubst $(TargetArch_CPP), YES, $(findstring $(TargetArch_CPP), i386 x86_64 powerpc powerpc64 powerpc64le sparc sparc64 arm)))
|
||||
+ArchSupportsGHCi=$(strip $(patsubst $(TargetArch_CPP), YES, $(findstring $(TargetArch_CPP), i386 x86_64 powerpc powerpc64 powerpc64le sparc sparc64 arm aarch64)))
|
||||
|
||||
ifeq "$(OsSupportsGHCi)$(ArchSupportsGHCi)" "YESYES"
|
||||
GhcWithInterpreter=YES
|
@ -1,26 +0,0 @@
|
||||
From 7d738547049e686be4d90a19dcb9520418d5f72d Mon Sep 17 00:00:00 2001
|
||||
From: Jens Petersen <petersen@redhat.com>
|
||||
Date: Mon, 9 Jun 2014 15:48:41 +0900
|
||||
Subject: [PATCH] define _DEFAULT_SOURCE in Stg.h to avoid warnings from glibc
|
||||
2.20 (#9185)
|
||||
|
||||
---
|
||||
includes/Stg.h | 2 ++
|
||||
1 file changed, 2 insertions(+)
|
||||
|
||||
diff --git a/includes/Stg.h b/includes/Stg.h
|
||||
index 1707c9b..fbcf643 100644
|
||||
--- a/includes/Stg.h
|
||||
+++ b/includes/Stg.h
|
||||
@@ -47,6 +47,8 @@
|
||||
// We need _BSD_SOURCE so that math.h defines things like gamma
|
||||
// on Linux
|
||||
# define _BSD_SOURCE
|
||||
+// glibc 2.20 deprecates _BSD_SOURCE in favour of _DEFAULT_SOURCE
|
||||
+# define _DEFAULT_SOURCE
|
||||
#endif
|
||||
|
||||
#if IN_STG_CODE == 0 || defined(llvm_CC_FLAVOR)
|
||||
--
|
||||
1.9.3
|
||||
|
36
ghc.changes
36
ghc.changes
@ -1,3 +1,39 @@
|
||||
-------------------------------------------------------------------
|
||||
Mon Aug 10 17:38:34 UTC 2015 - peter.trommler@ohm-hochschule.de
|
||||
|
||||
- update to 7.10.2
|
||||
* type checker fixes
|
||||
* fixes for Aarch64 support
|
||||
* fix deadlock in runtime system when scheduling garbage collection
|
||||
- 7.10.1 highlights
|
||||
* implement Applicative Monad Proposal
|
||||
* implement Burning Bridges Proposal
|
||||
* support for partial type signatures
|
||||
* reimplement integer-gmp
|
||||
* support plugins in type checker (experimental!)
|
||||
- drop llvm-powerpc64-datalayout.patch
|
||||
* this patch was incomplete all along and now we have our native
|
||||
code generator
|
||||
- drop ghc-cabal-unversion-docdir.patch
|
||||
* ghc-rpm-macros is following ghc's doc layout so no need to patch
|
||||
- drop D349.patch
|
||||
* fixed upstream
|
||||
- drop integer-gmp.patch
|
||||
* we do not support SLE11 anymore
|
||||
- drop ghc-7.8.2-cgen-constify.patch
|
||||
* fixed upstream
|
||||
- drop D560.patch
|
||||
* fixed upstream
|
||||
- drop ghc-glibc-2.20_BSD_SOURCE.patch
|
||||
* fixed upstream
|
||||
- drop ghc-arm64.patch
|
||||
* fixed upstream
|
||||
- drop ghc-config.mk.in-Enable-SMP-and-GHCi-support-for-Aarch64.patch
|
||||
* fixed upstream
|
||||
- refresh 0001-implement-native-code-generator-for-ppc64.patch
|
||||
- disable ghc-7.8-arm-use-ld-gold.patch
|
||||
* not sure we need this, must be rebased if we do
|
||||
|
||||
-------------------------------------------------------------------
|
||||
Fri Jul 17 14:58:44 UTC 2015 - peter.trommler@ohm-hochschule.de
|
||||
|
||||
|
91
ghc.spec
91
ghc.spec
@ -19,7 +19,7 @@
|
||||
%global unregisterised_archs aarch64 s390 s390x
|
||||
|
||||
Name: ghc
|
||||
Version: 7.8.4
|
||||
Version: 7.10.2
|
||||
Release: 0
|
||||
Url: http://haskell.org/ghc/dist/%{version}/%{name}-%{version}-src.tar.bz2
|
||||
Summary: The Glorious Glasgow Haskell Compiler
|
||||
@ -28,7 +28,7 @@ Group: Development/Languages/Other
|
||||
ExclusiveArch: aarch64 %{ix86} x86_64 ppc ppc64 ppc64le s390 s390x
|
||||
BuildRequires: binutils-devel
|
||||
BuildRequires: gcc
|
||||
BuildRequires: ghc-bootstrap >= 7.4
|
||||
BuildRequires: ghc-bootstrap >= 7.6
|
||||
BuildRequires: ghc-rpm-macros-extra
|
||||
BuildRequires: glibc-devel
|
||||
BuildRequires: gmp-devel
|
||||
@ -59,24 +59,8 @@ Requires: ghc-ghc-devel = %{version}-%{release}
|
||||
Requires: ghc-libraries = %{version}-%{release}
|
||||
Source: http://haskell.org/ghc/dist/%{version}/%{name}-%{version}-src.tar.xz
|
||||
Source1: ghc-rpmlintrc
|
||||
# PATCH-FIX-UPSTREAM llvm-powerpc64-datalayout.patch peter.trommler@ohm-hochschule.de - Add target datalayout for llvm on powerpc 64.
|
||||
Patch8: llvm-powerpc64-datalayout.patch
|
||||
# PATCH-FIX-UPSTREAM D349.patch peter.trommler@ohm-hochschule.de - Fix dynamic linker, see Haskell trac #8935.
|
||||
Patch12: D349.patch
|
||||
# PATCH-FIX-UPSTREAM integer-gmp.patch peter.trommler@ohm-hochschule.de -- Fix upstream ticket #8156 see https://ghc.haskell.org/trac/ghc/ticket/8156. We need this for SLE 11 where libgmp is too old and so we have to use the bundled libgmp. This patch fixes the build.
|
||||
Patch13: integer-gmp.patch
|
||||
# PATCH-FIX-UPSTREAM ghc-7.8.2-cgen-constify.patch peter.trommler@ohm-hochschule.de - Make constant strings constant in C backend to save data segment space. This is a gentoo patch.
|
||||
Patch14: ghc-7.8.2-cgen-constify.patch
|
||||
# PATCH-FIX-UPSTREAM D560.patch peter.trommler@ohm-hochschule.de -- Fix loading of PIC register. See https://phabricator.haskell.org/D560.
|
||||
Patch18: D560.patch
|
||||
# PATCH-FEATURE-UPSTREAM 0001-implement-native-code-generator-for-ppc64.patch peter.trommler@ohm-hochschule.de -- Implement native code generator for ppc64. Haskell Trac #9863.
|
||||
Patch19: 0001-implement-native-code-generator-for-ppc64.patch
|
||||
# PATCH-FIX-UPSTREAM ghc-glibc-2.20_BSD_SOURCE.patch peter.trommler@ohm-hochschule.de -- Define _DEFAULT_SOURCE in Stg.h to avoid warnings from glibc. Fedora patch
|
||||
Patch20: ghc-glibc-2.20_BSD_SOURCE.patch
|
||||
# PATCH-FIX-OPENSUSE add aarch64 support
|
||||
Patch21: ghc-arm64.patch
|
||||
# PATCH-FIX-UPSTREAM ghc-config.mk.in-Enable-SMP-and-GHCi-support-for-Aarch64.patch peter.trommler@ohm-hochschule.de -- Provide SMP implementation and enable GHCi on aarch64. Adapted from Fedora patch 26.
|
||||
Patch22: ghc-config.mk.in-Enable-SMP-and-GHCi-support-for-Aarch64.patch
|
||||
# PATCH-FIX-UPSTREAM peter.trommler@ohm-hochschule.de -- GNU ld does not work with ghc on aarch64 so use Gold. Adapted from Fedora patch 24.
|
||||
Patch23: ghc-7.8-arm-use-ld-gold.patch
|
||||
|
||||
@ -125,32 +109,28 @@ To install all of GHC install package ghc.
|
||||
%global ghc_pkg_c_deps ghc-compiler = %{ghc_version_override}-%{release}
|
||||
|
||||
%if %{defined ghclibdir}
|
||||
%ghc_lib_subpackage Cabal 1.18.1.5
|
||||
%ghc_lib_subpackage array 0.5.0.0
|
||||
%ghc_lib_subpackage -c gmp-devel,libffi-devel base 4.7.0.2
|
||||
%ghc_lib_subpackage binary 0.7.1.0
|
||||
%ghc_lib_subpackage bytestring 0.10.4.0
|
||||
%ghc_lib_subpackage containers 0.5.5.1
|
||||
%ghc_lib_subpackage deepseq 1.3.0.2
|
||||
%ghc_lib_subpackage directory 1.2.1.0
|
||||
%ghc_lib_subpackage filepath 1.3.0.2
|
||||
%ghc_lib_subpackage Cabal 1.22.4.0
|
||||
%ghc_lib_subpackage array 0.5.1.0
|
||||
%ghc_lib_subpackage -c gmp-devel,libffi-devel base 4.8.1.0
|
||||
%ghc_lib_subpackage binary 0.7.5.0
|
||||
%ghc_lib_subpackage bytestring 0.10.6.0
|
||||
%ghc_lib_subpackage containers 0.5.6.2
|
||||
%ghc_lib_subpackage deepseq 1.4.1.1
|
||||
%ghc_lib_subpackage directory 1.2.2.0
|
||||
%ghc_lib_subpackage filepath 1.4.0.0
|
||||
%define ghc_pkg_obsoletes ghc-bin-package-db-devel < 0.0.0.0-%{release}
|
||||
%ghc_lib_subpackage -x ghc %{ghc_version_override}
|
||||
%undefine ghc_pkg_obsoletes
|
||||
%ghc_lib_subpackage haskeline 0.7.1.2
|
||||
%ghc_lib_subpackage haskell2010 1.1.2.0
|
||||
%ghc_lib_subpackage haskell98 2.0.0.3
|
||||
%ghc_lib_subpackage hoopl 3.10.0.1
|
||||
%ghc_lib_subpackage hpc 0.6.0.1
|
||||
%ghc_lib_subpackage old-locale 1.0.0.6
|
||||
%ghc_lib_subpackage old-time 1.1.0.2
|
||||
%ghc_lib_subpackage pretty 1.1.1.1
|
||||
%ghc_lib_subpackage process 1.2.0.0
|
||||
%ghc_lib_subpackage template-haskell 2.9.0.0
|
||||
%ghc_lib_subpackage terminfo 0.4.0.0
|
||||
%ghc_lib_subpackage time 1.4.2
|
||||
%ghc_lib_subpackage transformers 0.3.0.0
|
||||
%ghc_lib_subpackage unix 2.7.0.1
|
||||
%ghc_lib_subpackage haskeline 0.7.2.1
|
||||
%ghc_lib_subpackage hoopl 3.10.0.2
|
||||
%ghc_lib_subpackage hpc 0.6.0.2
|
||||
%ghc_lib_subpackage pretty 1.1.2.0
|
||||
%ghc_lib_subpackage process 1.2.3.0
|
||||
%ghc_lib_subpackage template-haskell 2.10.0.0
|
||||
%ghc_lib_subpackage terminfo 0.4.0.1
|
||||
%ghc_lib_subpackage time 1.5.0.1
|
||||
%ghc_lib_subpackage transformers 0.4.2.0
|
||||
%ghc_lib_subpackage unix 2.7.1.0
|
||||
%ghc_lib_subpackage xhtml 3000.2.1
|
||||
%endif
|
||||
|
||||
@ -172,21 +152,11 @@ except the ghc library, which is installed by the toplevel ghc metapackage.
|
||||
|
||||
%prep
|
||||
%setup -q
|
||||
%patch8 -p1
|
||||
%patch12 -p1
|
||||
%patch13 -p1
|
||||
%patch14 -p1
|
||||
%patch18 -p1
|
||||
%patch19 -p1
|
||||
%patch20 -p1
|
||||
%patch21 -p1
|
||||
%ifarch aarch64
|
||||
%patch22 -p1 -b .orig
|
||||
%endif
|
||||
|
||||
%ifarch armv7hl aarch64
|
||||
%patch23 -p1 -b .24~
|
||||
%endif
|
||||
#%%ifarch armv7hl aarch64
|
||||
#%%patch23 -p1 -b .24~
|
||||
#%%endif
|
||||
|
||||
%build
|
||||
# Patch 19 and 22 modify build system
|
||||
@ -296,8 +266,8 @@ echo "%dir %{ghclibdir}" >> ghc-base.files
|
||||
|
||||
%ghc_gen_filelists bin-package-db 0.0.0.0
|
||||
%ghc_gen_filelists ghc %{ghc_version_override}
|
||||
%ghc_gen_filelists ghc-prim 0.3.1.0
|
||||
%ghc_gen_filelists integer-gmp 0.5.1.0
|
||||
%ghc_gen_filelists ghc-prim 0.4.0.0
|
||||
%ghc_gen_filelists integer-gmp 1.0.0.0
|
||||
|
||||
%define merge_filelist()\
|
||||
cat ghc-%1.files >> ghc-%2.files\
|
||||
@ -310,12 +280,12 @@ echo "%doc libraries/LICENSE.%1" >> ghc-%2.files
|
||||
%merge_filelist bin-package-db ghc
|
||||
|
||||
%if %{undefined ghc_without_shared}
|
||||
echo %%dir %{ghclibdir}/rts-1.0 >> ghc-base.files
|
||||
ls %{buildroot}%{ghclibdir}/rts-1.0/libHS*.so >> ghc-base.files
|
||||
echo %%dir %{ghclibdir}/rts >> ghc-base.files
|
||||
ls %{buildroot}%{ghclibdir}/rts/libHS*.so >> ghc-base.files
|
||||
sed -i -e "s|^%{buildroot}||g" ghc-base.files
|
||||
%endif
|
||||
echo %%dir %{ghclibdir}/rts-1.0 >> ghc-base-devel.files
|
||||
ls -d %{buildroot}%{ghclibdir}/rts-1.0/libHS*.a %{buildroot}%{ghclibdir}/package.conf.d/builtin_*.conf %{buildroot}%{ghclibdir}/include >> ghc-base-devel.files
|
||||
echo %%dir %{ghclibdir}/rts >> ghc-base-devel.files
|
||||
ls -d %{buildroot}%{ghclibdir}/rts/libHS*.a %{buildroot}%{ghclibdir}/package.conf.d/builtin_*.conf %{buildroot}%{ghclibdir}/include >> ghc-base-devel.files
|
||||
sed -i -e "s|^%{buildroot}||g" ghc-base-devel.files
|
||||
|
||||
# these are handled as alternatives
|
||||
@ -411,7 +381,6 @@ fi
|
||||
%endif
|
||||
%{ghclibdir}/ghc-usage.txt
|
||||
%{ghclibdir}/ghci-usage.txt
|
||||
%{ghclibdir}/mkGmpDerivedConstants
|
||||
%dir %{ghclibdir}/package.conf.d
|
||||
%ghost %{ghclibdir}/package.conf.d/package.cache
|
||||
%{ghclibdir}/platformConstants
|
||||
|
@ -1,26 +0,0 @@
|
||||
Index: ghc-7.8.3/libraries/integer-gmp/gmp/ghc.mk
|
||||
===================================================================
|
||||
--- ghc-7.8.3.orig/libraries/integer-gmp/gmp/ghc.mk
|
||||
+++ ghc-7.8.3/libraries/integer-gmp/gmp/ghc.mk
|
||||
@@ -66,6 +66,12 @@ else
|
||||
BUILD_SHARED=no
|
||||
endif
|
||||
|
||||
+ifeq "$(firstword $(subst -, ,$(HOSTPLATFORM)))" "x86_64"
|
||||
+ FORCE_PIC=--with-pic=yes
|
||||
+else
|
||||
+ FORCE_PIC=
|
||||
+endif
|
||||
+
|
||||
# In a bindist, we don't want to know whether /this/ machine has gmp,
|
||||
# but whether the machine the bindist was built on had gmp.
|
||||
ifeq "$(BINDIST)" "YES"
|
||||
@@ -147,7 +153,7 @@ libraries/integer-gmp/gmp/libgmp.a libra
|
||||
export PATH; \
|
||||
cd gmpbuild && \
|
||||
CC=$(CCX) NM=$(NM) AR=$(AR_STAGE1) ./configure \
|
||||
- --enable-shared=no \
|
||||
+ --enable-shared=no $(FORCE_PIC) \
|
||||
--host=$(HOSTPLATFORM) --build=$(BUILDPLATFORM)
|
||||
$(MAKE) -C libraries/integer-gmp/gmp/gmpbuild MAKEFLAGS=
|
||||
$(CP) libraries/integer-gmp/gmp/gmpbuild/gmp.h libraries/integer-gmp/gmp/
|
@ -1,14 +0,0 @@
|
||||
Index: ghc-7.8.2/compiler/llvmGen/LlvmCodeGen/Ppr.hs
|
||||
===================================================================
|
||||
--- ghc-7.8.2.orig/compiler/llvmGen/LlvmCodeGen/Ppr.hs
|
||||
+++ ghc-7.8.2/compiler/llvmGen/LlvmCodeGen/Ppr.hs
|
||||
@@ -64,6 +64,9 @@ moduleLayout = sdocWithPlatform $ \platf
|
||||
Platform { platformArch = ArchX86, platformOS = OSiOS } ->
|
||||
text "target datalayout = \"e-p:32:32:32-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:32:64-f32:32:32-f64:32:64-v64:64:64-v128:128:128-a0:0:64-f80:128:128-n8:16:32\""
|
||||
$+$ text "target triple = \"i386-apple-darwin11\""
|
||||
+ Platform { platformArch = ArchPPC_64 , platformOS = OSLinux } ->
|
||||
+ text "target datalayout = \"E-p:64:64:64-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64-f32:32:32-f64:64:64-v128:128:128-n32:64\""
|
||||
+ $+$ text "target triple = \"powerpc64-unknown-linux-gnu\""
|
||||
_ ->
|
||||
-- FIX: Other targets
|
||||
empty
|
Loading…
x
Reference in New Issue
Block a user