#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
/* -----------------------------------------------------------------------------
Initialise floating point unit on x86 (currently disabled. why?)
+ (see comment in ghc/compiler/nativeGen/MachInstrs.lhs).
-------------------------------------------------------------------------- */
#define X86_INIT_FPU 0
}
#endif
-#ifdef HAVE_LOCALE_H
- setlocale(LC_CTYPE,"");
-#endif
-
#if X86_INIT_FPU
x86_init_fpu();
#endif
startupHaskell(int argc, char *argv[], void (*init_root)(void))
{
hs_init(&argc, &argv);
- hs_add_root(init_root);
+ if(init_root)
+ hs_add_root(init_root);
}
/* 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) {
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.