< prev index next >

src/hotspot/share/classfile/javaClasses.cpp

Print this page
rev 50339 : 8203824: Chain exception from initialization in later NoClassDefFoundErrors.

*** 1303,1312 **** --- 1303,1317 ---- void java_lang_Class::set_signers(oop java_class, objArrayOop signers) { assert(_signers_offset != 0, "must be set"); java_class->obj_field_put(_signers_offset, (oop)signers); } + // Accessor for field containing exception thrown during class initialization. + oop java_lang_Class::exceptionThrownDuringClinit(oop java_class) { + assert(_exceptionThrownDuringClinit_offset != 0, "must be set"); + return java_class->obj_field(_exceptionThrownDuringClinit_offset); + } void java_lang_Class::set_class_loader(oop java_class, oop loader) { // jdk7 runs Queens in bootstrapping and jdk8-9 has no coordinated pushes yet. if (_class_loader_offset != 0) { java_class->obj_field_put(_class_loader_offset, loader);
*** 1490,1499 **** --- 1495,1505 ---- return mirror; } bool java_lang_Class::offsets_computed = false; int java_lang_Class::classRedefinedCount_offset = -1; + int java_lang_Class::_exceptionThrownDuringClinit_offset = -1; #define CLASS_FIELDS_DO(macro) \ macro(classRedefinedCount_offset, k, "classRedefinedCount", int_signature, false) ; \ macro(_class_loader_offset, k, "classLoader", classloader_signature, false); \ macro(_component_mirror_offset, k, "componentType", class_signature, false); \
*** 1507,1516 **** --- 1513,1525 ---- offsets_computed = true; InstanceKlass* k = SystemDictionary::Class_klass(); CLASS_FIELDS_DO(FIELD_COMPUTE_OFFSET); + compute_offset(_exceptionThrownDuringClinit_offset, k, + vmSymbols::exceptionThrownDuringClinit_name(), vmSymbols::throwable_signature()); + // Init lock is a C union with component_mirror. Only instanceKlass mirrors have // init_lock and only ArrayKlass mirrors have component_mirror. Since both are oops // GC treats them the same. _init_lock_offset = _component_mirror_offset;
*** 1852,1861 **** --- 1861,1871 ---- #define THROWABLE_FIELDS_DO(macro) \ macro(backtrace_offset, k, "backtrace", object_signature, false); \ macro(detailMessage_offset, k, "detailMessage", string_signature, false); \ macro(stackTrace_offset, k, "stackTrace", java_lang_StackTraceElement_array, false); \ macro(depth_offset, k, "depth", int_signature, false); \ + macro(cause_offset, k, "cause", throwable_signature, false); \ macro(static_unassigned_stacktrace_offset, k, "UNASSIGNED_STACK", java_lang_StackTraceElement_array, true) void java_lang_Throwable::compute_offsets() { InstanceKlass* k = SystemDictionary::Throwable_klass(); THROWABLE_FIELDS_DO(FIELD_COMPUTE_OFFSET);
*** 1907,1916 **** --- 1917,1930 ---- void java_lang_Throwable::set_message(oop throwable, oop value) { throwable->obj_field_put(detailMessage_offset, value); } + void java_lang_Throwable::set_cause(oop throwable, oop cause) { + assert(cause_offset != 0, "not yet initialized"); + throwable->obj_field_put(cause_offset, cause); + } void java_lang_Throwable::set_stacktrace(oop throwable, oop st_element_array) { throwable->obj_field_put(stackTrace_offset, st_element_array); }
*** 4182,4191 **** --- 4196,4206 ---- int java_lang_Class::_signers_offset; GrowableArray<Klass*>* java_lang_Class::_fixup_mirror_list = NULL; GrowableArray<Klass*>* java_lang_Class::_fixup_module_field_list = NULL; int java_lang_Throwable::backtrace_offset; int java_lang_Throwable::detailMessage_offset; + int java_lang_Throwable::cause_offset; int java_lang_Throwable::stackTrace_offset; int java_lang_Throwable::depth_offset; int java_lang_Throwable::static_unassigned_stacktrace_offset; int java_lang_reflect_AccessibleObject::override_offset; int java_lang_reflect_Method::clazz_offset;
< prev index next >