update submodules for GHC.HetMet.GArrow -> Control.GArrow renaming
[ghc-hetmet.git] / rts / RtsMain.c
index aa2fe0f..0ed6df4 100644 (file)
@@ -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"
 #if defined(mingw32_HOST_OS)
 #include "win32/seh_excn.h"
 #endif
-#include <stdlib.h>
 
 #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 <windows.h>
 #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)