Skip to content

Commit aab9d9c

Browse files
committed
wip
1 parent c7aa454 commit aab9d9c

File tree

1 file changed

+11
-6
lines changed

1 file changed

+11
-6
lines changed

src/hotspot/share/gc/shenandoah/shenandoahAsserts.cpp

Lines changed: 11 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -92,14 +92,18 @@ void ShenandoahAsserts::print_obj(ShenandoahMessageBuffer& msg, oop obj) {
9292
r->print_on(&ss);
9393
ss.cr();
9494
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)");
97101
}
98102
}
99103

100104
static constexpr int num_bytes = 64;
101105
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);
103107

104108
msg.append("%s", ss.base());
105109
}
@@ -246,6 +250,7 @@ void ShenandoahAsserts::assert_correct(void* interior_loc, oop obj, const char*
246250
oop fwd = ShenandoahForwarding::get_forwardee_raw_unchecked(obj);
247251

248252
if (obj != fwd) {
253+
249254
// When Full GC moves the objects, we cannot trust fwdptrs. If we got here, it means something
250255
// tries fwdptr manipulation when Full GC is running. The only exception is using the fwdptr
251256
// that still points to the object itself.
@@ -293,19 +298,19 @@ void ShenandoahAsserts::assert_correct(void* interior_loc, oop obj, const char*
293298
const Klass* obj_klass = nullptr;
294299
narrowKlass nk = 0;
295300
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",
297302
"Object klass pointer invalid",
298303
file,line);
299304
}
300305

301306
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",
303308
"Object klass pointer should not be null",
304309
file,line);
305310
}
306311

307312
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",
309314
"Object klass pointer must go to metaspace",
310315
file,line);
311316
}

0 commit comments

Comments
 (0)