[project @ 1998-11-26 09:17:22 by sof]
[ghc-hetmet.git] / ghc / runtime / main / main.lc
index d8bb331..86f82ce 100644 (file)
@@ -6,8 +6,10 @@
 
 \begin{code}
 #if defined(PROFILING) || defined(PAR) || defined(CONCURRENT)
+#if !defined(_AIX)
 #define NON_POSIX_SOURCE /* time things on Solaris -- sigh */
 #endif
+#endif
 
 #include "rtsdefs.h"
 #include <setjmp.h>
@@ -97,8 +99,15 @@ jmp_buf restart_main;            /* For restarting after a signal */
 int nPEs = 0;              /* Number of PEs */
 #endif
 
-int /* return type of "main" is defined by the C standard */
-main(int argc, char *argv[])
+\end{code}
+
+Setting up and initialising the run-time system:
+(used by main(), and people that don't allow Haskell
+to stay in control.)
+
+\begin{code}
+void
+initRTS(int argc, char *argv[])
 {
 #ifdef GRAN
  int i;
@@ -122,7 +131,6 @@ Manager's requirements.
     if (*argv[0] == '-') {     /* Look to see whether we're the Main Thread */
        IAmMainThread = rtsTrue;
         argv++; argc--;                        /* Strip off flag argument */
-/*     fprintf(stderr, "I am Main Thread\n"); */
     }
     /* 
      * Grab the number of PEs out of the argument vector, and
@@ -149,7 +157,6 @@ Manager's requirements.
        what statsfile to use (if any); [if so, write the whole
        cmd-line into it]
        
-       This is unlikely to work well in parallel!  KH.
     */
     initRtsFlagsDefaults();
     defaultsHook(); /* the one supplied does nothing;
@@ -262,6 +269,14 @@ Manager's requirements.
     initUserSignals();
 #endif
 
+
+}
+
+int /* return type of "main" is defined by the C standard */
+main(int argc, char *argv[])
+{
+  initRTS(argc,argv);
+
 #ifdef CONCURRENT
     AvailableStack = AvailableTSO = PrelBase_Z91Z93_closure;
 # if defined(GRAN)                                                 /* HWL */
@@ -340,6 +355,11 @@ shutdownHaskell(STG_NO_ARGS)
     if (RTSflags.TickyFlags.showTickyStats) PrintTickyInfo();
 #endif
 
+    /* Give the application a chance to do something sensible
+       on-exit
+    */
+    OnExitHook();
+
     fflush(stdout);
     /* This fflush is important, because: if "main" just returns,
        then we will end up in pre-supplied exit code that will close