diff -r f4edb0d9f109 -r 21d113ecbf6a hotspot/src/share/vm/memory/cardTableRS.cpp --- a/hotspot/src/share/vm/memory/cardTableRS.cpp Fri Apr 11 09:56:35 2008 -0400 +++ b/hotspot/src/share/vm/memory/cardTableRS.cpp Sun Apr 13 17:43:42 2008 -0400 @@ -191,7 +191,7 @@ // prev-younger-gen ==> cur_youngergen_and_prev_nonclean_card // cur-younger-gen ==> cur_younger_gen // cur_youngergen_and_prev_nonclean_card ==> no change. -void CardTableRS::write_ref_field_gc_par(oop* field, oop new_val) { +void CardTableRS::write_ref_field_gc_par(void* field, oop new_val) { jbyte* entry = ct_bs()->byte_for(field); do { jbyte entry_val = *entry; @@ -290,28 +290,36 @@ class VerifyCleanCardClosure: public OopClosure { - HeapWord* boundary; - HeapWord* begin; HeapWord* end; -public: - void do_oop(oop* p) { +private: + HeapWord* _boundary; + HeapWord* _begin; + HeapWord* _end; +protected: + template void do_oop_work(T* p) { HeapWord* jp = (HeapWord*)p; - if (jp >= begin && jp < end) { - guarantee(*p == NULL || (HeapWord*)p < boundary - || (HeapWord*)(*p) >= boundary, + if (jp >= _begin && jp < _end) { + oop obj = oopDesc::load_decode_heap_oop(p); + guarantee(obj == NULL || + (HeapWord*)p < _boundary || + (HeapWord*)obj >= _boundary, "pointer on clean card crosses boundary"); } } - VerifyCleanCardClosure(HeapWord* b, HeapWord* _begin, HeapWord* _end) : - boundary(b), begin(_begin), end(_end) {} +public: + VerifyCleanCardClosure(HeapWord* b, HeapWord* begin, HeapWord* end) : + _boundary(b), _begin(begin), _end(end) {} + virtual void do_oop(oop* p) { VerifyCleanCardClosure::do_oop_work(p); } + virtual void do_oop(narrowOop* p) { VerifyCleanCardClosure::do_oop_work(p); } }; class VerifyCTSpaceClosure: public SpaceClosure { +private: CardTableRS* _ct; HeapWord* _boundary; public: VerifyCTSpaceClosure(CardTableRS* ct, HeapWord* boundary) : _ct(ct), _boundary(boundary) {} - void do_space(Space* s) { _ct->verify_space(s, _boundary); } + virtual void do_space(Space* s) { _ct->verify_space(s, _boundary); } }; class VerifyCTGenClosure: public GenCollectedHeap::GenClosure {