< 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 >