projects
/
ghc-hetmet.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Implement the RTS side of GHC.Environment.getFullArgs
[ghc-hetmet.git]
/
rts
/
RtsStartup.c
diff --git
a/rts/RtsStartup.c
b/rts/RtsStartup.c
index
5bb9806
..
a363c13
100644
(file)
--- a/
rts/RtsStartup.c
+++ b/
rts/RtsStartup.c
@@
-38,8
+38,9
@@
#include "FrontPanel.h"
#endif
#include "FrontPanel.h"
#endif
-#if defined(PROFILING) || defined(DEBUG)
# include "Profiling.h"
# include "Profiling.h"
+
+#if defined(PROFILING)
# include "ProfHeap.h"
# include "RetainerProfile.h"
#endif
# include "ProfHeap.h"
# include "RetainerProfile.h"
#endif
@@
-198,6
+199,7
@@
hs_init(int *argc, char **argv[])
/* Parse the flags, separating the RTS flags from the programs args */
if (argc != NULL && argv != NULL) {
/* Parse the flags, separating the RTS flags from the programs args */
if (argc != NULL && argv != NULL) {
+ setFullProgArgv(*argc,*argv);
setupRtsFlags(argc, *argv, &rts_argc, rts_argv);
setProgArgv(*argc,*argv);
}
setupRtsFlags(argc, *argv, &rts_argc, rts_argv);
setProgArgv(*argc,*argv);
}
@@
-212,9
+214,6
@@
hs_init(int *argc, char **argv[])
synchroniseSystem(); // calls initParallelSystem etc
#endif /* PAR */
synchroniseSystem(); // calls initParallelSystem etc
#endif /* PAR */
- /* Perform initialisation of adjustor thunk layer. */
- initAdjustor();
-
/* initialise scheduler data structures (needs to be done before
* initStorage()).
*/
/* initialise scheduler data structures (needs to be done before
* initStorage()).
*/
@@
-244,9
+243,7
@@
hs_init(int *argc, char **argv[])
initThreadLabelTable();
#endif
initThreadLabelTable();
#endif
-#if defined(PROFILING) || defined(DEBUG)
initProfiling1();
initProfiling1();
-#endif
/* start the virtual timer 'subsystem'. */
startTimer();
/* start the virtual timer 'subsystem'. */
startTimer();
@@
-255,10
+252,12
@@
hs_init(int *argc, char **argv[])
initStats();
#if defined(RTS_USER_SIGNALS)
initStats();
#if defined(RTS_USER_SIGNALS)
- /* Initialise the user signal handler set */
- initUserSignals();
- /* Set up handler to run on SIGINT, etc. */
- initDefaultHandlers();
+ if (RtsFlags.MiscFlags.install_signal_handlers) {
+ /* Initialise the user signal handler set */
+ initUserSignals();
+ /* Set up handler to run on SIGINT, etc. */
+ initDefaultHandlers();
+ }
#endif
#if defined(mingw32_HOST_OS) && !defined(THREADED_RTS)
#endif
#if defined(mingw32_HOST_OS) && !defined(THREADED_RTS)
@@
-351,11
+350,9
@@
hs_add_root(void (*init_root)(void))
startupHpc();
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.
initProfiling2();
// This must be done after module initialisation.
// ToDo: make this work in the presence of multiple hs_add_root()s.
initProfiling2();
-#endif
}
/* -----------------------------------------------------------------------------
}
/* -----------------------------------------------------------------------------
@@
-378,6
+375,12
@@
hs_exit(void)
/* start timing the shutdown */
stat_startExit();
/* start timing the shutdown */
stat_startExit();
+#if defined(RTS_USER_SIGNALS)
+ if (RtsFlags.MiscFlags.install_signal_handlers) {
+ freeSignalHandlers();
+ }
+#endif
+
#if defined(THREADED_RTS)
ioManagerDie();
#endif
#if defined(THREADED_RTS)
ioManagerDie();
#endif
@@
-393,7
+396,7
@@
hs_exit(void)
/* stop the ticker */
stopTimer();
/* stop the ticker */
stopTimer();
-
+
/* reset the standard file descriptors to blocking mode */
resetNonBlockingFd(0);
resetNonBlockingFd(1);
/* reset the standard file descriptors to blocking mode */
resetNonBlockingFd(0);
resetNonBlockingFd(1);
@@
-438,14
+441,21
@@
hs_exit(void)
// also outputs the stats (+RTS -s) info.
exitStorage();
// also outputs the stats (+RTS -s) info.
exitStorage();
+ /* free the tasks */
+ freeScheduler();
+
/* free shared Typeable store */
exitTypeableStore();
/* free shared Typeable store */
exitTypeableStore();
- /* initialise the stable pointer table */
+ /* free the stable pointer table */
exitStablePtrTable();
exitStablePtrTable();
- /* free hash table storage */
- exitHashTable();
+ freeProfiling1();
+
+#if defined(DEBUG)
+ /* free the thread label table */
+ freeThreadLabelTable();
+#endif
#ifdef RTS_GTK_FRONTPANEL
if (RtsFlags.GcFlags.frontpanel) {
#ifdef RTS_GTK_FRONTPANEL
if (RtsFlags.GcFlags.frontpanel) {
@@
-457,9
+467,7
@@
hs_exit(void)
reportCCSProfiling();
#endif
reportCCSProfiling();
#endif
-#if defined(PROFILING) || defined(DEBUG)
endProfiling();
endProfiling();
-#endif
#ifdef PROFILING
// Originally, this was in report_ccs_profiling(). Now, retainer
#ifdef PROFILING
// Originally, this was in report_ccs_profiling(). Now, retainer
@@
-476,6
+484,9
@@
hs_exit(void)
shutdownAsyncIO();
#endif
shutdownAsyncIO();
#endif
+ /* free hash table storage */
+ exitHashTable();
+
// Finally, free all our storage
freeStorage();
// Finally, free all our storage
freeStorage();