diff options
author | Ian Lynagh <igloo@earth.li> | 2012-04-27 15:14:47 +0100 |
---|---|---|
committer | Ian Lynagh <igloo@earth.li> | 2012-04-27 15:14:47 +0100 |
commit | 26d690a3eb753a5eec3e10b42ad4979556f605b3 (patch) | |
tree | 728c201cf2b3527117a546a48958f0d98ce3ad11 /rts | |
parent | f18db3bb0ad4b1e319637df5dddaef88d9d07a37 (diff) | |
parent | 4ca281829c70331571291ed3dcf813a6028cc904 (diff) | |
download | haskell-26d690a3eb753a5eec3e10b42ad4979556f605b3.tar.gz |
Merge branch 'master' of darcs.haskell.org:/srv/darcs//ghc
Diffstat (limited to 'rts')
-rw-r--r-- | rts/Linker.c | 1 | ||||
-rw-r--r-- | rts/PrimOps.cmm | 16 | ||||
-rw-r--r-- | rts/RtsStartup.c | 9 |
3 files changed, 20 insertions, 6 deletions
diff --git a/rts/Linker.c b/rts/Linker.c index 7a1f550a4b..4fb8e621c4 100644 --- a/rts/Linker.c +++ b/rts/Linker.c @@ -294,6 +294,7 @@ typedef struct _RtsSymbolVal { } RtsSymbolVal; #define Maybe_Stable_Names SymI_HasProto(stg_mkWeakzh) \ + SymI_HasProto(stg_mkWeakNoFinalizzerzh) \ SymI_HasProto(stg_mkWeakForeignEnvzh) \ SymI_HasProto(stg_makeStableNamezh) \ SymI_HasProto(stg_finalizzeWeakzh) diff --git a/rts/PrimOps.cmm b/rts/PrimOps.cmm index aaedabb951..93ef23a71e 100644 --- a/rts/PrimOps.cmm +++ b/rts/PrimOps.cmm @@ -384,14 +384,10 @@ stg_mkWeakzh { /* R1 = key R2 = value - R3 = finalizer (or NULL) + R3 = finalizer (or stg_NO_FINALIZER_closure) */ W_ w; - if (R3 == NULL) { - R3 = stg_NO_FINALIZER_closure; - } - ALLOC_PRIM( SIZEOF_StgWeak, R1_PTR & R2_PTR & R3_PTR, stg_mkWeakzh ); w = Hp - SIZEOF_StgWeak + WDS(1); @@ -416,6 +412,16 @@ stg_mkWeakzh RET_P(w); } +stg_mkWeakNoFinalizzerzh +{ + /* R1 = key + R2 = value + */ + R3 = stg_NO_FINALIZER_closure; + + jump stg_mkWeakzh; +} + stg_mkWeakForeignEnvzh { /* R1 = key diff --git a/rts/RtsStartup.c b/rts/RtsStartup.c index 4b9f6ba115..307a691352 100644 --- a/rts/RtsStartup.c +++ b/rts/RtsStartup.c @@ -141,7 +141,14 @@ hs_init_ghc(int *argc, char **argv[], RtsConfig rts_config) defaultsHook(); /* Parse the flags, separating the RTS flags from the programs args */ - if (argc != NULL && argv != NULL) { + if (argc == NULL || argv == NULL) { + // Use a default for argc & argv if either is not supplied + int my_argc = 1; + char *my_argv[] = { "<unknown>", NULL }; + setFullProgArgv(my_argc,my_argv); + setupRtsFlags(&my_argc, my_argv, + rts_config.rts_opts_enabled, rts_config.rts_opts); + } else { setFullProgArgv(*argc,*argv); setupRtsFlags(argc, *argv, rts_config.rts_opts_enabled, rts_config.rts_opts); |