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;
|