483 // For product build verification 484 guarantee(_byte_map[_guard_index] == last_card, 485 "card table guard has been modified"); 486 } 487 488 void CardTableModRefBS::verify() { 489 verify_guard(); 490 } 491 492 #ifndef PRODUCT 493 void CardTableModRefBS::verify_region(MemRegion mr, 494 jbyte val, bool val_equals) { 495 jbyte* start = byte_for(mr.start()); 496 jbyte* end = byte_for(mr.last()); 497 bool failures = false; 498 for (jbyte* curr = start; curr <= end; ++curr) { 499 jbyte curr_val = *curr; 500 bool failed = (val_equals) ? (curr_val != val) : (curr_val == val); 501 if (failed) { 502 if (!failures) { 503 tty->cr(); 504 tty->print_cr("== CT verification failed: [" INTPTR_FORMAT "," INTPTR_FORMAT "]", p2i(start), p2i(end)); 505 tty->print_cr("== %sexpecting value: %d", 506 (val_equals) ? "" : "not ", val); 507 failures = true; 508 } 509 tty->print_cr("== card " PTR_FORMAT " [" PTR_FORMAT "," PTR_FORMAT "], " 510 "val: %d", p2i(curr), p2i(addr_for(curr)), 511 p2i((HeapWord*) (((size_t) addr_for(curr)) + card_size)), 512 (int) curr_val); 513 } 514 } 515 guarantee(!failures, "there should not have been any failures"); 516 } 517 518 void CardTableModRefBS::verify_not_dirty_region(MemRegion mr) { 519 verify_region(mr, dirty_card, false /* val_equals */); 520 } 521 522 void CardTableModRefBS::verify_dirty_region(MemRegion mr) { 523 verify_region(mr, dirty_card, true /* val_equals */); 524 } 525 #endif 526 527 void CardTableModRefBS::print_on(outputStream* st) const { 528 st->print_cr("Card table byte_map: [" INTPTR_FORMAT "," INTPTR_FORMAT "] byte_map_base: " INTPTR_FORMAT, 529 p2i(_byte_map), p2i(_byte_map + _byte_map_size), p2i(byte_map_base)); 530 } | 483 // For product build verification 484 guarantee(_byte_map[_guard_index] == last_card, 485 "card table guard has been modified"); 486 } 487 488 void CardTableModRefBS::verify() { 489 verify_guard(); 490 } 491 492 #ifndef PRODUCT 493 void CardTableModRefBS::verify_region(MemRegion mr, 494 jbyte val, bool val_equals) { 495 jbyte* start = byte_for(mr.start()); 496 jbyte* end = byte_for(mr.last()); 497 bool failures = false; 498 for (jbyte* curr = start; curr <= end; ++curr) { 499 jbyte curr_val = *curr; 500 bool failed = (val_equals) ? (curr_val != val) : (curr_val == val); 501 if (failed) { 502 if (!failures) { 503 log_error(gc, verify)("== CT verification failed: [" INTPTR_FORMAT "," INTPTR_FORMAT "]", p2i(start), p2i(end)); 504 log_error(gc, verify)("== %sexpecting value: %d", (val_equals) ? "" : "not ", val); 505 failures = true; 506 } 507 log_error(gc, verify)("== card " PTR_FORMAT " [" PTR_FORMAT "," PTR_FORMAT "], val: %d", 508 p2i(curr), p2i(addr_for(curr)), 509 p2i((HeapWord*) (((size_t) addr_for(curr)) + card_size)), 510 (int) curr_val); 511 } 512 } 513 guarantee(!failures, "there should not have been any failures"); 514 } 515 516 void CardTableModRefBS::verify_not_dirty_region(MemRegion mr) { 517 verify_region(mr, dirty_card, false /* val_equals */); 518 } 519 520 void CardTableModRefBS::verify_dirty_region(MemRegion mr) { 521 verify_region(mr, dirty_card, true /* val_equals */); 522 } 523 #endif 524 525 void CardTableModRefBS::print_on(outputStream* st) const { 526 st->print_cr("Card table byte_map: [" INTPTR_FORMAT "," INTPTR_FORMAT "] byte_map_base: " INTPTR_FORMAT, 527 p2i(_byte_map), p2i(_byte_map + _byte_map_size), p2i(byte_map_base)); 528 } |