LOSObject *obj;
for (obj = los_object_list; obj; obj = obj->next) {
- guint8 *start_card = sgen_card_table_get_card_address ((mword)obj->data);
- guint8 *end_card = sgen_card_table_get_card_address ((mword)obj->data + obj->size - 1) + 1;
- size_t num_cards = end_card - start_card;
-
- if (!obj->cardtable_mod_union) {
- obj->cardtable_mod_union = sgen_alloc_internal_dynamic (num_cards,
- INTERNAL_MEM_CARDTABLE_MOD_UNION, TRUE);
- memcpy (obj->cardtable_mod_union, start_card, num_cards);
- } else {
- int i;
- for (i = 0; i < num_cards; ++i)
- obj->cardtable_mod_union [i] |= start_card [i];
- }
+ obj->cardtable_mod_union = sgen_card_table_update_mod_union (obj->cardtable_mod_union,
+ obj->data, obj->size, NULL);
}
}