vm: verify code heap's all_blocks set when DEBUG

db4
Joe Groff 2011-11-22 22:45:48 -08:00
parent c2c2023e34
commit 15c4b7aa57
2 changed files with 24 additions and 0 deletions

View File

@ -72,8 +72,31 @@ void code_heap::flush_icache()
factor::flush_icache(seg->start,seg->size);
}
struct all_blocks_set_verifier {
std::set<code_block*> *leftovers;
all_blocks_set_verifier(std::set<code_block*> *leftovers) : leftovers(leftovers) {}
void operator()(code_block *block, cell size)
{
FACTOR_ASSERT(leftovers->find(block) != leftovers->end());
leftovers->erase(block);
}
};
void code_heap::verify_all_blocks_set()
{
std::set<code_block*> leftovers = all_blocks;
all_blocks_set_verifier verifier(&leftovers);
allocator->iterate(verifier);
FACTOR_ASSERT(leftovers.empty());
}
code_block *code_heap::code_block_for_address(cell address)
{
#ifdef FACTOR_DEBUG
verify_all_blocks_set();
#endif
std::set<code_block*>::const_iterator blocki =
all_blocks.upper_bound((code_block*)address);
FACTOR_ASSERT(blocki != all_blocks.begin());

View File

@ -47,6 +47,7 @@ struct code_heap {
void flush_icache();
void guard_safepoint();
void unguard_safepoint();
void verify_all_blocks_set();
void initialize_all_blocks_set();
void update_all_blocks_set(mark_bits<code_block> *code_forwarding_map);