Rename primops from foozh_fast to stg_foozh
[ghc-hetmet.git] / rts / Linker.c
index b075128..1fdd7c7 100644 (file)
 #endif
 
 #include "Rts.h"
-#include "RtsFlags.h"
 #include "HsFFI.h"
+
+#include "sm/Storage.h"
 #include "Hash.h"
-#include "Linker.h"
 #include "LinkerInternals.h"
 #include "RtsUtils.h"
-#include "Schedule.h"
-#include "Sparks.h"
-#include "RtsGlobals.h"
-#include "Timer.h"
 #include "Trace.h"
+#include "StgPrimFloat.h" // for __int_encodeFloat etc.
+#include "Stable.h"
+
+#if !defined(mingw32_HOST_OS)
+#include "posix/Signals.h"
+#endif
 
 #ifdef HAVE_SYS_TYPES_H
 #include <sys/types.h>
@@ -222,16 +224,18 @@ typedef struct _RtsSymbolVal {
     void   *addr;
 } RtsSymbolVal;
 
-#define Maybe_Stable_Names      SymI_HasProto(mkWeakzh_fast)                   \
-                               SymI_HasProto(mkWeakForeignEnvzh_fast)          \
-                               SymI_HasProto(makeStableNamezh_fast)            \
-                               SymI_HasProto(finalizzeWeakzh_fast)
+#define Maybe_Stable_Names      SymI_HasProto(stg_mkWeakzh)                    \
+                               SymI_HasProto(stg_mkWeakForeignEnvzh)           \
+                               SymI_HasProto(stg_makeStableNamezh)             \
+                               SymI_HasProto(stg_finalizzeWeakzh)
 
 #if !defined (mingw32_HOST_OS)
 #define RTS_POSIX_ONLY_SYMBOLS                  \
+      SymI_HasProto(__hscore_get_saved_termios)        \
+      SymI_HasProto(__hscore_set_saved_termios)        \
       SymI_HasProto(shutdownHaskellAndSignal)  \
-      SymI_NeedsProto(lockFile)                 \
-      SymI_NeedsProto(unlockFile)               \
+      SymI_HasProto(lockFile)                   \
+      SymI_HasProto(unlockFile)                 \
       SymI_HasProto(signal_handlers)           \
       SymI_HasProto(stg_sig_install)           \
       SymI_NeedsProto(nocldstop)
@@ -343,12 +347,18 @@ typedef struct _RtsSymbolVal {
 #define RTS_MINGW_GETTIMEOFDAY_SYM /**/
 #endif
 
+#if HAVE___MINGW_VFPRINTF
+#define RTS___MINGW_VFPRINTF_SYM SymI_HasProto(__mingw_vfprintf)
+#else
+#define RTS___MINGW_VFPRINTF_SYM /**/
+#endif
+
 /* These are statically linked from the mingw libraries into the ghc
    executable, so we have to employ this hack. */
 #define RTS_MINGW_ONLY_SYMBOLS                           \
-      SymI_HasProto(asyncReadzh_fast)                   \
-      SymI_HasProto(asyncWritezh_fast)                  \
-      SymI_HasProto(asyncDoProczh_fast)                         \
+      SymI_HasProto(stg_asyncReadzh)                    \
+      SymI_HasProto(stg_asyncWritezh)                   \
+      SymI_HasProto(stg_asyncDoProczh)                  \
       SymI_HasProto(memset)                              \
       SymI_HasProto(inet_ntoa)                           \
       SymI_HasProto(inet_addr)                           \
@@ -381,6 +391,8 @@ typedef struct _RtsSymbolVal {
       SymI_NeedsProto(iscntrl)                           \
       SymI_NeedsProto(isalpha)                           \
       SymI_NeedsProto(isalnum)                           \
+      SymI_NeedsProto(isascii)                           \
+      RTS___MINGW_VFPRINTF_SYM                           \
       SymI_HasProto(strcmp)                              \
       SymI_HasProto(memmove)                             \
       SymI_HasProto(realloc)                             \
@@ -579,33 +591,32 @@ typedef struct _RtsSymbolVal {
       SymI_HasProto(__2Int_encodeDouble)               \
       SymI_HasProto(__int_encodeFloat)                 \
       SymI_HasProto(__word_encodeFloat)                        \
-      SymI_HasProto(atomicallyzh_fast)                 \
+      SymI_HasProto(stg_atomicallyzh)                  \
       SymI_HasProto(barf)                              \
       SymI_HasProto(debugBelch)                                \
       SymI_HasProto(errorBelch)                                \
       SymI_HasProto(sysErrorBelch)                      \
-      SymI_HasProto(asyncExceptionsBlockedzh_fast)     \
-      SymI_HasProto(blockAsyncExceptionszh_fast)       \
-      SymI_HasProto(catchzh_fast)                      \
-      SymI_HasProto(catchRetryzh_fast)                 \
-      SymI_HasProto(catchSTMzh_fast)                   \
-      SymI_HasProto(checkzh_fast)                       \
+      SymI_HasProto(stg_asyncExceptionsBlockedzh)      \
+      SymI_HasProto(stg_blockAsyncExceptionszh)                \
+      SymI_HasProto(stg_catchzh)                       \
+      SymI_HasProto(stg_catchRetryzh)                  \
+      SymI_HasProto(stg_catchSTMzh)                    \
+      SymI_HasProto(stg_checkzh)                        \
       SymI_HasProto(closure_flags)                      \
       SymI_HasProto(cmp_thread)                                \
       SymI_HasProto(createAdjustor)                    \
-      SymI_HasProto(decodeDoublezu2Intzh_fast)         \
-      SymI_HasProto(decodeFloatzuIntzh_fast)           \
+      SymI_HasProto(stg_decodeDoublezu2Intzh)          \
+      SymI_HasProto(stg_decodeFloatzuIntzh)            \
       SymI_HasProto(defaultsHook)                      \
-      SymI_HasProto(delayzh_fast)                      \
-      SymI_HasProto(deRefWeakzh_fast)                  \
-      SymI_HasProto(deRefStablePtrzh_fast)             \
+      SymI_HasProto(stg_delayzh)                       \
+      SymI_HasProto(stg_deRefWeakzh)                   \
+      SymI_HasProto(stg_deRefStablePtrzh)              \
       SymI_HasProto(dirty_MUT_VAR)                     \
-      SymI_HasProto(forkzh_fast)                       \
-      SymI_HasProto(forkOnzh_fast)                     \
+      SymI_HasProto(stg_forkzh)                                \
+      SymI_HasProto(stg_forkOnzh)                      \
       SymI_HasProto(forkProcess)                       \
       SymI_HasProto(forkOS_createThread)               \
       SymI_HasProto(freeHaskellFunctionPtr)            \
-      SymI_HasProto(freeStablePtr)                     \
       SymI_HasProto(getOrSetTypeableStore)             \
       SymI_HasProto(getOrSetSignalHandlerStore)                \
       SymI_HasProto(genSymZh)                          \
@@ -623,53 +634,44 @@ typedef struct _RtsSymbolVal {
       SymI_HasProto(hs_hpc_rootModule)                 \
       SymI_HasProto(hs_hpc_module)                     \
       SymI_HasProto(initLinker)                                \
-      SymI_HasProto(unpackClosurezh_fast)               \
-      SymI_HasProto(getApStackValzh_fast)               \
-      SymI_HasProto(getSparkzh_fast)                    \
-      SymI_HasProto(isCurrentThreadBoundzh_fast)       \
-      SymI_HasProto(isDoubleDenormalized)              \
-      SymI_HasProto(isDoubleInfinite)                  \
-      SymI_HasProto(isDoubleNaN)                       \
-      SymI_HasProto(isDoubleNegativeZero)              \
-      SymI_HasProto(isEmptyMVarzh_fast)                        \
-      SymI_HasProto(isFloatDenormalized)               \
-      SymI_HasProto(isFloatInfinite)                   \
-      SymI_HasProto(isFloatNaN)                                \
-      SymI_HasProto(isFloatNegativeZero)               \
-      SymI_HasProto(killThreadzh_fast)                 \
+      SymI_HasProto(stg_unpackClosurezh)                \
+      SymI_HasProto(stg_getApStackValzh)                \
+      SymI_HasProto(stg_getSparkzh)                     \
+      SymI_HasProto(stg_isCurrentThreadBoundzh)                \
+      SymI_HasProto(stg_isEmptyMVarzh)                 \
+      SymI_HasProto(stg_killThreadzh)                  \
       SymI_HasProto(loadObj)                           \
       SymI_HasProto(insertStableSymbol)                \
       SymI_HasProto(insertSymbol)                      \
       SymI_HasProto(lookupSymbol)                      \
-      SymI_HasProto(makeStablePtrzh_fast)              \
-      SymI_HasProto(mkApUpd0zh_fast)                   \
-      SymI_HasProto(myThreadIdzh_fast)                 \
-      SymI_HasProto(labelThreadzh_fast)                 \
-      SymI_HasProto(newArrayzh_fast)                   \
-      SymI_HasProto(newBCOzh_fast)                     \
-      SymI_HasProto(newByteArrayzh_fast)               \
+      SymI_HasProto(stg_makeStablePtrzh)               \
+      SymI_HasProto(stg_mkApUpd0zh)                    \
+      SymI_HasProto(stg_myThreadIdzh)                  \
+      SymI_HasProto(stg_labelThreadzh)                  \
+      SymI_HasProto(stg_newArrayzh)                    \
+      SymI_HasProto(stg_newBCOzh)                      \
+      SymI_HasProto(stg_newByteArrayzh)                \
       SymI_HasProto_redirect(newCAF, newDynCAF)                \
-      SymI_HasProto(newMVarzh_fast)                    \
-      SymI_HasProto(newMutVarzh_fast)                  \
-      SymI_HasProto(newTVarzh_fast)                    \
-      SymI_HasProto(noDuplicatezh_fast)                        \
-      SymI_HasProto(atomicModifyMutVarzh_fast)         \
-      SymI_HasProto(newPinnedByteArrayzh_fast)         \
-      SymI_HasProto(newAlignedPinnedByteArrayzh_fast)  \
+      SymI_HasProto(stg_newMVarzh)                     \
+      SymI_HasProto(stg_newMutVarzh)                   \
+      SymI_HasProto(stg_newTVarzh)                     \
+      SymI_HasProto(stg_noDuplicatezh)                 \
+      SymI_HasProto(stg_atomicModifyMutVarzh)          \
+      SymI_HasProto(stg_newPinnedByteArrayzh)          \
+      SymI_HasProto(stg_newAlignedPinnedByteArrayzh)   \
       SymI_HasProto(newSpark)                          \
       SymI_HasProto(performGC)                         \
       SymI_HasProto(performMajorGC)                    \
       SymI_HasProto(prog_argc)                         \
       SymI_HasProto(prog_argv)                         \
-      SymI_HasProto(putMVarzh_fast)                    \
-      SymI_HasProto(raisezh_fast)                      \
-      SymI_HasProto(raiseIOzh_fast)                    \
-      SymI_HasProto(readTVarzh_fast)                   \
-      SymI_HasProto(readTVarIOzh_fast)                 \
-      SymI_HasProto(resetNonBlockingFd)                        \
+      SymI_HasProto(stg_putMVarzh)                     \
+      SymI_HasProto(stg_raisezh)                       \
+      SymI_HasProto(stg_raiseIOzh)                     \
+      SymI_HasProto(stg_readTVarzh)                    \
+      SymI_HasProto(stg_readTVarIOzh)                  \
       SymI_HasProto(resumeThread)                      \
       SymI_HasProto(resolveObjs)                        \
-      SymI_HasProto(retryzh_fast)                       \
+      SymI_HasProto(stg_retryzh)                        \
       SymI_HasProto(rts_apply)                         \
       SymI_HasProto(rts_checkSchedStatus)              \
       SymI_HasProto(rts_eval)                          \
@@ -717,8 +719,6 @@ typedef struct _RtsSymbolVal {
       SymI_HasProto(rts_unlock)                                \
       SymI_HasProto(rts_unsafeGetMyCapability)          \
       SymI_HasProto(rtsSupportsBoundThreads)           \
-      SymI_HasProto(__hscore_get_saved_termios)                \
-      SymI_HasProto(__hscore_set_saved_termios)                \
       SymI_HasProto(setProgArgv)                       \
       SymI_HasProto(startupHaskell)                    \
       SymI_HasProto(shutdownHaskell)                   \
@@ -727,7 +727,6 @@ typedef struct _RtsSymbolVal {
       SymI_HasProto(stackOverflow)                     \
       SymI_HasProto(stg_CAF_BLACKHOLE_info)            \
       SymI_HasProto(__stg_EAGER_BLACKHOLE_info)                \
-      SymI_HasProto(awakenBlockedQueue)                        \
       SymI_HasProto(startTimer)                         \
       SymI_HasProto(stg_CHARLIKE_closure)              \
       SymI_HasProto(stg_MVAR_CLEAN_info)               \
@@ -794,17 +793,17 @@ typedef struct _RtsSymbolVal {
       SymI_HasProto(stg_sel_9_upd_info)                        \
       SymI_HasProto(stg_upd_frame_info)                        \
       SymI_HasProto(suspendThread)                     \
-      SymI_HasProto(takeMVarzh_fast)                   \
-      SymI_HasProto(threadStatuszh_fast)               \
-      SymI_HasProto(tryPutMVarzh_fast)                 \
-      SymI_HasProto(tryTakeMVarzh_fast)                        \
-      SymI_HasProto(unblockAsyncExceptionszh_fast)     \
+      SymI_HasProto(stg_takeMVarzh)                    \
+      SymI_HasProto(stg_threadStatuszh)                        \
+      SymI_HasProto(stg_tryPutMVarzh)                  \
+      SymI_HasProto(stg_tryTakeMVarzh)                 \
+      SymI_HasProto(stg_unblockAsyncExceptionszh)      \
       SymI_HasProto(unloadObj)                          \
-      SymI_HasProto(unsafeThawArrayzh_fast)            \
-      SymI_HasProto(waitReadzh_fast)                   \
-      SymI_HasProto(waitWritezh_fast)                  \
-      SymI_HasProto(writeTVarzh_fast)                  \
-      SymI_HasProto(yieldzh_fast)                       \
+      SymI_HasProto(stg_unsafeThawArrayzh)             \
+      SymI_HasProto(stg_waitReadzh)                    \
+      SymI_HasProto(stg_waitWritezh)                   \
+      SymI_HasProto(stg_writeTVarzh)                   \
+      SymI_HasProto(stg_yieldzh)                        \
       SymI_NeedsProto(stg_interp_constr_entry)          \
       SymI_HasProto(alloc_blocks)                       \
       SymI_HasProto(alloc_blocks_lim)                   \
@@ -819,7 +818,7 @@ typedef struct _RtsSymbolVal {
       SymI_NeedsProto(rts_stop_on_exception)           \
       SymI_HasProto(stopTimer)                         \
       SymI_HasProto(n_capabilities)                    \
-      SymI_HasProto(traceCcszh_fast)                    \
+      SymI_HasProto(stg_traceCcszh)                     \
       RTS_USER_SIGNALS_SYMBOLS
 
 
@@ -1293,7 +1292,7 @@ mmap_again:
 #if defined(x86_64_HOST_ARCH)
    if (mmap_32bit_base != 0) {
        if (result == map_addr) {
-           mmap_32bit_base = map_addr + size;
+           mmap_32bit_base = (StgWord8*)map_addr + size;
        } else {
            if ((W_)result > 0x80000000) {
                // oops, we were given memory over 2Gb
@@ -1311,7 +1310,7 @@ mmap_again:
                // hmm, we were given memory somewhere else, but it's
                // still under 2Gb so we can use it.  Next time, ask
                // for memory right after the place we just got some
-               mmap_32bit_base = (void*)result + size;
+               mmap_32bit_base = (StgWord8*)result + size;
            }
        }
    } else {