Porting GHC to Barrelfish: base.patch
| File base.patch, 25.6 KB (added by rmcilroy, 22 months ago) |
|---|
-
base.cabal
Wed Aug 11 10:56:14 BST 2010 rmcilroy@microsoft.com * Checkpoint GHC on Barrelfish work Now at the stage where we can build and run a helloword Haskell application on Barrelfish. Mon Aug 9 13:43:09 BST 2010 rmcilroy@microsoft.com * missing files from previous checkpoint of barrelfish port Mon Aug 9 10:49:44 BST 2010 rmcilroy@microsoft.com * Checkpoint barrelfish compatability changes Thu Jul 29 14:55:54 BST 2010 rmcilroy@microsoft.com * Changes to get ghc building against Barrelfish diff -rN -u old-base/base.cabal new-base/base.cabal
old new 204 204 cbits/inputReady.c 205 205 cbits/selectUtils.c 206 206 cbits/primFloat.c 207 cbits/BFishUtils.c 207 208 include-dirs: include 208 209 includes: HsBase.h 209 210 install-includes: HsBase.h HsBaseConfig.h WCsubst.h consUtils.h Typeable.h -
cbits/BFishUtils.c
diff -rN -u old-base/cbits/BFishUtils.c new-base/cbits/BFishUtils.c
old new 1 /* ---------------------------------------------------------------------------- 2 (c) The University of Glasgow 2006 3 4 Useful Barrelfish bits 5 ------------------------------------------------------------------------- */ 6 7 #include "HsBase.h" 8 9 #ifdef barrelfish_HOST_OS 10 11 HsWord64 getUSecOfDay(void) 12 { 13 printf("NYI getUSecOfDay\n"); 14 return 0; 15 } 16 17 #endif -
cbits/iconv.c
diff -rN -u old-base/cbits/iconv.c new-base/cbits/iconv.c
old new 1 #if ndef __MINGW32__1 #if !defined(__MINGW32__) && !defined(BARRELFISH) 2 2 3 3 #include <stdlib.h> 4 4 #include <iconv.h> -
cbits/inputReady.c
diff -rN -u old-base/cbits/inputReady.c new-base/cbits/inputReady.c
old new 16 16 int 17 17 fdReady(int fd, int write, int msecs, int isSock) 18 18 { 19 20 #ifdef BARRELFISH 21 return 1; // Currently just return 1, look into this in the future 22 #else 23 19 24 if 20 25 #if defined(_MSC_VER) || defined(__MINGW32__) || defined(_WIN32) 21 26 ( isSock ) { … … 165 170 } 166 171 } 167 172 #endif 173 #endif 168 174 } -
cbits/PrelIOUtils.c
diff -rN -u old-base/cbits/PrelIOUtils.c new-base/cbits/PrelIOUtils.c
old new 30 30 # include <langinfo.h> 31 31 #endif 32 32 33 #if !defined(mingw32_HOST_OS) 33 #if !defined(mingw32_HOST_OS) && !defined(barrelfish_HOST_OS) 34 34 const char* localeEncoding(void) 35 35 { 36 36 #if defined(HAVE_LIBCHARSET) -
cbits/WCsubst.c
diff -rN -u old-base/cbits/WCsubst.c new-base/cbits/WCsubst.c
old new 4066 4066 int numblocks, 4067 4067 int unichar) 4068 4068 { 4069 #ifdef BARRELFISH 4070 return NULL; 4071 #else 4069 4072 struct _charblock_ key={unichar,1,(void *)0}; 4070 4073 struct _charblock_ *cb=bsearch(&key,blocks,numblocks,sizeof(key),blkcmp); 4071 4074 if(cb==(void *)0) return &nullrule; 4072 4075 return cb->rule; 4076 #endif 4073 4077 } 4074 4078 4075 4079 -
config.sub
diff -rN -u old-base/config.sub new-base/config.sub
old new 4 4 # 2000, 2001, 2002, 2003, 2004, 2005, 2006 Free Software Foundation, 5 5 # Inc. 6 6 7 timestamp='20 06-07-02'7 timestamp='2010-08-10' 8 8 9 9 # This file is (in principle) common to ALL GNU software. 10 10 # The presence of a machine in this file suggests that SOME GNU software … … 1344 1344 -zvmoe) 1345 1345 os=-zvmoe 1346 1346 ;; 1347 -barrelfish) 1348 os=-barrelfish 1349 ;; 1347 1350 -none) 1348 1351 ;; 1349 1352 *) -
configure.ac
diff -rN -u old-base/configure.ac new-base/configure.ac
old new 52 52 AC_SUBST(ICONV_LIB_DIRS) 53 53 54 54 # map standard C types and ISO types to Haskell types 55 FPTOOLS_CHECK_HTYPE(char )56 FPTOOLS_CHECK_HTYPE(signed char )57 FPTOOLS_CHECK_HTYPE(unsigned char )58 FPTOOLS_CHECK_HTYPE(short )59 FPTOOLS_CHECK_HTYPE(unsigned short )60 FPTOOLS_CHECK_HTYPE(int )61 FPTOOLS_CHECK_HTYPE(unsigned int )62 FPTOOLS_CHECK_HTYPE(long )63 FPTOOLS_CHECK_HTYPE(unsigned long )55 FPTOOLS_CHECK_HTYPE(char, , Int8) 56 FPTOOLS_CHECK_HTYPE(signed char, , Int8) 57 FPTOOLS_CHECK_HTYPE(unsigned char, , Word8) 58 FPTOOLS_CHECK_HTYPE(short, , Int16) 59 FPTOOLS_CHECK_HTYPE(unsigned short, , Word16) 60 FPTOOLS_CHECK_HTYPE(int, , Int32) 61 FPTOOLS_CHECK_HTYPE(unsigned int, , Word32) 62 FPTOOLS_CHECK_HTYPE(long, , Int64) 63 FPTOOLS_CHECK_HTYPE(unsigned long, , Word64) 64 64 if test "$ac_cv_type_long_long" = yes; then 65 FPTOOLS_CHECK_HTYPE(long long )66 FPTOOLS_CHECK_HTYPE(unsigned long long )65 FPTOOLS_CHECK_HTYPE(long long, , Int64) 66 FPTOOLS_CHECK_HTYPE(unsigned long long, , Word64) 67 67 fi 68 FPTOOLS_CHECK_HTYPE(float )69 FPTOOLS_CHECK_HTYPE(double )70 FPTOOLS_CHECK_HTYPE(ptrdiff_t )71 FPTOOLS_CHECK_HTYPE(size_t )72 FPTOOLS_CHECK_HTYPE(wchar_t )68 FPTOOLS_CHECK_HTYPE(float, , Float) 69 FPTOOLS_CHECK_HTYPE(double, , Double) 70 FPTOOLS_CHECK_HTYPE(ptrdiff_t, , Int64) 71 FPTOOLS_CHECK_HTYPE(size_t, , Word64) 72 FPTOOLS_CHECK_HTYPE(wchar_t, , Int32) 73 73 # Int32 is a HACK for non-ISO C compilers 74 FPTOOLS_CHECK_HTYPE(sig_atomic_t, Int32 )75 FPTOOLS_CHECK_HTYPE(clock_t )76 FPTOOLS_CHECK_HTYPE(time_t )77 FPTOOLS_CHECK_HTYPE(dev_t, Word32 )78 FPTOOLS_CHECK_HTYPE(ino_t )79 FPTOOLS_CHECK_HTYPE(mode_t )80 FPTOOLS_CHECK_HTYPE(off_t )81 FPTOOLS_CHECK_HTYPE(pid_t )82 FPTOOLS_CHECK_HTYPE(gid_t )83 FPTOOLS_CHECK_HTYPE(uid_t )84 FPTOOLS_CHECK_HTYPE(cc_t )85 FPTOOLS_CHECK_HTYPE(speed_t )74 FPTOOLS_CHECK_HTYPE(sig_atomic_t, Int32, Int32) 75 FPTOOLS_CHECK_HTYPE(clock_t, , Int64) 76 FPTOOLS_CHECK_HTYPE(time_t, , Int64) 77 FPTOOLS_CHECK_HTYPE(dev_t, Word32, Int64) 78 FPTOOLS_CHECK_HTYPE(ino_t, , Int64) 79 FPTOOLS_CHECK_HTYPE(mode_t, , Int32) 80 FPTOOLS_CHECK_HTYPE(off_t, , Word64) 81 FPTOOLS_CHECK_HTYPE(pid_t, , Word32) 82 FPTOOLS_CHECK_HTYPE(gid_t, , Word32) 83 FPTOOLS_CHECK_HTYPE(uid_t, , Word32) 84 FPTOOLS_CHECK_HTYPE(cc_t, , Word32) 85 FPTOOLS_CHECK_HTYPE(speed_t, , Word32) 86 86 FPTOOLS_CHECK_HTYPE(tcflag_t) 87 FPTOOLS_CHECK_HTYPE(nlink_t )88 FPTOOLS_CHECK_HTYPE(ssize_t )87 FPTOOLS_CHECK_HTYPE(nlink_t, , Word32) 88 FPTOOLS_CHECK_HTYPE(ssize_t, , Word32) 89 89 FPTOOLS_CHECK_HTYPE(rlim_t) 90 90 FPTOOLS_CHECK_HTYPE(wint_t) 91 91 92 FPTOOLS_CHECK_HTYPE(intptr_t )93 FPTOOLS_CHECK_HTYPE(uintptr_t )92 FPTOOLS_CHECK_HTYPE(intptr_t, , Int64) 93 FPTOOLS_CHECK_HTYPE(uintptr_t, , Word64) 94 94 # Workaround for OSes that don't have intmax_t and uintmax_t, e.g. OpenBSD. 95 95 if test "$ac_cv_type_long_long" = yes; then 96 96 fptools_cv_default_htype_intmax=$fptools_cv_htype_long_long … … 99 99 fptools_cv_default_htype_intmax=$fptools_cv_htype_long 100 100 fptools_cv_default_htype_uintmax=$fptools_cv_htype_unsigned_long 101 101 fi 102 FPTOOLS_CHECK_HTYPE(intmax_t, $fptools_cv_default_htype_intmax )103 FPTOOLS_CHECK_HTYPE(uintmax_t, $fptools_cv_default_htype_uintmax )102 FPTOOLS_CHECK_HTYPE(intmax_t, $fptools_cv_default_htype_intmax, Int64) 103 FPTOOLS_CHECK_HTYPE(uintmax_t, $fptools_cv_default_htype_uintmax, Word64) 104 104 105 105 # test errno values 106 106 FP_CHECK_CONSTS([E2BIG EACCES EADDRINUSE EADDRNOTAVAIL EADV EAFNOSUPPORT EAGAIN EALREADY EBADF EBADMSG EBADRPC EBUSY ECHILD ECOMM ECONNABORTED ECONNREFUSED ECONNRESET EDEADLK EDESTADDRREQ EDIRTY EDOM EDQUOT EEXIST EFAULT EFBIG EFTYPE EHOSTDOWN EHOSTUNREACH EIDRM EILSEQ EINPROGRESS EINTR EINVAL EIO EISCONN EISDIR ELOOP EMFILE EMLINK EMSGSIZE EMULTIHOP ENAMETOOLONG ENETDOWN ENETRESET ENETUNREACH ENFILE ENOBUFS ENODATA ENODEV ENOENT ENOEXEC ENOLCK ENOLINK ENOMEM ENOMSG ENONET ENOPROTOOPT ENOSPC ENOSR ENOSTR ENOSYS ENOTBLK ENOTCONN ENOTDIR ENOTEMPTY ENOTSOCK ENOTTY ENXIO EOPNOTSUPP EPERM EPFNOSUPPORT EPIPE EPROCLIM EPROCUNAVAIL EPROGMISMATCH EPROGUNAVAIL EPROTO EPROTONOSUPPORT EPROTOTYPE ERANGE EREMCHG EREMOTE EROFS ERPCMISMATCH ERREMOTE ESHUTDOWN ESOCKTNOSUPPORT ESPIPE ESRCH ESRMNT ESTALE ETIME ETIMEDOUT ETOOMANYREFS ETXTBSY EUSERS EWOULDBLOCK EXDEV ENOCIGAR], [#include <stdio.h> … … 121 121 # to give prototype text. 122 122 FP_SEARCH_LIBS_PROTO(iconv, 123 123 [ 124 #ifndef BARRELFISH 124 125 #include <stddef.h> 125 126 #include <iconv.h> 127 #endif 126 128 ], 127 [iconv_t cd; 129 [#ifndef BARRELFISH 130 iconv_t cd; 128 131 cd = iconv_open("", ""); 129 132 iconv(cd,NULL,NULL,NULL,NULL); 130 iconv_close(cd);], 133 iconv_close(cd); 134 #endif 135 ], 131 136 iconv, 132 137 [EXTRA_LIBS="$EXTRA_LIBS $ac_lib"], 133 138 [case `uname -s` in -
GHC/Conc.lhs
diff -rN -u old-base/GHC/Conc.lhs new-base/GHC/Conc.lhs
old new 80 80 , asyncWriteBA -- :: Int -> Int -> Int -> Int -> MutableByteArray# RealWorld -> IO (Int, Int) 81 81 #endif 82 82 83 #ifndef mingw32_HOST_OS 84 , Signal, HandlerFun, setHandler, runHandlers 83 #if !defined(mingw32_HOST_OS) 84 , Signal 85 #endif 86 #if !defined(mingw32_HOST_OS) && !defined(barrelfish_HOST_OS) 87 , HandlerFun, setHandler, runHandlers 85 88 #endif 86 89 87 90 , ensureIOManagerIsRunning 88 #if ndef mingw32_HOST_OS91 #if !defined(mingw32_HOST_OS) && !defined(barrelfish_HOST_OS) 89 92 , syncIOManager 90 93 #endif 91 94 … … 101 104 ) where 102 105 103 106 import System.Posix.Types 104 #if ndef mingw32_HOST_OS107 #if !defined(mingw32_HOST_OS) && !defined(barrelfish_HOST_OS) 105 108 import System.Posix.Internals 106 109 #endif 107 110 import Foreign 108 111 import Foreign.C 109 112 110 #if def mingw32_HOST_OS113 #if defined(mingw32_HOST_OS) || defined(barrelfish_HOST_OS) 111 114 import Data.Typeable 112 115 #endif 113 116 114 #if ndef mingw32_HOST_OS117 #if !defined(mingw32_HOST_OS) && !defined(barrelfish_HOST_OS) 115 118 import Data.Dynamic 116 119 #endif 117 120 import Control.Monad 118 121 import Data.Maybe 119 122 120 123 import GHC.Base 121 #if ndef mingw32_HOST_OS124 #if !defined(mingw32_HOST_OS) && !defined(barrelfish_HOST_OS) 122 125 import GHC.Debug 123 126 #endif 124 127 import {-# SOURCE #-} GHC.IO.Handle ( hFlush ) … … 130 133 import GHC.MVar 131 134 import GHC.Num ( Num(..) ) 132 135 import GHC.Real ( fromIntegral ) 133 #if ndef mingw32_HOST_OS136 #if !defined(mingw32_HOST_OS) && !defined(barrelfish_HOST_OS) 134 137 import GHC.IOArray 135 138 import GHC.Arr ( inRange ) 136 139 #endif 137 #if def mingw32_HOST_OS140 #if defined(mingw32_HOST_OS) || defined(barrelfish_HOST_OS) 138 141 import GHC.Real ( div ) 139 142 import GHC.Ptr 140 143 #endif 141 #if def mingw32_HOST_OS144 #if defined(mingw32_HOST_OS) || defined(barrelfish_HOST_OS) 142 145 import GHC.Read ( Read ) 143 146 import GHC.Enum ( Enum ) 144 147 #endif … … 696 699 -- given file descriptor (GHC only). 697 700 threadWaitRead :: Fd -> IO () 698 701 threadWaitRead fd 699 #if ndef mingw32_HOST_OS702 #if !defined(mingw32_HOST_OS) && !defined(barrelfish_HOST_OS) 700 703 | threaded = waitForReadEvent fd 701 704 #endif 702 705 | otherwise = IO $ \s -> … … 708 711 -- given file descriptor (GHC only). 709 712 threadWaitWrite :: Fd -> IO () 710 713 threadWaitWrite fd 711 #if ndef mingw32_HOST_OS714 #if !defined(mingw32_HOST_OS) && !defined(barrelfish_HOST_OS) 712 715 | threaded = waitForWriteEvent fd 713 716 #endif 714 717 | otherwise = IO $ \s -> … … 780 783 -- around the scheduler loop. Furthermore, the scheduler can be simplified 781 784 -- by not having to check for completed IO requests. 782 785 783 #if ndef mingw32_HOST_OS786 #if !defined(mingw32_HOST_OS) && !defined(barrelfish_HOST_OS) 784 787 data IOReq 785 788 = Read {-# UNPACK #-} !Fd {-# UNPACK #-} !(MVar ()) 786 789 | Write {-# UNPACK #-} !Fd {-# UNPACK #-} !(MVar ()) … … 790 793 = Delay {-# UNPACK #-} !USecs {-# UNPACK #-} !(MVar ()) 791 794 | DelaySTM {-# UNPACK #-} !USecs {-# UNPACK #-} !(TVar Bool) 792 795 793 #if ndef mingw32_HOST_OS796 #if !defined(mingw32_HOST_OS) && !defined(barrelfish_HOST_OS) 794 797 {-# NOINLINE pendingEvents #-} 795 798 pendingEvents :: IORef [IOReq] 796 799 pendingEvents = unsafePerformIO $ do … … 1010 1013 foreign import stdcall "WaitForSingleObject" 1011 1014 c_WaitForSingleObject :: HANDLE -> DWORD -> IO DWORD 1012 1015 1016 #elif defined(barrelfish_HOST_OS) 1017 -- ---------------------------------------------------------------------------- 1018 -- Barrelfish IO manager thread 1019 1020 ioManager :: IO () 1021 ioManager = do 1022 return () 1023 1024 wakeupIOManager :: IO () 1025 wakeupIOManager = do 1026 return () 1027 1028 type Signal = CInt 1029 1013 1030 #else 1014 1031 -- ---------------------------------------------------------------------------- 1015 1032 -- Unix IO manager thread, using select() -
GHC/IO/Encoding/CodePage.hs
diff -rN -u old-base/GHC/IO/Encoding/CodePage.hs new-base/GHC/IO/Encoding/CodePage.hs
old new 1 1 {-# LANGUAGE BangPatterns #-} 2 2 module GHC.IO.Encoding.CodePage( 3 #if !defined(mingw32_HOST_OS) 3 #if !defined(mingw32_HOST_OS) 4 4 ) where 5 5 #else 6 6 codePageEncoding, -
GHC/IO/Encoding/Iconv.hs
diff -rN -u old-base/GHC/IO/Encoding/Iconv.hs new-base/GHC/IO/Encoding/Iconv.hs
old new 15 15 16 16 -- #hide 17 17 module GHC.IO.Encoding.Iconv ( 18 #if !defined(mingw32_HOST_OS) 18 #if !defined(mingw32_HOST_OS) && !defined(barrelfish_HOST_OS) 19 19 mkTextEncoding, 20 20 latin1, 21 21 utf8, … … 28 28 #include "MachDeps.h" 29 29 #include "HsBaseConfig.h" 30 30 31 #if !defined(mingw32_HOST_OS) 31 #if !defined(mingw32_HOST_OS) && !defined(barrelfish_HOST_OS) 32 32 33 33 import Foreign 34 34 import Foreign.C -
GHC/IO/Encoding.hs
diff -rN -u old-base/GHC/IO/Encoding.hs new-base/GHC/IO/Encoding.hs
old new 39 39 import qualified GHC.IO.Encoding.UTF16 as UTF16 40 40 import qualified GHC.IO.Encoding.UTF32 as UTF32 41 41 42 #if defined(mingw32_HOST_OS) 42 #if defined(mingw32_HOST_OS) || defined(barrelfish_HOST_OS) 43 43 import Data.Maybe 44 44 import GHC.IO.Exception 45 45 #endif … … 96 96 97 97 -- | The Unicode encoding of the current locale 98 98 localeEncoding :: TextEncoding 99 #if !defined(mingw32_HOST_OS) 99 #if defined(barrelfish_HOST_OS) 100 localeEncoding = UTF8.utf8 101 #elif !defined(mingw32_HOST_OS) 100 102 localeEncoding = Iconv.localeEncoding 101 103 #else 102 104 localeEncoding = CodePage.localeEncoding … … 129 131 -- @CP@; for example, @\"CP1250\"@. 130 132 -- 131 133 mkTextEncoding :: String -> IO TextEncoding 132 #if !defined(mingw32_HOST_OS) 134 #if defined(barrelfish_HOST_OS) 135 mkTextEncoding e = ioException 136 (IOError Nothing NoSuchThing "mkTextEncoding" 137 ("unknown encoding:" ++ e) Nothing Nothing) 138 #elif !defined(mingw32_HOST_OS) 133 139 mkTextEncoding = Iconv.mkTextEncoding 134 140 #else 135 141 mkTextEncoding "UTF-8" = return utf8 -
GHC/IO/FD.hs
diff -rN -u old-base/GHC/IO/FD.hs new-base/GHC/IO/FD.hs
old new 224 224 ioException (IOError Nothing InappropriateType "openFile" 225 225 "is a directory" Nothing Nothing) 226 226 227 #if ndef mingw32_HOST_OS227 #if !defined(mingw32_HOST_OS) && !defined(barrelfish_HOST_OS) 228 228 -- regular files need to be locked 229 229 RegularFile -> do 230 230 -- On Windows we use explicit exclusion via sopen() to implement … … 289 289 c_close (fdFD fd) 290 290 291 291 release :: FD -> IO () 292 #if def mingw32_HOST_OS292 #if defined(mingw32_HOST_OS) || defined(barrelfish_HOST_OS) 293 293 release _ = return () 294 294 #else 295 295 release fd = do _ <- unlockFile (fdFD fd) … … 614 614 -- ----------------------------------------------------------------------------- 615 615 -- Locking/unlocking 616 616 617 #if ndef mingw32_HOST_OS617 #if !defined(mingw32_HOST_OS) && !defined(barrelfish_HOST_OS) 618 618 foreign import ccall unsafe "lockFile" 619 619 lockFile :: CInt -> CDev -> CIno -> CInt -> IO CInt 620 620 -
GHC/TopHandler.lhs
diff -rN -u old-base/GHC/TopHandler.lhs new-base/GHC/TopHandler.lhs
old new 67 67 topHandler 68 68 69 69 install_interrupt_handler :: IO () -> IO () 70 #ifdef mingw32_HOST_OS 70 #ifdef barrelfish_HOST_OS 71 install_interrupt_handler handler = do 72 return () 73 #elif defined(mingw32_HOST_OS) 71 74 install_interrupt_handler handler = do 72 75 _ <- GHC.ConsoleHandler.installHandler $ 73 76 Catch $ \event -> … … 188 191 189 192 exitInterrupted :: IO a 190 193 exitInterrupted = 191 #if def mingw32_HOST_OS194 #if defined(mingw32_HOST_OS) || defined(barrelfish_HOST_OS) 192 195 safeExit 252 193 196 #else 194 197 -- we must exit via the default action for SIGINT, so that the -
include/HsBase.h
diff -rN -u old-base/include/HsBase.h new-base/include/HsBase.h
old new 9 9 #ifndef __HSBASE_H__ 10 10 #define __HSBASE_H__ 11 11 12 12 13 #ifdef __NHC__ 13 14 # include "Nhc98BaseConfig.h" 14 15 #else … … 170 171 INLINE int __hscore_get_errno(void) { return errno; } 171 172 INLINE void __hscore_set_errno(int e) { errno = e; } 172 173 173 #if !defined(_MSC_VER) 174 #ifdef barrelfish_HOST_OS 175 INLINE int __hscore_s_isreg(mode_t m) { return 0; } 176 INLINE int __hscore_s_isdir(mode_t m) { return 0; } 177 INLINE int __hscore_s_isfifo(mode_t m) { return 0; } 178 INLINE int __hscore_s_isblk(mode_t m) { return 0; } 179 INLINE int __hscore_s_ischr(mode_t m) { return 0; } 180 INLINE int __hscore_s_issock(mode_t m) { return 0; } 181 #elif !defined(_MSC_VER) 174 182 INLINE int __hscore_s_isreg(mode_t m) { return S_ISREG(m); } 175 183 INLINE int __hscore_s_isdir(mode_t m) { return S_ISDIR(m); } 176 184 INLINE int __hscore_s_isfifo(mode_t m) { return S_ISFIFO(m); } 177 185 INLINE int __hscore_s_isblk(mode_t m) { return S_ISBLK(m); } 178 186 INLINE int __hscore_s_ischr(mode_t m) { return S_ISCHR(m); } 179 #if !defined(mingw32_HOST_OS) && !defined(__MINGW32__) 187 #if !defined(mingw32_HOST_OS) && !defined(__MINGW32__) 180 188 INLINE int __hscore_s_issock(mode_t m) { return S_ISSOCK(m); } 181 189 #endif 182 190 #endif 183 191 184 #if !defined(_MSC_VER) && !defined(__MINGW32__) && !defined(_WIN32) 192 #if !defined(_MSC_VER) && !defined(__MINGW32__) && !defined(_WIN32) && !defined(barrelfish_HOST_OS) 185 193 INLINE int 186 194 __hscore_sigemptyset( sigset_t *set ) 187 195 { return sigemptyset(set); } … … 389 397 390 398 INLINE time_t __hscore_st_mtime ( struct_stat* st ) { return st->st_mtime; } 391 399 INLINE stsize_t __hscore_st_size ( struct_stat* st ) { return st->st_size; } 392 #if !defined(_MSC_VER) 400 #if !defined(_MSC_VER) 393 401 INLINE mode_t __hscore_st_mode ( struct_stat* st ) { return st->st_mode; } 394 402 INLINE dev_t __hscore_st_dev ( struct_stat* st ) { return st->st_dev; } 395 403 INLINE ino_t __hscore_st_ino ( struct_stat* st ) { return st->st_ino; } … … 447 455 } 448 456 #endif 449 457 450 #if !defined(_MSC_VER) && !defined(__MINGW32__) && !defined(_WIN32) 458 #if !defined(_MSC_VER) && !defined(__MINGW32__) && !defined(_WIN32) && !defined(barrelfish_HOST_OS) 451 459 INLINE HsInt 452 460 __hscore_sizeof_sigset_t( void ) 453 461 { … … 532 540 #endif 533 541 } 534 542 535 #if ndef __MINGW32__543 #if !defined(__MINGW32__) && !defined(barrelfish_HOST_OS) 536 544 INLINE size_t __hscore_sizeof_siginfo_t (void) 537 545 { 538 546 return sizeof(siginfo_t); … … 585 593 586 594 INLINE int __hscore_hs_fileno (FILE *f) { return fileno (f); } 587 595 596 #ifdef barrelfish_HOST_OS 597 INLINE int __hscore_open(char *file, int how, mode_t mode) { 598 return open(file,how); 599 } 600 #else 588 601 #ifdef __MINGW32__ 589 602 INLINE int __hscore_open(wchar_t *file, int how, mode_t mode) { 590 603 if ((how & O_WRONLY) || (how & O_RDWR) || (how & O_APPEND)) … … 599 612 return open(file,how,mode); 600 613 } 601 614 #endif 615 #endif 602 616 603 617 // These are wrapped because on some OSs (eg. Linux) they are 604 618 // macros which redirect to the 64-bit-off_t versions when large file … … 616 630 617 631 // select-related stuff 618 632 619 #if !defined(__MINGW32__) 633 #if !defined(__MINGW32__) && !defined(barrelfish_HOST_OS) 620 634 INLINE int hsFD_SETSIZE(void) { return FD_SETSIZE; } 621 635 INLINE int hsFD_ISSET(int fd, fd_set *fds) { return FD_ISSET(fd, fds); } 622 636 INLINE void hsFD_SET(int fd, fd_set *fds) { FD_SET(fd, fds); } … … 624 638 extern void hsFD_ZERO(fd_set *fds); 625 639 #endif 626 640 641 #if defined(barrelfish_HOST_OS) 642 INLINE int __hscore_select(int nfds, fd_set *readfds, fd_set *writefds, 643 fd_set *exceptfds, struct timeval *timeout) { 644 printf("NYI __hscore_select"); 645 return -1; 646 } 647 #else 627 648 INLINE int __hscore_select(int nfds, fd_set *readfds, fd_set *writefds, 628 649 fd_set *exceptfds, struct timeval *timeout) { 629 650 return (select(nfds,readfds,writefds,exceptfds,timeout)); 630 651 } 652 #endif 631 653 632 654 // gettimeofday()-related 633 655 634 #if !defined(__MINGW32__) 656 #if !defined(__MINGW32__) && !defined(barrelfish_HOST_OS) 635 657 636 658 INLINE HsInt sizeofTimeVal(void) { return sizeof(struct timeval); } 637 659 … … 654 676 655 677 /* ToDo: write a feature test that doesn't assume 'environ' to 656 678 * be in scope at link-time. */ 679 #ifdef barrelfish_HOST_OS 680 INLINE char **__hscore_environ() { 681 printf("environ NYI\n"); 682 return NULL; 683 } 684 #else 657 685 extern char** environ; 658 686 INLINE char **__hscore_environ() { return environ; } 687 #endif 659 688 660 689 /* lossless conversions between pointers and integral types */ 661 690 INLINE void * __hscore_from_uintptr(uintptr_t n) { return (void *)n; } … … 666 695 void errorBelch2(const char*s, char *t); 667 696 void debugBelch2(const char*s, char *t); 668 697 669 #if !defined(mingw32_HOST_OS) && !defined(__MINGW32__) 698 #if !defined(mingw32_HOST_OS) && !defined(__MINGW32__) && !defined(barrelfish_HOST_OS) 670 699 671 700 INLINE int fcntl_read(int fd, int cmd) { 672 701 return fcntl(fd, cmd); -
System/CPUTime.hsc
diff -rN -u old-base/System/CPUTime.hsc new-base/System/CPUTime.hsc
old new 19 19 ) where 20 20 21 21 import Prelude 22 import GHC.IO.Exception 22 23 23 24 import Data.Ratio 24 25 … … 89 90 -- 90 91 -- Avoid the problem by resorting to times() instead. 91 92 -- 92 #if defined(HAVE_GETRUSAGE) && ! irix_HOST_OS && ! solaris2_HOST_OS 93 #if defined(HAVE_GETRUSAGE) && ! irix_HOST_OS && ! solaris2_HOST_OS && ! barrelfish_HOST_OS 93 94 allocaBytes (#const sizeof(struct rusage)) $ \ p_rusage -> do 94 95 throwErrnoIfMinus1_ "getrusage" $ getrusage (#const RUSAGE_SELF) p_rusage 95 96 … … 106 107 type CRUsage = () 107 108 foreign import ccall unsafe getrusage :: CInt -> Ptr CRUsage -> IO CInt 108 109 #else 109 # if defined(HAVE_TIMES) 110 # if defined(HAVE_TIMES) && ! barrelfish_HOST_OS 110 111 allocaBytes (#const sizeof(struct tms)) $ \ p_tms -> do 111 112 _ <- times p_tms 112 113 u_ticks <- (#peek struct tms,tms_utime) p_tms :: IO CClock … … 120 121 ioException (IOError Nothing UnsupportedOperation 121 122 "getCPUTime" 122 123 "can't get CPU time" 123 Nothing )124 Nothing Nothing) 124 125 # endif 125 126 #endif 126 127 … … 170 171 171 172 #ifdef __GLASGOW_HASKELL__ 172 173 clockTicks :: Int 173 clockTicks = 174 #if defined(CLK_TCK) 175 (#const CLK_TCK) 174 #ifdef barrelfish_HOST_OS 175 clockTicks = 60 176 #elif defined(CLK_TCK) 177 clockTicks = (#const CLK_TCK) 176 178 #else 177 unsafePerformIO (sysconf (#const _SC_CLK_TCK) >>= return . fromIntegral)179 clockTicks = unsafePerformIO (sysconf (#const _SC_CLK_TCK) >>= return . fromIntegral) 178 180 foreign import ccall unsafe sysconf :: CInt -> IO CLong 179 181 #endif 180 182 #endif /* __GLASGOW_HASKELL__ */ -
System/Posix/Internals.hs
diff -rN -u old-base/System/Posix/Internals.hs new-base/System/Posix/Internals.hs
old new 147 147 #endif 148 148 149 149 fdGetMode :: FD -> IO IOMode 150 #if defined(mingw32_HOST_OS) || defined(__MINGW32__) 150 #if defined(mingw32_HOST_OS) || defined(__MINGW32__) || defined(barrelfish_HOST_OS) 151 151 fdGetMode _ = do 152 152 -- We don't have a way of finding out which flags are set on FDs 153 153 -- on Windows, so make a handle that thinks that anything goes. … … 181 181 -- --------------------------------------------------------------------------- 182 182 -- Terminal-related stuff 183 183 184 #if defined(HTYPE_TCFLAG_T) 184 #if defined(HTYPE_TCFLAG_T) 185 185 186 186 setEcho :: FD -> Bool -> IO () 187 187 setEcho fd on = do … … 261 261 set_saved_termios :: CInt -> (Ptr CTermios) -> IO () 262 262 #endif 263 263 264 #elif defined(barrelfish_HOST_OS) 265 266 setCooked :: FD -> Bool -> IO () 267 setCooked fd cooked = do 268 return () 269 270 271 setEcho :: FD -> Bool -> IO () 272 setEcho fd on = do 273 return () 274 275 getEcho :: FD -> IO Bool 276 getEcho fd = do 277 return True 278 264 279 #else 265 280 266 281 -- 'raw' mode for Win32 means turn off 'line input' (=> buffering and … … 317 332 -- Turning on non-blocking for a file descriptor 318 333 319 334 setNonBlockingFD :: FD -> Bool -> IO () 320 #if !defined(mingw32_HOST_OS) && !defined(__MINGW32__) 335 #if !defined(mingw32_HOST_OS) && !defined(__MINGW32__) && !defined(barrelfish_HOST_OS) 321 336 setNonBlockingFD fd set = do 322 337 flags <- throwErrnoIfMinus1Retry "setNonBlockingFD" 323 338 (c_fcntl_read fd const_f_getfl) … … 339 354 -- ----------------------------------------------------------------------------- 340 355 -- Set close-on-exec for a file descriptor 341 356 342 #if !defined(mingw32_HOST_OS) && !defined(__MINGW32__) 357 #if !defined(mingw32_HOST_OS) && !defined(__MINGW32__) && !defined(barrelfish_HOST_OS) 343 358 setCloseOnExec :: FD -> IO () 344 359 setCloseOnExec fd = do 345 360 throwErrnoIfMinus1_ "setCloseOnExec" $ … … 420 435 foreign import ccall unsafe "HsBase.h getpid" 421 436 c_getpid :: IO CPid 422 437 423 #if !defined(mingw32_HOST_OS) && !defined(__MINGW32__) 438 #if !defined(mingw32_HOST_OS) && !defined(__MINGW32__) && !defined(barrelfish_HOST_OS) 424 439 foreign import ccall unsafe "HsBase.h fcntl_read" 425 440 c_fcntl_read :: CInt -> CInt -> IO CInt 426 441 … … 529 544 #endif 530 545 531 546 s_issock :: CMode -> Bool 532 #if !defined(mingw32_HOST_OS) && !defined(__MINGW32__) 547 #if !defined(mingw32_HOST_OS) && !defined(__MINGW32__) && !defined(barrelfish_HOST_OS) 533 548 s_issock cmode = c_s_issock cmode /= 0 534 549 foreign import ccall unsafe "HsBase.h __hscore_s_issock" c_s_issock :: CMode -> CInt 535 550 #else
