X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;f=ghc%2Frts%2FRtsStartup.c;h=164d3d97a2dd7f54709fbddd34027c53878d4920;hb=f016aea1357b8ce5a4f3cd866b32761cfd25f841;hp=caca89f3322a99fd298af659229334fa5c78e266;hpb=b9d8ddb91c9360e3165244520f31dcd28c396825;p=ghc-hetmet.git diff --git a/ghc/rts/RtsStartup.c b/ghc/rts/RtsStartup.c index caca89f..164d3d9 100644 --- a/ghc/rts/RtsStartup.c +++ b/ghc/rts/RtsStartup.c @@ -1,5 +1,5 @@ /* ----------------------------------------------------------------------------- - * $Id: RtsStartup.c,v 1.38 2000/04/03 15:54:50 simonmar Exp $ + * $Id: RtsStartup.c,v 1.41 2000/04/11 16:51:44 sewardj Exp $ * * (c) The GHC Team, 1998-2000 * @@ -53,6 +53,26 @@ EXTFUN(__init_Prelude); static void initModules ( void * ); void +setProgArgv(int argc, char *argv[]) +{ + /* Usually this is done by startupHaskell, so we don't need to call this. + However, sometimes Hugs wants to change the arguments which Haskell + getArgs >>= ... will be fed. So you can do that by calling here + _after_ calling startupHaskell. + */ + prog_argc = argc; + prog_argv = argv; +} + +void +getProgArgv(int *argc, char **argv[]) +{ + *argc = prog_argc; + *argv = prog_argv; +} + + +void startupHaskell(int argc, char *argv[], void *init_root) { /* To avoid repeated initialisations of the RTS */ @@ -196,27 +216,28 @@ startupHaskell(int argc, char *argv[], void *init_root) StgRun to call this stuff. -------------------------------------------------------------------------- */ -#ifndef INTERPRETER - /* The init functions use an explicit stack... */ #define INIT_STACK_SIZE (BLOCK_SIZE * 4) F_ *init_stack = NULL; nat init_sp = 0; +#ifndef INTERPRETER static void initModules ( void *init_root ) { - init_sp = 0; - init_stack = (F_ *)allocate(INIT_STACK_SIZE / sizeof(W_)); - init_stack[init_sp++] = (F_)stg_init_ret; - init_stack[init_sp++] = (F_)__init_Prelude; - if (init_root != NULL) { - init_stack[init_sp++] = (F_)init_root; - } - - MainRegTable.rSp = (P_)(init_stack + init_sp); - StgRun((StgFunPtr)stg_init, NULL/* no reg table */); + Capability cap; + + init_sp = 0; + init_stack = (F_ *)allocate(INIT_STACK_SIZE / sizeof(W_)); + init_stack[init_sp++] = (F_)stg_init_ret; + init_stack[init_sp++] = (F_)__init_Prelude; + if (init_root != NULL) { + init_stack[init_sp++] = (F_)init_root; + } + + cap.rSp = (P_)(init_stack + init_sp); + StgRun((StgFunPtr)stg_init, &cap); } #endif /* !INTERPRETER */