X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;f=rts%2FRtsStartup.c;h=afa38aaf2c0cdc9433336f848906be943577f741;hb=063b822bb68f84dd9729327bb1765637c25aceb4;hp=bc8379e4c56568467b8682f19a7721add2cd768d;hpb=62e61e0cb686a86e062c830674d50503bc9a79c1;p=ghc-hetmet.git diff --git a/rts/RtsStartup.c b/rts/RtsStartup.c index bc8379e..afa38aa 100644 --- a/rts/RtsStartup.c +++ b/rts/RtsStartup.c @@ -7,42 +7,38 @@ * ---------------------------------------------------------------------------*/ // PAPI uses caddr_t, which is not POSIX -// #include "PosixSource.h" +#ifndef USE_PAPI +#include "PosixSource.h" +#endif #include "Rts.h" #include "RtsAPI.h" +#include "HsFFI.h" + +#include "sm/Storage.h" #include "RtsUtils.h" -#include "RtsFlags.h" -#include "OSThreads.h" +#include "Prelude.h" #include "Schedule.h" /* initScheduler */ #include "Stats.h" /* initStats */ #include "STM.h" /* initSTM */ -#include "Signals.h" #include "RtsSignals.h" -#include "ThrIOManager.h" -#include "Timer.h" /* startTimer, stopTimer */ #include "Weak.h" #include "Ticky.h" #include "StgRun.h" #include "Prelude.h" /* fixupRTStoPreludeRefs */ -#include "HsFFI.h" -#include "Linker.h" #include "ThreadLabels.h" -#include "BlockAlloc.h" +#include "sm/BlockAlloc.h" #include "Trace.h" -#include "RtsGlobals.h" #include "Stable.h" -#include "Hpc.h" -#include "FileLock.h" -#include "EventLog.h" #include "Hash.h" +#include "Profiling.h" +#include "Timer.h" +#include "Globals.h" #if defined(RTS_GTK_FRONTPANEL) #include "FrontPanel.h" #endif -# include "Profiling.h" - #if defined(PROFILING) # include "ProfHeap.h" # include "RetainerProfile.h" @@ -52,17 +48,17 @@ #include "win32/AsyncIO.h" #endif -#include - -#ifdef HAVE_TERMIOS_H -#include -#endif -#ifdef HAVE_SIGNAL_H -#include +#if !defined(mingw32_HOST_OS) +#include "posix/TTY.h" +#include "posix/FileLock.h" #endif + #ifdef HAVE_UNISTD_H #include #endif +#ifdef HAVE_LOCALE_H +#include +#endif #if USE_PAPI #include "Papi.h" @@ -71,26 +67,6 @@ // Count of how many outstanding hs_init()s there have been. static int hs_init_count = 0; -// Here we save the terminal settings on the standard file -// descriptors, if we need to change them (eg. to support NoBuffering -// input). -static void *saved_termios[3] = {NULL,NULL,NULL}; - -void* -__hscore_get_saved_termios(int fd) -{ - return (0 <= fd && fd < (int)(sizeof(saved_termios) / sizeof(*saved_termios))) ? - saved_termios[fd] : NULL; -} - -void -__hscore_set_saved_termios(int fd, void* ts) -{ - if (0 <= fd && fd < (int)(sizeof(saved_termios) / sizeof(*saved_termios))) { - saved_termios[fd] = ts; - } -} - /* ----------------------------------------------------------------------------- Initialise floating point unit on x86 (currently disabled. why?) (see comment in ghc/compiler/nativeGen/MachInstrs.lhs). @@ -132,6 +108,8 @@ hs_init(int *argc, char **argv[]) return; } + setlocale(LC_CTYPE,""); + /* Initialise the stats department, phase 0 */ initStats0(); @@ -168,7 +146,7 @@ hs_init(int *argc, char **argv[]) #endif /* initTracing must be after setupRtsFlags() */ -#ifdef DEBUG +#ifdef TRACING initTracing(); #endif @@ -187,15 +165,15 @@ hs_init(int *argc, char **argv[]) * knows about. We don't know whether these turn out to be CAFs * or refer to CAFs, but we have to assume that they might. */ - getStablePtr((StgPtr)base_GHCziTopHandler_runIO_closure); - getStablePtr((StgPtr)base_GHCziTopHandler_runNonIO_closure); + getStablePtr((StgPtr)runIO_closure); + getStablePtr((StgPtr)runNonIO_closure); getStablePtr((StgPtr)stackOverflow_closure); getStablePtr((StgPtr)heapOverflow_closure); getStablePtr((StgPtr)runFinalizerBatch_closure); getStablePtr((StgPtr)unpackCString_closure); - getStablePtr((StgPtr)blockedOnDeadMVar_closure); + getStablePtr((StgPtr)blockedIndefinitelyOnMVar_closure); getStablePtr((StgPtr)nonTermination_closure); - getStablePtr((StgPtr)blockedIndefinitely_closure); + getStablePtr((StgPtr)blockedIndefinitelyOnSTM_closure); /* initialise the shared Typeable store */ initGlobalStore(); @@ -212,12 +190,6 @@ hs_init(int *argc, char **argv[]) initProfiling1(); -#ifdef EVENTLOG - if (RtsFlags.EventLogFlags.doEventLogging) { - initEventLogging(); - } -#endif - /* start the virtual timer 'subsystem'. */ initTimer(); startTimer(); @@ -287,7 +259,7 @@ startupHaskell(int argc, char *argv[], void (*init_root)(void)) /* The init functions use an explicit stack... */ #define INIT_STACK_BLOCKS 4 -static F_ *init_stack = NULL; +static StgFunPtr *init_stack = NULL; void hs_add_root(void (*init_root)(void)) @@ -306,10 +278,10 @@ hs_add_root(void (*init_root)(void)) to the last occupied word */ init_sp = INIT_STACK_BLOCKS*BLOCK_SIZE_W; bd = allocGroup_lock(INIT_STACK_BLOCKS); - init_stack = (F_ *)bd->start; - init_stack[--init_sp] = (F_)stg_init_finish; + init_stack = (StgFunPtr *)bd->start; + init_stack[--init_sp] = (StgFunPtr)stg_init_finish; if (init_root != NULL) { - init_stack[--init_sp] = (F_)init_root; + init_stack[--init_sp] = (StgFunPtr)init_root; } cap->r.rSp = (P_)(init_stack + init_sp); @@ -366,6 +338,9 @@ hs_exit_(rtsBool wait_foreign) OnExitHook(); + // Free the full argv storage + freeFullProgArgv(); + #if defined(THREADED_RTS) ioManagerDie(); #endif @@ -386,30 +361,9 @@ hs_exit_(rtsBool wait_foreign) stopTimer(); exitTimer(); - /* reset the standard file descriptors to blocking mode */ - resetNonBlockingFd(0); - resetNonBlockingFd(1); - resetNonBlockingFd(2); - -#if HAVE_TERMIOS_H - // Reset the terminal settings on the standard file descriptors, - // if we changed them. See System.Posix.Internals.tcSetAttr for - // more details, including the reason we termporarily disable - // SIGTTOU here. - { - int fd; - sigset_t sigset, old_sigset; - sigemptyset(&sigset); - sigaddset(&sigset, SIGTTOU); - sigprocmask(SIG_BLOCK, &sigset, &old_sigset); - for (fd = 0; fd <= 2; fd++) { - struct termios* ts = (struct termios*)__hscore_get_saved_termios(fd); - if (ts != NULL) { - tcsetattr(fd,TCSANOW,ts); - } - } - sigprocmask(SIG_SETMASK, &old_sigset, NULL); - } + // set the terminal settings back to what they were +#if !defined(mingw32_HOST_OS) + resetTerminalSettings(); #endif // uninstall signal handlers @@ -464,11 +418,9 @@ hs_exit_(rtsBool wait_foreign) if (prof_file != NULL) fclose(prof_file); #endif -#ifdef EVENTLOG - if (RtsFlags.EventLogFlags.doEventLogging) { - endEventLogging(); - freeEventLogging(); - } +#ifdef TRACING + endTracing(); + freeTracing(); #endif #if defined(TICKY_TICKY)