// where objects to be scavenged go
bdescr * todo_bd;
+ StgPtr todo_free; // free ptr for todo_bd
+ StgPtr todo_lim; // lim for todo_bd
+
bdescr * buffer_todo_bd; // buffer to reduce contention
// on the step's todos list
// where large objects to be scavenged go
bdescr * todo_large_objects;
- // Objects that need not be, or have already been, scavenged. The
- // block at the front of the list is special: objects that don't
- // need to be scavenged are copied directly to this block.
- // Completed scan blocks also go on this list; but we put them
- // after the head block.
+ // Objects that need not be, or have already been, scavenged.
bdescr * scavd_list;
lnat n_scavd_blocks; // count of blocks in this list
// --------------------
// evacuate flags
- nat evac_gen; // Youngest generation that objects
+ step *evac_step; // Youngest generation that objects
// should be evacuated to in
// evacuate(). (Logically an
// argument to evacuate, but it's
// optimise it into a per-thread
// variable).
- rtsBool failed_to_evac; // failue to evacuate an object typically
- // causes it to be recorded in the mutable
- // object list
+ rtsBool failed_to_evac; // failure to evacuate an object typically
+ // causes it to be recorded in the mutable
+ // object list
rtsBool eager_promotion; // forces promotion to the evac gen
// instead of the to-space
lnat thunk_selector_depth; // ummm.... not used as of now
+#ifdef USE_PAPI
+ int papi_events;
+#endif
+
} gc_thread;
extern nat N;