X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;f=rts%2FStgMiscClosures.cmm;h=f1118757604c657e9e18cc202cc094d7d9299d0d;hb=07308413a4b20e70c294b657006327b09b65cfc0;hp=7f7cf78f7b95cfbe350fc112323a4749b5d7a004;hpb=d600bf7a6afdbfc4a22f9379406a9c6f789a4c2d;p=ghc-hetmet.git diff --git a/rts/StgMiscClosures.cmm b/rts/StgMiscClosures.cmm index 7f7cf78..f111875 100644 --- a/rts/StgMiscClosures.cmm +++ b/rts/StgMiscClosures.cmm @@ -289,11 +289,6 @@ INFO_TABLE(stg_IND_OLDGEN_PERM,1,0,IND_OLDGEN_PERM,"IND_OLDGEN_PERM","IND_OLDGEN */ INFO_TABLE(stg_BLACKHOLE,0,1,BLACKHOLE,"BLACKHOLE","BLACKHOLE") { -#if defined(GRAN) - /* Before overwriting TSO_LINK */ - STGCALL3(GranSimBlock,CurrentTSO,CurrentProc,(StgClosure *)R1 /*Node*/); -#endif - TICK_ENT_BH(); #ifdef THREADED_RTS @@ -319,48 +314,9 @@ INFO_TABLE(stg_BLACKHOLE,0,1,BLACKHOLE,"BLACKHOLE","BLACKHOLE") jump stg_block_blackhole; } -#if defined(PAR) || defined(GRAN) - -INFO_TABLE(stg_RBH,1,1,RBH,"RBH","RBH") -{ -# if defined(GRAN) - /* mainly statistics gathering for GranSim simulation */ - STGCALL3(GranSimBlock,CurrentTSO,CurrentProc,(StgClosure *)R1 /*Node*/); -# endif - - /* exactly the same as a BLACKHOLE_BQ_entry -- HWL */ - /* Put ourselves on the blocking queue for this black hole */ - TSO_link(CurrentTSO) = StgBlockingQueue_blocking_queue(R1); - StgBlockingQueue_blocking_queue(R1) = CurrentTSO; - /* jot down why and on what closure we are blocked */ - TSO_why_blocked(CurrentTSO) = BlockedOnBlackHole::I16; - TSO_block_info(CurrentTSO) = R1; - - /* PAR: dumping of event now done in blockThread -- HWL */ - - /* stg_gen_block is too heavyweight, use a specialised one */ - jump stg_block_1; -} - -INFO_TABLE(stg_RBH_Save_0,0,2,CONSTR,"RBH_Save_0","RBH_Save_0") -{ foreign "C" barf("RBH_Save_0 object entered!") never returns; } - -INFO_TABLE(stg_RBH_Save_1,1,1,CONSTR,"RBH_Save_1","RBH_Save_1"); -{ foreign "C" barf("RBH_Save_1 object entered!") never returns; } - -INFO_TABLE(stg_RBH_Save_2,2,0,CONSTR,"RBH_Save_2","RBH_Save_2"); -{ foreign "C" barf("RBH_Save_2 object entered!") never returns; } - -#endif /* defined(PAR) || defined(GRAN) */ - /* identical to BLACKHOLEs except for the infotag */ INFO_TABLE(stg_CAF_BLACKHOLE,0,1,CAF_BLACKHOLE,"CAF_BLACKHOLE","CAF_BLACKHOLE") { -#if defined(GRAN) - /* mainly statistics gathering for GranSim simulation */ - STGCALL3(GranSimBlock,CurrentTSO,CurrentProc,(StgClosure *)R1 /*Node*/); -#endif - TICK_ENT_BH(); LDV_ENTER(R1); @@ -435,16 +391,16 @@ INFO_TABLE(stg_TSO, 0,0,TSO, "TSO", "TSO") live weak pointers with dead ones). ------------------------------------------------------------------------- */ -INFO_TABLE(stg_WEAK,0,4,WEAK,"WEAK","WEAK") +INFO_TABLE(stg_WEAK,1,4,WEAK,"WEAK","WEAK") { foreign "C" barf("WEAK object entered!") never returns; } /* * It's important when turning an existing WEAK into a DEAD_WEAK * (which is what finalizeWeak# does) that we don't lose the link * field and break the linked list of weak pointers. Hence, we give - * DEAD_WEAK 4 non-pointer fields, the same as WEAK. + * DEAD_WEAK 5 non-pointer fields. */ -INFO_TABLE_CONSTR(stg_DEAD_WEAK,0,4,0,CONSTR,"DEAD_WEAK","DEAD_WEAK") +INFO_TABLE_CONSTR(stg_DEAD_WEAK,0,5,0,CONSTR,"DEAD_WEAK","DEAD_WEAK") { foreign "C" barf("DEAD_WEAK object entered!") never returns; } /* ---------------------------------------------------------------------------- @@ -463,7 +419,7 @@ CLOSURE(stg_NO_FINALIZER_closure,stg_NO_FINALIZER); Stable Names are unlifted too. ------------------------------------------------------------------------- */ -INFO_TABLE(stg_STABLE_NAME,0,1,STABLE_NAME,"STABLE_NAME","STABLE_NAME") +INFO_TABLE(stg_STABLE_NAME,0,1,PRIM,"STABLE_NAME","STABLE_NAME") { foreign "C" barf("STABLE_NAME object entered!") never returns; } /* ---------------------------------------------------------------------------- @@ -483,22 +439,22 @@ INFO_TABLE(stg_MVAR_DIRTY,3,0,MVAR_DIRTY,"MVAR","MVAR") STM -------------------------------------------------------------------------- */ -INFO_TABLE(stg_TVAR, 0, 0, TVAR, "TVAR", "TVAR") +INFO_TABLE(stg_TVAR, 2, 1, MUT_PRIM, "TVAR", "TVAR") { foreign "C" barf("TVAR object entered!") never returns; } -INFO_TABLE(stg_TVAR_WATCH_QUEUE, 0, 0, TVAR_WATCH_QUEUE, "TVAR_WATCH_QUEUE", "TVAR_WATCH_QUEUE") +INFO_TABLE(stg_TVAR_WATCH_QUEUE, 3, 0, MUT_PRIM, "TVAR_WATCH_QUEUE", "TVAR_WATCH_QUEUE") { foreign "C" barf("TVAR_WATCH_QUEUE object entered!") never returns; } -INFO_TABLE(stg_ATOMIC_INVARIANT, 0, 0, ATOMIC_INVARIANT, "ATOMIC_INVARIANT", "ATOMIC_INVARIANT") +INFO_TABLE(stg_ATOMIC_INVARIANT, 2, 1, MUT_PRIM, "ATOMIC_INVARIANT", "ATOMIC_INVARIANT") { foreign "C" barf("ATOMIC_INVARIANT object entered!") never returns; } -INFO_TABLE(stg_INVARIANT_CHECK_QUEUE, 0, 0, INVARIANT_CHECK_QUEUE, "INVARIANT_CHECK_QUEUE", "INVARIANT_CHECK_QUEUE") +INFO_TABLE(stg_INVARIANT_CHECK_QUEUE, 3, 0, MUT_PRIM, "INVARIANT_CHECK_QUEUE", "INVARIANT_CHECK_QUEUE") { foreign "C" barf("INVARIANT_CHECK_QUEUE object entered!") never returns; } INFO_TABLE(stg_TREC_CHUNK, 0, 0, TREC_CHUNK, "TREC_CHUNK", "TREC_CHUNK") { foreign "C" barf("TREC_CHUNK object entered!") never returns; } -INFO_TABLE(stg_TREC_HEADER, 0, 0, TREC_HEADER, "TREC_HEADER", "TREC_HEADER") +INFO_TABLE(stg_TREC_HEADER, 3, 1, MUT_PRIM, "TREC_HEADER", "TREC_HEADER") { foreign "C" barf("TREC_HEADER object entered!") never returns; } INFO_TABLE_CONSTR(stg_END_STM_WATCH_QUEUE,0,0,0,CONSTR_NOCAF_STATIC,"END_STM_WATCH_QUEUE","END_STM_WATCH_QUEUE") @@ -522,6 +478,17 @@ CLOSURE(stg_END_STM_CHUNK_LIST_closure,stg_END_STM_CHUNK_LIST); CLOSURE(stg_NO_TREC_closure,stg_NO_TREC); /* ---------------------------------------------------------------------------- + Messages + ------------------------------------------------------------------------- */ + +// PRIM rather than CONSTR, because PRIM objects cannot be duplicated by the GC. +INFO_TABLE_CONSTR(stg_MSG_WAKEUP,2,0,0,PRIM,"MSG_WAKEUP","MSG_WAKEUP") +{ foreign "C" barf("MSG_WAKEUP object entered!") never returns; } + +INFO_TABLE_CONSTR(stg_MSG_THROWTO,4,0,0,PRIM,"MSG_THROWTO","MSG_THROWTO") +{ foreign "C" barf("MSG_THROWTO object entered!") never returns; } + +/* ---------------------------------------------------------------------------- END_TSO_QUEUE This is a static nullary constructor (like []) that we use to mark the @@ -534,18 +501,6 @@ INFO_TABLE_CONSTR(stg_END_TSO_QUEUE,0,0,0,CONSTR_NOCAF_STATIC,"END_TSO_QUEUE","E CLOSURE(stg_END_TSO_QUEUE_closure,stg_END_TSO_QUEUE); /* ---------------------------------------------------------------------------- - Exception lists - ------------------------------------------------------------------------- */ - -INFO_TABLE_CONSTR(stg_END_EXCEPTION_LIST,0,0,0,CONSTR_NOCAF_STATIC,"END_EXCEPTION_LIST","END_EXCEPTION_LIST") -{ foreign "C" barf("END_EXCEPTION_LIST object entered!") never returns; } - -CLOSURE(stg_END_EXCEPTION_LIST_closure,stg_END_EXCEPTION_LIST); - -INFO_TABLE(stg_EXCEPTION_CONS,1,1,CONSTR,"EXCEPTION_CONS","EXCEPTION_CONS") -{ foreign "C" barf("EXCEPTION_CONS object entered!") never returns; } - -/* ---------------------------------------------------------------------------- Arrays These come in two basic flavours: arrays of data (StgArrWords) and arrays of @@ -608,12 +563,14 @@ CLOSURE(stg_dummy_ret_closure,stg_dummy_ret); #if defined(__PIC__) && defined(mingw32_TARGET_OS) /* - * When sticking the RTS in a DLL, we delay populating the + * When sticking the RTS in a Windows DLL, we delay populating the * Charlike and Intlike tables until load-time, which is only * when we've got the real addresses to the C# and I# closures. - * + * + * -- this is currently broken BL 2009/11/14. + * we don't rewrite to static closures at all with Windows DLLs. */ -#warning Is this correct? _imp is a pointer! +// #warning Is this correct? _imp is a pointer! #define Char_hash_static_info _imp__ghczmprim_GHCziTypes_Czh_static_info #define Int_hash_static_info _imp__ghczmprim_GHCziTypes_Izh_static_info #else @@ -631,6 +588,7 @@ CLOSURE(stg_dummy_ret_closure,stg_dummy_ret); /* end the name with _closure, to convince the mangler this is a closure */ +#if !(defined(__PIC__) && defined(mingw32_HOST_OS)) section "data" { stg_CHARLIKE_closure: CHARLIKE_HDR(0) @@ -927,3 +885,5 @@ section "data" { INTLIKE_HDR(15) INTLIKE_HDR(16) /* MAX_INTLIKE == 16 */ } + +#endif // !(defined(__PIC__) && defined(mingw32_HOST_OS))