X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;f=rts%2FRtsMain.c;h=0ed6df494c25ceaee07bf7acac76cfb187300901;hb=735519b465ba75a5d254848fb7f100bdaea89aa9;hp=aa2fe0f6dcd9783acf50eda209eecad4cee5e0a5;hpb=fa00cc50ecd1aa292657720b7594b7bdb82c970c;p=ghc-hetmet.git diff --git a/rts/RtsMain.c b/rts/RtsMain.c index aa2fe0f..0ed6df4 100644 --- a/rts/RtsMain.c +++ b/rts/RtsMain.c @@ -11,8 +11,7 @@ #include "PosixSource.h" #include "Rts.h" #include "RtsAPI.h" -#include "SchedAPI.h" -#include "RtsFlags.h" + #include "RtsUtils.h" #include "RtsMain.h" #include "Prelude.h" @@ -20,33 +19,19 @@ #if defined(mingw32_HOST_OS) #include "win32/seh_excn.h" #endif -#include #ifdef DEBUG # include "Printer.h" /* for printing */ #endif -#ifdef PAR -# include "Parallel.h" -# include "ParallelRts.h" -# include "LLC.h" -#endif - -#if defined(GRAN) || defined(PAR) -# include "GranSimRts.h" -#endif - #ifdef HAVE_WINDOWS_H # include #endif -extern void __stginit_ZCMain(void); - /* Annoying global vars for passing parameters to real_main() below * This is to get around problem with Windows SEH, see hs_main(). */ static int progargc; static char **progargv; -static void (*progmain_init)(void); /* This will be __stginit_ZCMain */ static StgClosure *progmain_closure; /* This will be ZCMain_main_closure */ /* Hack: we assume that we're building a batch-mode system unless @@ -59,7 +44,7 @@ static void real_main(void) SchedulerStatus status; /* all GranSim/GUM init is done in startupHaskell; sets IAmMainThread! */ - startupHaskell(progargc,progargv,progmain_init); + startupHaskell(progargc,progargv,NULL); /* kick off the computation by creating the main thread with a pointer to mainIO_closure representing the computation of the overall program; @@ -72,44 +57,6 @@ static void real_main(void) (IAmMainThread is set in startupHaskell) */ -# if defined(PAR) - -# if defined(DEBUG) - { /* a wait loop to allow attachment of gdb to UNIX threads */ - nat i, j, s; - - for (i=0, s=0; i<(nat)RtsFlags.ParFlags.wait; i++) - for (j=0; j<1000000; j++) - s += j % 65536; - } - IF_PAR_DEBUG(verbose, - belch("Passed wait loop")); -# endif - - if (IAmMainThread == rtsTrue) { - IF_PAR_DEBUG(verbose, - debugBelch("==== [%x] Main Thread Started ...\n", mytid)); - - /* ToDo: Dump event for the main thread */ - status = rts_mainLazyIO(progmain_closure, NULL); - } else { - /* Just to show we're alive */ - IF_PAR_DEBUG(verbose, - debugBelch("== [%x] Non-Main PE enters scheduler via taskStart() without work ...\n", - mytid)); - - /* all non-main threads enter the scheduler without work */ - taskStart(); - status = Success; // declare victory (see shutdownParallelSystem) - } - -# elif defined(GRAN) - - /* ToDo: Dump event for the main thread */ - status = rts_mainLazyIO(progmain_closure, NULL); - -# else /* !PAR && !GRAN */ - /* ToDo: want to start with a larger stack size */ { Capability *cap = rts_lock(); @@ -119,8 +66,6 @@ static void real_main(void) rts_unlock(cap); } -# endif /* !PAR && !GRAN */ - /* check the status of the entire Haskell computation */ switch (status) { case Killed: @@ -137,12 +82,6 @@ static void real_main(void) case Success: exit_status = EXIT_SUCCESS; break; -#if defined(PAR) - case NoStatus: - errorBelch("main thread PE killed; probably due to failure of another PE; check /tmp/pvml..."); - exit_status = EXIT_KILLED; - break; -#endif default: barf("main thread completed with invalid status"); } @@ -153,18 +92,17 @@ static void real_main(void) * This gets called from a tiny main function which gets linked into each * compiled Haskell program that uses a Haskell main function. * - * We expect the caller to pass __stginit_ZCMain for main_init and - * ZCMain_main_closure for main_closure. The reason we cannot refer to - * these symbols directly is because we're inside the rts and we do not know - * for sure that we'll be using a Haskell main function. + * We expect the caller to pass ZCMain_main_closure for + * main_closure. The reason we cannot refer to this symbol directly + * is because we're inside the rts and we do not know for sure that + * we'll be using a Haskell main function. */ -int hs_main(int argc, char *argv[], void (*main_init)(void), StgClosure *main_closure) +int hs_main(int argc, char *argv[], StgClosure *main_closure) { /* We do this dance with argc and argv as otherwise the SEH exception stuff (the BEGIN/END CATCH below) on Windows gets confused */ progargc = argc; progargv = argv; - progmain_init = main_init; progmain_closure = main_closure; #if defined(mingw32_HOST_OS)