X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;f=ghc%2Fruntime%2Fmain%2FStgStartup.lhc;h=57089df79dc0c30aca45a4d6e079ce0f116d70e8;hb=967cc47f37cb93a5e2b6df7822c9a646f0428247;hp=061a0c05bffaf8275238c1f02fc21dedb569d3a9;hpb=58a980f73d339b0a8564d661fce5e791236030a2;p=ghc-hetmet.git diff --git a/ghc/runtime/main/StgStartup.lhc b/ghc/runtime/main/StgStartup.lhc index 061a0c0..57089df 100644 --- a/ghc/runtime/main/StgStartup.lhc +++ b/ghc/runtime/main/StgStartup.lhc @@ -193,16 +193,18 @@ SET_STATIC_HDR(EmptySPTable_closure,EmptyStablePointerTable_info,CC_SUBSUMED,,ED /* End of SP stuff */ #endif /* !PAR */ +/* Not a natural home for these, but + the following symbols may be referenced in + an object file, but never entered +*/ +P_ PrelGHC_void_closure = (P_) 0xbadbadbaL; +P_ PrelGHC_ZcCCallable_static_info = (P_) 0xbadbadbaL; +P_ PrelGHC_ZcCReturnable_static_info = (P_) 0xbadbadbaL; /* the IoWorld token to start the whole thing off */ /* Question: this is just an amusing hex code isn't it -- or does it mean something? ADR */ -P_ realWorldZh_closure = (P_) 0xbadbadbaL; -P_ GHC_void_closure = (P_) 0xbadbadbaL; - -SET_STATIC_HDR(WorldStateToken_closure,STBase_SZh_static_info,CC_SUBSUMED/*harmless*/,,ED_RO_) -, (W_) 0xbadbadbaL -}; +P_ realWorldZh_closure = (P_)0xbadbadbaL; #ifndef CONCURRENT @@ -226,8 +228,8 @@ STGFUN(startStgWorld) RetReg = (StgRetAddr) UNVEC(stopThreadDirectReturn,vtbl_stopStgWorld); /* Put an IoWorld token on the A stack */ - SpA -= AREL(1); - *SpA = (P_) WorldStateToken_closure; + SpB -= BREL(1); + (P_)*SpB = (P_) realWorldZh_closure; Node = (P_) TopClosure; /* Point to the closure for main/errorIO-arg */ ENT_VIA_NODE(); @@ -308,6 +310,8 @@ STGFUN(ErrorIO_innards) /* Assumes that "TopClosure" has been set already */ { FB_ + fflush(stdout); + fflush(stderr); if (ErrorIO_call_count >= 16 /* MAGIC CONSTANT */ ) { /* Don't wrap the calls; we're done with STG land */ fflush(stdout); @@ -359,10 +363,13 @@ STGFUN(ErrorIO_innards) /* Finish stack setup as if for a top-level task and enter the error node */ + /* Put an IoWorld token on the B stack */ + SpB -= BREL(1); + *SpB = (P_) realWorldZh_closure; +/* SpA = SuA - AREL(1); - - *SpA = (P_) WorldStateToken_closure; - + *SpA = (P_) realWorldZh_closure; +*/ STKO_LINK(StkOReg) = PrelBase_Z91Z93_closure; STKO_RETURN(StkOReg) = NULL; @@ -390,6 +397,8 @@ ErrorIO_innards(STG_NO_ARGS) /* Assumes that "TopClosure" has been set already */ { FB_ + fflush(stdout); + fflush(stderr); if (ErrorIO_call_count >= 16 /* MAGIC CONSTANT */ ) { /* Don't wrap the calls; we're done with STG land */ fflush(stdout); @@ -496,6 +505,26 @@ STATIC_ITBL(STK_STUB_info,STK_STUB_entry,UpdErr,0,INFO_OTHER_TAG,0,0,const,EF_,I SET_STATIC_HDR(STK_STUB_closure,STK_STUB_info,CC_SUBSUMED,,EXTDATA_RO) , (W_)0, (W_)0 }; + + +ED_RO_(vtbl_seq); + +/* +STGFUN(seqZhCode) +{ + FB_ + __label__ cont; + SpB[BREL(0)] = (W_) RetReg; + SpB[BREL(1)] = (W_) &&cont; + RetReg = (StgRetAddr) vtbl_seq; + ENT_VIA_NODE(); + InfoPtr = (D_)(INFO_PTR(Node)); + JMP_(ENTRY_CODE(InfoPtr)); +cont: + FE_ +} +*/ + \end{code} %/**************************************************************** @@ -604,15 +633,15 @@ STGFUN(startCcRegisteringWorld) JMP_(_regMain); FE_ } -/* SOF: Prelude supplies these for you -CC_DECLARE(CC_CAFs, "CAFs_in_...", "PRELUDE", "PRELUDE", CC_IS_CAF,*not static*); -CC_DECLARE(CC_DICTs, "DICTs_in_...", "PRELUDE", "PRELUDE", CC_IS_DICT,*not static*); -START_REGISTER_PRELUDE(_regPrelude); +CC_DECLARE(CC_CAFs, "CAFs_in_...", "PRELUDE", "PRELUDE", CC_IS_CAF,/*not static*/); +CC_DECLARE(CC_DICTs, "DICTs_in_...", "PRELUDE", "PRELUDE", CC_IS_DICT,/*not static*/); + +START_REGISTER_PRELUDE(_regPrel); REGISTER_CC(CC_CAFs); REGISTER_CC(CC_DICTs); END_REGISTER_CCS() -*/ + \end{code} We also need cost centre declarations and registering routines for other @@ -626,14 +655,7 @@ END_REGISTER_CCS() /* _regPrelude is above */ -START_REGISTER_PRELUDE(_regGHCbase); -END_REGISTER_CCS() - -/* OLD: START_REGISTER_PRELUDE(_regGHCerr); */ -START_REGISTER_PRELUDE(_regGHC); -END_REGISTER_CCS() - -START_REGISTER_PRELUDE(_regPreludeGlaST); +START_REGISTER_PRELUDE(_regPrelGHC); END_REGISTER_CCS() #endif