X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;f=rts%2FRtsStartup.c;h=f2a0dd71c36243d41583b44f7c11a014fc910b74;hb=14591e0d3d238a40d034fb9ddd0ae90688e007eb;hp=33c742b25ac067253d55d58b769cda6326ba8f48;hpb=9f2ceb4da7dfbc1cfd09ce54610ebe64288b9007;p=ghc-hetmet.git diff --git a/rts/RtsStartup.c b/rts/RtsStartup.c index 33c742b..f2a0dd7 100644 --- a/rts/RtsStartup.c +++ b/rts/RtsStartup.c @@ -6,13 +6,14 @@ * * ---------------------------------------------------------------------------*/ -#include "PosixSource.h" +// PAPI uses caddr_t, which is not POSIX +// #include "PosixSource.h" + #include "Rts.h" #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 "STM.h" /* initSTM */ @@ -28,6 +29,9 @@ #include "ThreadLabels.h" #include "BlockAlloc.h" #include "Trace.h" +#include "RtsTypeable.h" +#include "Stable.h" +#include "Hpc.h" #if defined(RTS_GTK_FRONTPANEL) #include "FrontPanel.h" @@ -65,6 +69,10 @@ #include #endif +#if USE_PAPI +#include "Papi.h" +#endif + // Count of how many outstanding hs_init()s there have been. static int hs_init_count = 0; @@ -150,7 +158,23 @@ hs_init(int *argc, char **argv[]) argv++; argc--; #endif + /* Initialise the performance tracking library */ +#ifdef USE_PAPI + /* Must fix to abort gracefully */ + if(PAPI_library_init(PAPI_VER_CURRENT) != PAPI_VER_CURRENT) + exit(1); +#ifdef THREADED_RTS + { + int err; + if ((err = PAPI_thread_init(osThreadId)) < 0) { + barf("PAPI_thread_init: %d",err); + } + } +#endif +#endif + /* Set the RTS flags to default values. */ + initRtsFlagsDefaults(); /* Call the user hook to reset defaults, if present */ @@ -196,6 +220,9 @@ hs_init(int *argc, char **argv[]) /* initialise the stable pointer table */ initStablePtrTable(); + /* initialise the shared Typeable store */ + initTypeableStore(); + #if defined(DEBUG) /* initialise thread label table (tso->char*) */ initThreadLabelTable(); @@ -206,7 +233,7 @@ hs_init(int *argc, char **argv[]) #endif /* start the virtual timer 'subsystem'. */ - startTimer(TICK_MILLISECS); + startTimer(); /* Initialise the stats department */ initStats(); @@ -306,6 +333,8 @@ hs_add_root(void (*init_root)(void)) freeGroup_lock(bd); + startupHpc(); + #if defined(PROFILING) || defined(DEBUG) // This must be done after module initialisation. // ToDo: make this work in the presence of multiple hs_add_root()s. @@ -386,10 +415,16 @@ hs_exit(void) /* stop timing the shutdown, we're about to print stats */ stat_endExit(); + /* shutdown the hpc support (if needed) */ + exitHpc(); + // clean up things from the storage manager's point of view. // also outputs the stats (+RTS -s) info. exitStorage(); + /* free shared Typeable store */ + exitTypeableStore(); + /* initialise the stable pointer table */ exitStablePtrTable(); @@ -459,6 +494,8 @@ shutdownHaskellAndExit(int n) static int exit_started=rtsFalse; #endif +void (*exitFn)(int) = 0; + void stg_exit(int n) { @@ -471,5 +508,7 @@ stg_exit(int n) IF_PAR_DEBUG(verbose, debugBelch("==-- stg_exit %d on [%x]...", n, mytid)); shutdownParallelSystem(n); #endif + if (exitFn) + (*exitFn)(n); exit(n); }