[project @ 2005-10-21 14:02:17 by simonmar]
[ghc-hetmet.git] / ghc / rts / RtsStartup.c
index c5fa744..f9b1c85 100644 (file)
@@ -11,6 +11,7 @@
 #include "RtsAPI.h"
 #include "RtsUtils.h"
 #include "RtsFlags.h"  
+#include "OSThreads.h"
 #include "Storage.h"    /* initStorage, exitStorage */
 #include "Schedule.h"   /* initScheduler */
 #include "Stats.h"      /* initStats */
 
 #include <stdlib.h>
 
-#ifdef HAVE_LOCALE_H
-#include <locale.h>
-#endif
-
 #ifdef HAVE_TERMIOS_H
 #include <termios.h>
 #endif
@@ -91,6 +88,7 @@ __hscore_set_saved_termios(int fd, void* ts)
 
 /* -----------------------------------------------------------------------------
    Initialise floating point unit on x86 (currently disabled. why?)
+   (see comment in ghc/compiler/nativeGen/MachInstrs.lhs).
    -------------------------------------------------------------------------- */
 
 #define X86_INIT_FPU 0
@@ -159,8 +157,7 @@ hs_init(int *argc, char **argv[])
     /* Parse the flags, separating the RTS flags from the programs args */
     if (argc != NULL && argv != NULL) {
        setupRtsFlags(argc, *argv, &rts_argc, rts_argv);
-       prog_argc = *argc;
-       prog_argv = *argv;
+       setProgArgv(*argc,*argv);
     }
 
 #if defined(PAR)
@@ -228,10 +225,6 @@ hs_init(int *argc, char **argv[])
     }
 #endif
 
-#ifdef HAVE_LOCALE_H
-    setlocale(LC_CTYPE,"");
-#endif
-
 #if X86_INIT_FPU
     x86_init_fpu();
 #endif
@@ -245,34 +238,10 @@ void
 startupHaskell(int argc, char *argv[], void (*init_root)(void))
 {
     hs_init(&argc, &argv);
-    hs_add_root(init_root);
-}
-
-
-/* -----------------------------------------------------------------------------
-   Getting/Setting the program's arguments.
-
-   These are used by System.Environment.
-   -------------------------------------------------------------------------- */
-
-void
-getProgArgv(int *argc, char **argv[])
-{
-    if (argc) { *argc = prog_argc; }
-    if (argv) { *argv = prog_argv; }
+    if(init_root)
+        hs_add_root(init_root);
 }
 
-void
-setProgArgv(int argc, char *argv[])
-{
-   /* Usually this is done by startupHaskell, so we don't need to call this. 
-      However, sometimes Hugs wants to change the arguments which Haskell
-      getArgs >>= ... will be fed.  So you can do that by calling here
-      _after_ calling startupHaskell.
-   */
-   prog_argc = argc;
-   prog_argv = argv;
-}
 
 /* -----------------------------------------------------------------------------
    Per-module initialisation
@@ -322,7 +291,7 @@ hs_add_root(void (*init_root)(void))
     /* The initialisation stack grows downward, with sp pointing 
        to the last occupied word */
     init_sp = INIT_STACK_BLOCKS*BLOCK_SIZE_W;
-    bd = allocGroup(INIT_STACK_BLOCKS);
+    bd = allocGroup_lock(INIT_STACK_BLOCKS);
     init_stack = (F_ *)bd->start;
     init_stack[--init_sp] = (F_)stg_init_finish;
     if (init_root != NULL) {
@@ -332,7 +301,7 @@ hs_add_root(void (*init_root)(void))
     cap.r.rSp = (P_)(init_stack + init_sp);
     StgRun((StgFunPtr)stg_init, &cap.r);
 
-    freeGroup(bd);
+    freeGroup_lock(bd);
 
 #if defined(PROFILING) || defined(DEBUG)
     // This must be done after module initialisation.