Merge

Fri, 25 Mar 2011 17:39:20 -0700

author
jcoomes
date
Fri, 25 Mar 2011 17:39:20 -0700
changeset 2711
c6580380076b
parent 2670
006b3750a4d4
parent 2710
5134fa1cfe63
child 2712
5c0b591e1074

Merge

     1.1 --- a/src/share/vm/memory/cardTableRS.cpp	Thu Mar 24 23:06:13 2011 -0700
     1.2 +++ b/src/share/vm/memory/cardTableRS.cpp	Fri Mar 25 17:39:20 2011 -0700
     1.3 @@ -318,17 +318,28 @@
     1.4  protected:
     1.5    template <class T> void do_oop_work(T* p) {
     1.6      HeapWord* jp = (HeapWord*)p;
     1.7 -    if (jp >= _begin && jp < _end) {
     1.8 -      oop obj = oopDesc::load_decode_heap_oop(p);
     1.9 -      guarantee(obj == NULL ||
    1.10 -                (HeapWord*)p < _boundary ||
    1.11 -                (HeapWord*)obj >= _boundary,
    1.12 -                "pointer on clean card crosses boundary");
    1.13 -    }
    1.14 +    assert(jp >= _begin && jp < _end,
    1.15 +           err_msg("Error: jp " PTR_FORMAT " should be within "
    1.16 +                   "[_begin, _end) = [" PTR_FORMAT "," PTR_FORMAT ")",
    1.17 +                   _begin, _end));
    1.18 +    oop obj = oopDesc::load_decode_heap_oop(p);
    1.19 +    guarantee(obj == NULL || (HeapWord*)obj >= _boundary,
    1.20 +              err_msg("pointer " PTR_FORMAT " at " PTR_FORMAT " on "
    1.21 +                      "clean card crosses boundary" PTR_FORMAT,
    1.22 +                      (HeapWord*)obj, jp, _boundary));
    1.23    }
    1.24 +
    1.25  public:
    1.26    VerifyCleanCardClosure(HeapWord* b, HeapWord* begin, HeapWord* end) :
    1.27 -    _boundary(b), _begin(begin), _end(end) {}
    1.28 +    _boundary(b), _begin(begin), _end(end) {
    1.29 +    assert(b <= begin,
    1.30 +           err_msg("Error: boundary " PTR_FORMAT " should be at or below begin " PTR_FORMAT,
    1.31 +                   b, begin));
    1.32 +    assert(begin <= end,
    1.33 +           err_msg("Error: begin " PTR_FORMAT " should be strictly below end " PTR_FORMAT,
    1.34 +                   begin, end));
    1.35 +  }
    1.36 +
    1.37    virtual void do_oop(oop* p)       { VerifyCleanCardClosure::do_oop_work(p); }
    1.38    virtual void do_oop(narrowOop* p) { VerifyCleanCardClosure::do_oop_work(p); }
    1.39  };
    1.40 @@ -392,13 +403,14 @@
    1.41          }
    1.42        }
    1.43        // Now traverse objects until end.
    1.44 -      HeapWord* cur = start_block;
    1.45 -      VerifyCleanCardClosure verify_blk(gen_boundary, begin, end);
    1.46 -      while (cur < end) {
    1.47 -        if (s->block_is_obj(cur) && s->obj_is_alive(cur)) {
    1.48 -          oop(cur)->oop_iterate(&verify_blk);
    1.49 +      if (begin < end) {
    1.50 +        MemRegion mr(begin, end);
    1.51 +        VerifyCleanCardClosure verify_blk(gen_boundary, begin, end);
    1.52 +        for (HeapWord* cur = start_block; cur < end; cur += s->block_size(cur)) {
    1.53 +          if (s->block_is_obj(cur) && s->obj_is_alive(cur)) {
    1.54 +            oop(cur)->oop_iterate(&verify_blk, mr);
    1.55 +          }
    1.56          }
    1.57 -        cur += s->block_size(cur);
    1.58        }
    1.59        cur_entry = first_dirty;
    1.60      } else {
     2.1 --- a/src/share/vm/oops/constantPoolKlass.cpp	Thu Mar 24 23:06:13 2011 -0700
     2.2 +++ b/src/share/vm/oops/constantPoolKlass.cpp	Fri Mar 25 17:39:20 2011 -0700
     2.3 @@ -245,13 +245,13 @@
     2.4    }
     2.5    oop* addr;
     2.6    addr = cp->tags_addr();
     2.7 -  blk->do_oop(addr);
     2.8 +  if (mr.contains(addr)) blk->do_oop(addr);
     2.9    addr = cp->cache_addr();
    2.10 -  blk->do_oop(addr);
    2.11 +  if (mr.contains(addr)) blk->do_oop(addr);
    2.12    addr = cp->operands_addr();
    2.13 -  blk->do_oop(addr);
    2.14 +  if (mr.contains(addr)) blk->do_oop(addr);
    2.15    addr = cp->pool_holder_addr();
    2.16 -  blk->do_oop(addr);
    2.17 +  if (mr.contains(addr)) blk->do_oop(addr);
    2.18    return size;
    2.19  }
    2.20  

mercurial