@@ -92,14 +92,18 @@ void ShenandoahAsserts::print_obj(ShenandoahMessageBuffer& msg, oop obj) {
92
92
r->print_on (&ss);
93
93
ss.cr ();
94
94
if (obj_klass == vmClasses::Class_klass ()) {
95
- ss.print_cr (" mirrored klass: " PTR_FORMAT, p2i (obj->metadata_field (java_lang_Class::klass_offset ())));
96
- ss.print_cr (" mirrored array klass: " PTR_FORMAT, p2i (obj->metadata_field (java_lang_Class::array_klass_offset ())));
95
+ const Klass* mk = (const Klass*) obj->metadata_field (java_lang_Class::klass_offset ());
96
+ const bool mk_valid = Metaspace::contains (mk);
97
+ const Klass* amk = (const Klass*) obj->metadata_field (java_lang_Class::array_klass_offset ());
98
+ const bool amk_valid = Metaspace::contains (amk);
99
+ ss.print_cr (" mirrored klass: " PTR_FORMAT " %s" , p2i (mk), mk_valid ? " (in metaspace)" : " (invalid, not in metaspace)" );
100
+ ss.print_cr (" mirrored array klass: " PTR_FORMAT " %s" , p2i (amk), amk_valid ? " (in metaspace)" : " (invalid, not in metaspace)" );
97
101
}
98
102
}
99
103
100
104
static constexpr int num_bytes = 64 ;
101
105
const_address loc = cast_from_oop<const_address>(obj);
102
- os::print_hex_dump (&ss, loc, loc + num_bytes, 8 , true , 32 , loc);
106
+ os::print_hex_dump (&ss, loc, loc + num_bytes, 4 , true , 32 , loc);
103
107
104
108
msg.append (" %s" , ss.base ());
105
109
}
@@ -246,6 +250,7 @@ void ShenandoahAsserts::assert_correct(void* interior_loc, oop obj, const char*
246
250
oop fwd = ShenandoahForwarding::get_forwardee_raw_unchecked (obj);
247
251
248
252
if (obj != fwd) {
253
+
249
254
// When Full GC moves the objects, we cannot trust fwdptrs. If we got here, it means something
250
255
// tries fwdptr manipulation when Full GC is running. The only exception is using the fwdptr
251
256
// that still points to the object itself.
@@ -293,19 +298,19 @@ void ShenandoahAsserts::assert_correct(void* interior_loc, oop obj, const char*
293
298
const Klass* obj_klass = nullptr ;
294
299
narrowKlass nk = 0 ;
295
300
if (!extract_klass_safely (obj, nk, obj_klass)) {
296
- print_failure (_safe_unknown , obj, interior_loc, nullptr , " Shenandoah assert_correct failed" ,
301
+ print_failure (_safe_oop , obj, interior_loc, nullptr , " Shenandoah assert_correct failed" ,
297
302
" Object klass pointer invalid" ,
298
303
file,line);
299
304
}
300
305
301
306
if (obj_klass == nullptr ) {
302
- print_failure (_safe_unknown , obj, interior_loc, nullptr , " Shenandoah assert_correct failed" ,
307
+ print_failure (_safe_oop , obj, interior_loc, nullptr , " Shenandoah assert_correct failed" ,
303
308
" Object klass pointer should not be null" ,
304
309
file,line);
305
310
}
306
311
307
312
if (!Metaspace::contains (obj_klass)) {
308
- print_failure (_safe_unknown , obj, interior_loc, nullptr , " Shenandoah assert_correct failed" ,
313
+ print_failure (_safe_oop , obj, interior_loc, nullptr , " Shenandoah assert_correct failed" ,
309
314
" Object klass pointer must go to metaspace" ,
310
315
file,line);
311
316
}
0 commit comments