RFR: Record location when asserting the code root correctness

Aleksey Shipilev shade at redhat.com
Fri Sep 21 11:18:05 UTC 2018


We should really pass the "loc" into assert to let it know we read the oop from nmethod, for better
diagnostics.

diff -r 3cb10f96ca90 src/hotspot/share/gc/shenandoah/shenandoahCodeRoots.cpp
--- a/src/hotspot/share/gc/shenandoah/shenandoahCodeRoots.cpp   Fri Sep 21 12:35:03 2018 +0200
+++ b/src/hotspot/share/gc/shenandoah/shenandoahCodeRoots.cpp   Fri Sep 21 13:16:14 2018 +0200
@@ -360,13 +360,14 @@
 void ShenandoahNMethod::assert_alive_and_correct() {
   assert(_nm->is_alive(), "only alive nmethods here");
   assert(_oops_count > 0, "should have filtered nmethods without oops before");
   ShenandoahHeap* heap = ShenandoahHeap::heap();
   for (int c = 0; c < _oops_count; c++) {
-    oop o = RawAccess<>::oop_load(_oops[c]);
-    shenandoah_assert_correct_except(NULL, o, o == NULL || heap->is_full_gc_move_in_progress());
-    assert(_nm->code_contains((address)_oops[c]) || _nm->oops_contains(_oops[c]), "nmethod should
contain the oop*");
+    oop *loc = _oops[c];
+    oop o = RawAccess<>::oop_load(loc);
+    assert(_nm->code_contains((address) loc) || _nm->oops_contains(loc), "nmethod should contain
the oop*");
+    shenandoah_assert_correct_except(loc, o, o == NULL || heap->is_full_gc_move_in_progress());
   }
 }


Testing: tier3_gc_shenandoah

Thanks,
-Aleksey



More information about the shenandoah-dev mailing list