@@ -1055,9 +1055,15 @@ void ShenandoahVerifier::verify_generic(VerifyOption vo) {
10551055}
10561056
10571057void ShenandoahVerifier::verify_before_concmark () {
1058- verify_at_safepoint (
1058+ VerifyRememberedSet verify_remembered_set = _verify_remembered_before_marking;
1059+ if (_heap->mode ()->is_generational () &&
1060+ !_heap->old_generation ()->is_mark_complete ()) {
1061+ // Before marking in generational mode, remembered set can't be verified w/o complete old marking.
1062+ verify_remembered_set = _verify_remembered_disable;
1063+ }
1064+ verify_at_safepoint (
10591065 " Before Mark" ,
1060- _verify_remembered_before_marking ,
1066+ verify_remembered_set ,
10611067 // verify read-only remembered set from bottom() to top()
10621068 _verify_forwarded_none, // UR should have fixed up
10631069 _verify_marked_disable, // do not verify marked: lots ot time wasted checking dead allocations
@@ -1114,9 +1120,14 @@ void ShenandoahVerifier::verify_before_evacuation() {
11141120}
11151121
11161122void ShenandoahVerifier::verify_before_update_refs () {
1123+ VerifyRememberedSet verify_remembered_set = _verify_remembered_before_updating_references;
1124+ if (_heap->mode ()->is_generational () &&
1125+ !_heap->old_generation ()->is_mark_complete ()) {
1126+ verify_remembered_set = _verify_remembered_disable;
1127+ }
11171128 verify_at_safepoint (
11181129 " Before Updating References" ,
1119- _verify_remembered_before_updating_references, // verify read-write remembered set
1130+ verify_remembered_set, // verify read-write remembered set
11201131 _verify_forwarded_allow, // forwarded references allowed
11211132 _verify_marked_complete, // bitmaps might be stale, but alloc-after-mark should be well
11221133 _verify_cset_forwarded, // all cset refs are fully forwarded
@@ -1276,17 +1287,14 @@ class ShenandoahVerifyRemSetClosure : public BasicOopIterateClosure {
12761287 void do_oop (oop* p) override { work (p); }
12771288};
12781289
1279- ShenandoahMarkingContext* ShenandoahVerifier::get_marking_context_for_old () {
1280- shenandoah_assert_generations_reconciled ();
1281- if (_heap->old_generation ()->is_mark_complete () || _heap->gc_generation ()->is_global ()) {
1282- return _heap->complete_marking_context ();
1283- }
1284- return nullptr ;
1285- }
1286-
12871290template <typename Scanner>
1288- void ShenandoahVerifier::help_verify_region_rem_set (Scanner* scanner, ShenandoahHeapRegion* r, ShenandoahMarkingContext* ctx,
1291+ void ShenandoahVerifier::help_verify_region_rem_set (Scanner* scanner, ShenandoahHeapRegion* r,
12891292 HeapWord* registration_watermark, const char * message) {
1293+ shenandoah_assert_generations_reconciled ();
1294+ ShenandoahOldGeneration* old_gen = _heap->old_generation ();
1295+ assert (old_gen->is_mark_complete () || old_gen->is_parsable (), " Sanity" );
1296+
1297+ ShenandoahMarkingContext* ctx = old_gen->is_mark_complete () ?old_gen->complete_marking_context () : nullptr ;
12901298 ShenandoahVerifyRemSetClosure<Scanner> check_interesting_pointers (scanner, message);
12911299 HeapWord* from = r->bottom ();
12921300 HeapWord* obj_addr = from;
@@ -1357,7 +1365,6 @@ void ShenandoahVerifier::verify_rem_set_before_mark() {
13571365 shenandoah_assert_safepoint ();
13581366 shenandoah_assert_generational ();
13591367
1360- ShenandoahMarkingContext* ctx = get_marking_context_for_old ();
13611368 ShenandoahOldGeneration* old_generation = _heap->old_generation ();
13621369
13631370 log_debug (gc)(" Verifying remembered set at %s mark" , old_generation->is_doing_mixed_evacuations () ? " mixed" : " young" );
@@ -1366,7 +1373,7 @@ void ShenandoahVerifier::verify_rem_set_before_mark() {
13661373 for (size_t i = 0 , n = _heap->num_regions (); i < n; ++i) {
13671374 ShenandoahHeapRegion* r = _heap->get_region (i);
13681375 if (r->is_old () && r->is_active ()) {
1369- help_verify_region_rem_set (scanner, r, ctx, r->end (), " Verify init-mark remembered set violation" );
1376+ help_verify_region_rem_set (scanner, r, r->end (), " Verify init-mark remembered set violation" );
13701377 }
13711378 }
13721379}
@@ -1379,7 +1386,7 @@ void ShenandoahVerifier::verify_rem_set_after_full_gc() {
13791386 for (size_t i = 0 , n = _heap->num_regions (); i < n; ++i) {
13801387 ShenandoahHeapRegion* r = _heap->get_region (i);
13811388 if (r->is_old () && !r->is_cset ()) {
1382- help_verify_region_rem_set (&scanner, r, nullptr , r->top (), " Remembered set violation at end of Full GC" );
1389+ help_verify_region_rem_set (&scanner, r, r->top (), " Remembered set violation at end of Full GC" );
13831390 }
13841391 }
13851392}
@@ -1392,12 +1399,11 @@ void ShenandoahVerifier::verify_rem_set_before_update_ref() {
13921399 shenandoah_assert_safepoint ();
13931400 shenandoah_assert_generational ();
13941401
1395- ShenandoahMarkingContext* ctx = get_marking_context_for_old ();
13961402 ShenandoahWriteTableScanner scanner (_heap->old_generation ()->card_scan ());
13971403 for (size_t i = 0 , n = _heap->num_regions (); i < n; ++i) {
13981404 ShenandoahHeapRegion* r = _heap->get_region (i);
13991405 if (r->is_old () && !r->is_cset ()) {
1400- help_verify_region_rem_set (&scanner, r, ctx, r->get_update_watermark (), " Remembered set violation at init-update-references" );
1406+ help_verify_region_rem_set (&scanner, r, r->get_update_watermark (), " Remembered set violation at init-update-references" );
14011407 }
14021408 }
14031409}
0 commit comments