< prev index next >

src/share/vm/gc/shared/cardTableRS.cpp

Print this page




 332   invalidate(used_mr);
 333 }
 334 
 335 
 336 class VerifyCleanCardClosure: public OopClosure {
 337 private:
 338   HeapWord* _boundary;
 339   HeapWord* _begin;
 340   HeapWord* _end;
 341 protected:
 342   template <class T> void do_oop_work(T* p) {
 343     HeapWord* jp = (HeapWord*)p;
 344     assert(jp >= _begin && jp < _end,
 345            err_msg("Error: jp " PTR_FORMAT " should be within "
 346                    "[_begin, _end) = [" PTR_FORMAT "," PTR_FORMAT ")",
 347                    p2i(jp), p2i(_begin), p2i(_end)));
 348     oop obj = oopDesc::load_decode_heap_oop(p);
 349     guarantee(obj == NULL || (HeapWord*)obj >= _boundary,
 350               err_msg("pointer " PTR_FORMAT " at " PTR_FORMAT " on "
 351                       "clean card crosses boundary" PTR_FORMAT,
 352                       p2i((HeapWord*)obj), p2i(jp), p2i(_boundary)));
 353   }
 354 
 355 public:
 356   VerifyCleanCardClosure(HeapWord* b, HeapWord* begin, HeapWord* end) :
 357     _boundary(b), _begin(begin), _end(end) {
 358     assert(b <= begin,
 359            err_msg("Error: boundary " PTR_FORMAT " should be at or below begin " PTR_FORMAT,
 360                    p2i(b), p2i(begin)));
 361     assert(begin <= end,
 362            err_msg("Error: begin " PTR_FORMAT " should be strictly below end " PTR_FORMAT,
 363                    p2i(begin), p2i(end)));
 364   }
 365 
 366   virtual void do_oop(oop* p)       { VerifyCleanCardClosure::do_oop_work(p); }
 367   virtual void do_oop(narrowOop* p) { VerifyCleanCardClosure::do_oop_work(p); }
 368 };
 369 
 370 class VerifyCTSpaceClosure: public SpaceClosure {
 371 private:
 372   CardTableRS* _ct;




 332   invalidate(used_mr);
 333 }
 334 
 335 
 336 class VerifyCleanCardClosure: public OopClosure {
 337 private:
 338   HeapWord* _boundary;
 339   HeapWord* _begin;
 340   HeapWord* _end;
 341 protected:
 342   template <class T> void do_oop_work(T* p) {
 343     HeapWord* jp = (HeapWord*)p;
 344     assert(jp >= _begin && jp < _end,
 345            err_msg("Error: jp " PTR_FORMAT " should be within "
 346                    "[_begin, _end) = [" PTR_FORMAT "," PTR_FORMAT ")",
 347                    p2i(jp), p2i(_begin), p2i(_end)));
 348     oop obj = oopDesc::load_decode_heap_oop(p);
 349     guarantee(obj == NULL || (HeapWord*)obj >= _boundary,
 350               err_msg("pointer " PTR_FORMAT " at " PTR_FORMAT " on "
 351                       "clean card crosses boundary" PTR_FORMAT,
 352                       p2i(obj), p2i(jp), p2i(_boundary)));
 353   }
 354 
 355 public:
 356   VerifyCleanCardClosure(HeapWord* b, HeapWord* begin, HeapWord* end) :
 357     _boundary(b), _begin(begin), _end(end) {
 358     assert(b <= begin,
 359            err_msg("Error: boundary " PTR_FORMAT " should be at or below begin " PTR_FORMAT,
 360                    p2i(b), p2i(begin)));
 361     assert(begin <= end,
 362            err_msg("Error: begin " PTR_FORMAT " should be strictly below end " PTR_FORMAT,
 363                    p2i(begin), p2i(end)));
 364   }
 365 
 366   virtual void do_oop(oop* p)       { VerifyCleanCardClosure::do_oop_work(p); }
 367   virtual void do_oop(narrowOop* p) { VerifyCleanCardClosure::do_oop_work(p); }
 368 };
 369 
 370 class VerifyCTSpaceClosure: public SpaceClosure {
 371 private:
 372   CardTableRS* _ct;


< prev index next >