mirror of
https://github.com/openjdk/jdk.git
synced 2026-04-04 03:58:42 +00:00
8237543: Shenandoah: More asserts around code roots
Reviewed-by: zgu
This commit is contained in:
parent
2f76772fa9
commit
330100ddce
@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -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>
|
||||
|
||||
@ -69,6 +69,7 @@ private:
|
||||
void weak_refs_work_doit();
|
||||
|
||||
void fixup_roots();
|
||||
void verify_roots_after_gc();
|
||||
};
|
||||
|
||||
#endif // SHARE_GC_SHENANDOAH_SHENANDOAHTRAVERSALGC_HPP
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user