diff options
Diffstat (limited to 'rts/RtsMain.c')
-rw-r--r-- | rts/RtsMain.c | 24 |
1 files changed, 16 insertions, 8 deletions
diff --git a/rts/RtsMain.c b/rts/RtsMain.c index d9f05576a0..21b8577cca 100644 --- a/rts/RtsMain.c +++ b/rts/RtsMain.c @@ -13,6 +13,7 @@ #include "RtsAPI.h" #include "RtsUtils.h" +#include "RtsFlags.h" #include "Prelude.h" #include "Task.h" #include "Excn.h" @@ -23,37 +24,44 @@ // Hack: we assume that we're building a batch-mode system unless // INTERPRETER is set - + #if !defined(INTERPRETER) /* Hack */ // The rts entry point from a compiled program using a Haskell main // function. This gets called from a tiny main function generated by // GHC and linked into each compiled Haskell program that uses 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. -// +// // NOTE: This function is marked as _noreturn_ in Main.h int hs_main ( int argc, char *argv[], // program args StgClosure *main_closure, // closure for Main.main RtsConfig rts_config) // RTS configuration - -{ - BEGIN_WINDOWS_VEH_HANDLER +{ int exit_status; SchedulerStatus status; + // See Note: [Windows Unicode Arguments] in rts/RtsFlags.c + #if defined(mingw32_HOST_OS) + { + argv = getUTF8Args(&argc); + } + #endif + hs_init_ghc(&argc, &argv, rts_config); + BEGIN_WINDOWS_VEH_HANDLER + // kick off the computation by creating the main thread with a pointer // to mainIO_closure representing the computation of the overall program; // then enter the scheduler with this thread and off we go; - // + // // in a parallel setup, where we have many instances of this code // running on different PEs, we should do this only for the main PE // (IAmMainThread is set in startupHaskell) @@ -89,6 +97,6 @@ int hs_main ( int argc, char *argv[], // program args END_WINDOWS_VEH_HANDLER shutdownHaskellAndExit(exit_status, 0 /* !fastExit */); - // No code beyond this point. Dead code elimination will remove it + // No code beyond this point. Dead code elimination will remove it } # endif /* BATCH_MODE */ |