8237543: Shenandoah: More asserts around code roots

Reviewed-by: zgu
This commit is contained in:
Roman Kennke 2020-01-20 18:03:31 +01:00
parent 2f76772fa9
commit 330100ddce
3 changed files with 37 additions and 2 deletions

View File

@ -145,11 +145,16 @@ void ShenandoahNMethod::detect_reloc_oops(nmethod* nm, GrowableArray<oop*>& oops
continue;
}
if (r->oop_value() != NULL) {
oop value = r->oop_value();
if (value != NULL) {
oop* addr = r->oop_addr();
shenandoah_assert_correct(addr, value);
shenandoah_assert_not_in_cset_except(addr, value, ShenandoahHeap::heap()->cancelled_gc());
shenandoah_assert_not_forwarded(addr, value);
// Non-NULL immediate oop found. NULL oops can safely be
// ignored since the method will be re-registered if they
// are later patched to be non-NULL.
oops.push(r->oop_addr());
oops.push(addr);
}
}
}

View File

@ -668,6 +668,11 @@ void ShenandoahTraversalGC::final_traversal_collection() {
if (ShenandoahVerify) {
_heap->verifier()->verify_after_traversal();
}
#ifdef ASSERT
else {
verify_roots_after_gc();
}
#endif
if (VerifyAfterGC) {
Universe::verify();
@ -675,6 +680,30 @@ void ShenandoahTraversalGC::final_traversal_collection() {
}
}
class ShenandoahVerifyAfterGC : public OopClosure {
private:
template <class T>
void do_oop_work(T* p) {
T o = RawAccess<>::oop_load(p);
if (!CompressedOops::is_null(o)) {
oop obj = CompressedOops::decode_not_null(o);
shenandoah_assert_correct(p, obj);
shenandoah_assert_not_in_cset_except(p, obj, ShenandoahHeap::heap()->cancelled_gc());
shenandoah_assert_not_forwarded(p, obj);
}
}
public:
void do_oop(narrowOop* p) { do_oop_work(p); }
void do_oop(oop* p) { do_oop_work(p); }
};
void ShenandoahTraversalGC::verify_roots_after_gc() {
ShenandoahRootVerifier verifier;
ShenandoahVerifyAfterGC cl;
verifier.oops_do(&cl);
}
class ShenandoahTraversalFixRootsClosure : public OopClosure {
private:
template <class T>

View File

@ -69,6 +69,7 @@ private:
void weak_refs_work_doit();
void fixup_roots();
void verify_roots_after_gc();
};
#endif // SHARE_GC_SHENANDOAH_SHENANDOAHTRAVERSALGC_HPP