STATIC_INLINE GNUC_ATTR_HOT void
copy_tag(StgClosure **p, const StgInfoTable *info,
STATIC_INLINE GNUC_ATTR_HOT void
copy_tag(StgClosure **p, const StgInfoTable *info,
- StgClosure *src, nat size, generation *gen, StgWord tag)
+ StgClosure *src, nat size, nat gen_no, StgWord tag)
- StgClosure *src, nat size, generation *gen, StgWord tag)
+ StgClosure *src, nat size, nat gen_no, StgWord tag)
*/
static rtsBool
copyPart(StgClosure **p, StgClosure *src, nat size_to_reserve,
*/
static rtsBool
copyPart(StgClosure **p, StgClosure *src, nat size_to_reserve,
/* Copy wrappers that don't tag the closure after copying */
STATIC_INLINE GNUC_ATTR_HOT void
copy(StgClosure **p, const StgInfoTable *info,
/* Copy wrappers that don't tag the closure after copying */
STATIC_INLINE GNUC_ATTR_HOT void
copy(StgClosure **p, const StgInfoTable *info,
- copy_tag(p,info,src,size,gen,0);
+ copy_tag(p,info,src,size,gen_no,0);
// already evacuated?
if (bd->flags & BF_EVACUATED) {
/* Don't forget to set the gct->failed_to_evac flag if we didn't get
* the desired destination (see comments in evacuate()).
*/
// already evacuated?
if (bd->flags & BF_EVACUATED) {
/* Don't forget to set the gct->failed_to_evac flag if we didn't get
* the desired destination (see comments in evacuate()).
*/
bd->flags |= BF_EVACUATED;
initBdescr(bd, new_gen, new_gen->to);
bd->flags |= BF_EVACUATED;
initBdescr(bd, new_gen, new_gen->to);
// them straight on the scavenged_large_objects list.
if (bd->flags & BF_PINNED) {
ASSERT(get_itbl((StgClosure *)p)->type == ARR_WORDS);
// them straight on the scavenged_large_objects list.
if (bd->flags & BF_PINNED) {
ASSERT(get_itbl((StgClosure *)p)->type == ARR_WORDS);
dbl_link_onto(bd, &new_gen->scavenged_large_objects);
new_gen->n_scavenged_large_blocks += bd->blocks;
dbl_link_onto(bd, &new_gen->scavenged_large_objects);
new_gen->n_scavenged_large_blocks += bd->blocks;
// We aren't copying this object, so we have to check
// whether it is already in the target generation. (this is
// the write barrier).
// We aren't copying this object, so we have to check
// whether it is already in the target generation. (this is
// the write barrier).
- copy(p,info,q,sizeW_fromITBL(INFO_PTR_TO_STRUCT(info)),gen);
+ copy(p,info,q,sizeW_fromITBL(INFO_PTR_TO_STRUCT(info)),gen_no);
- copy_tag_nolock(p,info,q,sizeofW(StgHeader)+1,gen,tag);
+ copy_tag_nolock(p,info,q,sizeofW(StgHeader)+1,gen_no,tag);
- copy_tag_nolock(p,info,q,sizeofW(StgHeader)+1,gen,tag);
+ copy_tag_nolock(p,info,q,sizeofW(StgHeader)+1,gen_no,tag);
- copy_tag_nolock(p,info,q,sizeofW(StgHeader)+1,gen,tag);
+ copy_tag_nolock(p,info,q,sizeofW(StgHeader)+1,gen_no,tag);
- copy(p,info,q,sizeofW(StgThunk)+1,gen);
+ copy(p,info,q,sizeofW(StgThunk)+1,gen_no);
- copy(p,info,q,sizeofW(StgThunk)+2,gen);
+ copy(p,info,q,sizeofW(StgThunk)+2,gen_no);
- copy_tag_nolock(p,info,q,sizeofW(StgHeader)+2,gen,tag);
+ copy_tag_nolock(p,info,q,sizeofW(StgHeader)+2,gen_no,tag);
- copy_tag_nolock(p,info,q,sizeofW(StgHeader)+2,gen,tag);
+ copy_tag_nolock(p,info,q,sizeofW(StgHeader)+2,gen_no,tag);
- copy(p,info,q,thunk_sizeW_fromITBL(INFO_PTR_TO_STRUCT(info)),gen);
+ copy(p,info,q,thunk_sizeW_fromITBL(INFO_PTR_TO_STRUCT(info)),gen_no);
- copy_tag_nolock(p,info,q,sizeW_fromITBL(INFO_PTR_TO_STRUCT(info)),gen,tag);
+ copy_tag_nolock(p,info,q,sizeW_fromITBL(INFO_PTR_TO_STRUCT(info)),gen_no,tag);
|| i == &stg_WHITEHOLE_info
|| i == &stg_BLOCKING_QUEUE_CLEAN_info
|| i == &stg_BLOCKING_QUEUE_DIRTY_info) {
|| i == &stg_WHITEHOLE_info
|| i == &stg_BLOCKING_QUEUE_CLEAN_info
|| i == &stg_BLOCKING_QUEUE_DIRTY_info) {
- copy(p,info,q,sizeofW(StgInd),gen);
+ copy(p,info,q,sizeofW(StgInd),gen_no);
- copy(p,info,q,sizeW_fromITBL(INFO_PTR_TO_STRUCT(info)),gen);
+ copy(p,info,q,sizeW_fromITBL(INFO_PTR_TO_STRUCT(info)),gen_no);
- copy(p,info,q,bco_sizeW((StgBCO *)q),gen);
+ copy(p,info,q,bco_sizeW((StgBCO *)q),gen_no);
- copy(p,info,q,pap_sizeW((StgPAP*)q),gen);
+ copy(p,info,q,pap_sizeW((StgPAP*)q),gen_no);
- copy(p,info,q,ap_sizeW((StgAP*)q),gen);
+ copy(p,info,q,ap_sizeW((StgAP*)q),gen_no);
- copy(p,info,q,ap_stack_sizeW((StgAP_STACK*)q),gen);
+ copy(p,info,q,ap_stack_sizeW((StgAP_STACK*)q),gen_no);
- copy(p,info,q,arr_words_sizeW((StgArrWords *)q),gen);
+ copy(p,info,q,arr_words_sizeW((StgArrWords *)q),gen_no);
- copy(p,info,q,mut_arr_ptrs_sizeW((StgMutArrPtrs *)q),gen);
+ copy(p,info,q,mut_arr_ptrs_sizeW((StgMutArrPtrs *)q),gen_no);
- copy(p,info,q,sizeofW(StgTSO),gen);
+ copy(p,info,q,sizeofW(StgTSO),gen_no);
rtsBool mine;
mine = copyPart(p,(StgClosure *)stack, stack_sizeW(stack),
rtsBool mine;
mine = copyPart(p,(StgClosure *)stack, stack_sizeW(stack),
if (mine) {
new_stack = (StgStack *)*p;
move_STACK(stack, new_stack);
if (mine) {
new_stack = (StgStack *)*p;
move_STACK(stack, new_stack);
- copy(p,info,q,sizeofW(StgTRecChunk),gen);
+ copy(p,info,q,sizeofW(StgTRecChunk),gen_no);
unchain_thunk_selectors(prev_thunk_selector, (StgClosure *)p);
*q = (StgClosure *)p;
// shortcut, behave as for: if (evac) evacuate(q);
unchain_thunk_selectors(prev_thunk_selector, (StgClosure *)p);
*q = (StgClosure *)p;
// shortcut, behave as for: if (evac) evacuate(q);
- copy(q,(const StgInfoTable *)info_ptr,(StgClosure *)p,THUNK_SELECTOR_sizeW(),bd->dest);
+ copy(q,(const StgInfoTable *)info_ptr,(StgClosure *)p,THUNK_SELECTOR_sizeW(),bd->dest_no);