diff options
author | wolfgang <unknown> | 2005-04-15 05:29:49 +0000 |
---|---|---|
committer | wolfgang <unknown> | 2005-04-15 05:29:49 +0000 |
commit | eab7055a9512b150681156f146ee76ad8f67b72f (patch) | |
tree | 239b762f23c87d328b091b1b2f4c73c39876d4a4 /ghc/compiler/codeGen/CodeGen.lhs | |
parent | e0bc615fbf7b7461c24b4da038b14e788a3bf6e4 (diff) | |
download | haskell-eab7055a9512b150681156f146ee76ad8f67b72f.tar.gz |
[project @ 2005-04-15 05:29:48 by wolfgang]
Initialise foreign exports from GNU C __attribute__((constructor)) functions
in the stub C file, rather than from __stginit_ functions.
For non-profiling ways, leave out __stginit_ alltogether.
Diffstat (limited to 'ghc/compiler/codeGen/CodeGen.lhs')
-rw-r--r-- | ghc/compiler/codeGen/CodeGen.lhs | 20 |
1 files changed, 4 insertions, 16 deletions
diff --git a/ghc/compiler/codeGen/CodeGen.lhs b/ghc/compiler/codeGen/CodeGen.lhs index 0c8e314fcc..3e346f6d15 100644 --- a/ghc/compiler/codeGen/CodeGen.lhs +++ b/ghc/compiler/codeGen/CodeGen.lhs @@ -87,8 +87,9 @@ codeGen dflags this_mod type_env foreign_stubs imported_mods ; cmm_tycons <- mapM cgTyCon data_tycons ; cmm_init <- getCmm (mkModuleInit dflags way cost_centre_info this_mod mb_main_mod - foreign_stubs imported_mods) - ; return (cmm_binds ++ concat cmm_tycons ++ [cmm_init]) + imported_mods) + ; return (cmm_binds ++ concat cmm_tycons + ++ if opt_SccProfilingOn then [cmm_init] else []) } -- Put datatype_stuff after code_stuff, because the -- datatype closure table (for enumeration types) to @@ -150,10 +151,9 @@ mkModuleInit -> CollectedCCs -- cost centre info -> Module -> Maybe String -- Just m ==> we have flag: -main-is Foo.baz - -> ForeignStubs -> [Module] -> Code -mkModuleInit dflags way cost_centre_info this_mod mb_main_mod foreign_stubs imported_mods +mkModuleInit dflags way cost_centre_info this_mod mb_main_mod imported_mods = do { -- Allocate the static boolean that records if this @@ -212,7 +212,6 @@ mkModuleInit dflags way cost_centre_info this_mod mb_main_mod foreign_stubs impo stmtC (CmmStore (mkLblExpr moduleRegdLabel) (CmmLit (mkIntCLit 1))) -- Now do local stuff - ; registerForeignExports foreign_stubs ; initCostCentres cost_centre_info ; mapCs (registerModuleImport dflags way) (imported_mods++extra_imported_mods) @@ -228,17 +227,6 @@ registerModuleImport dflags way mod = stmtsC [ CmmAssign spReg (cmmRegOffW spReg (-1)) , CmmStore (CmmReg spReg) (mkLblExpr (mkModuleInitLabel dflags mod way)) ] ------------------------ -registerForeignExports :: ForeignStubs -> Code -registerForeignExports NoStubs - = nopC -registerForeignExports (ForeignStubs _ _ _ fe_bndrs) - = mapM_ mk_export_register fe_bndrs - where - mk_export_register bndr - = emitRtsCall SLIT("getStablePtr") - [ (CmmLit (CmmLabel (mkLocalClosureLabel (idName bndr))), - PtrHint) ] \end{code} |