@@ -1055,9 +1055,15 @@ void ShenandoahVerifier::verify_generic(VerifyOption vo) {
1055
1055
}
1056
1056
1057
1057
void 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 (
1059
1065
" Before Mark" ,
1060
- _verify_remembered_before_marking ,
1066
+ verify_remembered_set ,
1061
1067
// verify read-only remembered set from bottom() to top()
1062
1068
_verify_forwarded_none, // UR should have fixed up
1063
1069
_verify_marked_disable, // do not verify marked: lots ot time wasted checking dead allocations
@@ -1114,9 +1120,14 @@ void ShenandoahVerifier::verify_before_evacuation() {
1114
1120
}
1115
1121
1116
1122
void 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
+ }
1117
1128
verify_at_safepoint (
1118
1129
" Before Updating References" ,
1119
- _verify_remembered_before_updating_references, // verify read-write remembered set
1130
+ verify_remembered_set, // verify read-write remembered set
1120
1131
_verify_forwarded_allow, // forwarded references allowed
1121
1132
_verify_marked_complete, // bitmaps might be stale, but alloc-after-mark should be well
1122
1133
_verify_cset_forwarded, // all cset refs are fully forwarded
@@ -1276,17 +1287,14 @@ class ShenandoahVerifyRemSetClosure : public BasicOopIterateClosure {
1276
1287
void do_oop (oop* p) override { work (p); }
1277
1288
};
1278
1289
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
-
1287
1290
template <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,
1289
1292
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 ;
1290
1298
ShenandoahVerifyRemSetClosure<Scanner> check_interesting_pointers (scanner, message);
1291
1299
HeapWord* from = r->bottom ();
1292
1300
HeapWord* obj_addr = from;
@@ -1357,7 +1365,6 @@ void ShenandoahVerifier::verify_rem_set_before_mark() {
1357
1365
shenandoah_assert_safepoint ();
1358
1366
shenandoah_assert_generational ();
1359
1367
1360
- ShenandoahMarkingContext* ctx = get_marking_context_for_old ();
1361
1368
ShenandoahOldGeneration* old_generation = _heap->old_generation ();
1362
1369
1363
1370
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() {
1366
1373
for (size_t i = 0 , n = _heap->num_regions (); i < n; ++i) {
1367
1374
ShenandoahHeapRegion* r = _heap->get_region (i);
1368
1375
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" );
1370
1377
}
1371
1378
}
1372
1379
}
@@ -1379,7 +1386,7 @@ void ShenandoahVerifier::verify_rem_set_after_full_gc() {
1379
1386
for (size_t i = 0 , n = _heap->num_regions (); i < n; ++i) {
1380
1387
ShenandoahHeapRegion* r = _heap->get_region (i);
1381
1388
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" );
1383
1390
}
1384
1391
}
1385
1392
}
@@ -1392,12 +1399,11 @@ void ShenandoahVerifier::verify_rem_set_before_update_ref() {
1392
1399
shenandoah_assert_safepoint ();
1393
1400
shenandoah_assert_generational ();
1394
1401
1395
- ShenandoahMarkingContext* ctx = get_marking_context_for_old ();
1396
1402
ShenandoahWriteTableScanner scanner (_heap->old_generation ()->card_scan ());
1397
1403
for (size_t i = 0 , n = _heap->num_regions (); i < n; ++i) {
1398
1404
ShenandoahHeapRegion* r = _heap->get_region (i);
1399
1405
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" );
1401
1407
}
1402
1408
}
1403
1409
}
0 commit comments