< prev index next >

src/share/vm/classfile/javaClasses.cpp

Print this page

        

@@ -113,11 +113,11 @@
                bool allow_super = false) {
   fieldDescriptor fd;
   InstanceKlass* ik = InstanceKlass::cast(klass_oop);
   if (!find_field(ik, name_symbol, signature_symbol, &fd, allow_super)) {
     ResourceMark rm;
-    tty->print_cr("Invalid layout of %s at %s", ik->external_name(), name_symbol->as_C_string());
+    tty->print_cr("Invalid layout of %s at %s sig %s", ik->external_name(), name_symbol->as_C_string(), signature_symbol->as_C_string());
 #ifndef PRODUCT
     klass_oop->print();
     tty->print_cr("all fields:");
     for (AllFieldStream fs(InstanceKlass::cast(klass_oop)); !fs.done(); fs.next()) {
       tty->print_cr("  name: %s, sig: %s, flags: %08x", fs.name()->as_C_string(), fs.signature()->as_C_string(), fs.access_flags().as_int());

@@ -872,15 +872,16 @@
 
 void java_lang_Class::compute_offsets() {
   assert(!offsets_computed, "offsets should be initialized only once");
   offsets_computed = true;
 
+  Thread* THREAD = Thread::current();
   Klass* k = SystemDictionary::Class_klass();
+  compute_offset(_classData_offset, k, vmSymbols::classData_name(), vmSymbols::object_signature());
   // The classRedefinedCount field is only present starting in 1.5,
   // so don't go fatal.
-  compute_optional_offset(classRedefinedCount_offset,
-                          k, vmSymbols::classRedefinedCount_name(), vmSymbols::int_signature());
+  compute_optional_offset(classRedefinedCount_offset, k, vmSymbols::classRedefinedCount_name(), vmSymbols::int_signature());
 
   // Needs to be optional because the old build runs Queens during bootstrapping
   // and jdk8-9 doesn't have coordinated pushes yet.
   compute_optional_offset(_class_loader_offset,
                  k, vmSymbols::classLoader_name(),

@@ -896,10 +897,14 @@
   _init_lock_offset = _component_mirror_offset;
 
   CLASS_INJECTED_FIELDS(INJECTED_FIELD_COMPUTE_OFFSET);
 }
 
+oop java_lang_Class::classData(oop obj) {
+  return obj->obj_field_volatile(_classData_offset);
+}
+
 int java_lang_Class::classRedefinedCount(oop the_class_mirror) {
   if (classRedefinedCount_offset == -1) {
     // If we don't have an offset for it then just return -1 as a marker.
     return -1;
   }

@@ -914,10 +919,26 @@
   }
 
   the_class_mirror->int_field_put(classRedefinedCount_offset, value);
 }
 
+int java_lang_invoke_MemberName_ClassData::_publishedToVM_offset;
+
+void java_lang_invoke_MemberName_ClassData::compute_offsets() {
+  Thread* THREAD = Thread::current();
+  Klass* k = SystemDictionary::MemberName_ClassData_klass();
+  compute_offset(_publishedToVM_offset, k, vmSymbols::publishedToVM_name(), vmSymbols::java_lang_invoke_MemberName_signature());
+}
+
+bool java_lang_invoke_MemberName_ClassData::is_instance(oop obj) {
+  return obj != NULL && obj->klass() == SystemDictionary::MemberName_ClassData_klass();
+}
+
+oop java_lang_invoke_MemberName_ClassData::publishedToVM(oop obj) {
+  assert(is_instance(obj), err_msg("%s", obj == NULL ? "null" : obj->klass()->external_name()));
+  return obj->obj_field(_publishedToVM_offset);
+}
 
 // Note: JDK1.1 and before had a privateInfo_offset field which was used for the
 //       platform thread structure, and a eetop offset which was used for thread
 //       local storage (and unused by the HotSpot VM). In JDK1.2 the two structures
 //       merged, so in the HotSpot VM we just use the eetop field for the thread

@@ -2698,10 +2719,11 @@
 
 int java_lang_invoke_MemberName::_clazz_offset;
 int java_lang_invoke_MemberName::_name_offset;
 int java_lang_invoke_MemberName::_type_offset;
 int java_lang_invoke_MemberName::_flags_offset;
+int java_lang_invoke_MemberName::_next_offset;
 int java_lang_invoke_MemberName::_vmtarget_offset;
 int java_lang_invoke_MemberName::_vmloader_offset;
 int java_lang_invoke_MemberName::_vmindex_offset;
 
 int java_lang_invoke_LambdaForm::_vmentry_offset;

@@ -2719,10 +2741,11 @@
   if (klass_oop != NULL) {
     compute_offset(_clazz_offset,     klass_oop, vmSymbols::clazz_name(),     vmSymbols::class_signature());
     compute_offset(_name_offset,      klass_oop, vmSymbols::name_name(),      vmSymbols::string_signature());
     compute_offset(_type_offset,      klass_oop, vmSymbols::type_name(),      vmSymbols::object_signature());
     compute_offset(_flags_offset,     klass_oop, vmSymbols::flags_name(),     vmSymbols::int_signature());
+    compute_offset(_next_offset,      klass_oop, vmSymbols::next_name(),      vmSymbols::java_lang_invoke_MemberName_signature());
     MEMBERNAME_INJECTED_FIELDS(INJECTED_FIELD_COMPUTE_OFFSET);
   }
 }
 
 void java_lang_invoke_LambdaForm::compute_offsets() {

@@ -2790,10 +2813,15 @@
 void java_lang_invoke_MemberName::set_flags(oop mname, int flags) {
   assert(is_instance(mname), "wrong type");
   mname->int_field_put(_flags_offset, flags);
 }
 
+oop java_lang_invoke_MemberName::next(oop mname) {
+  assert(is_instance(mname), "wrong type");
+  return mname->obj_field(_next_offset);
+}
+
 Metadata* java_lang_invoke_MemberName::vmtarget(oop mname) {
   assert(is_instance(mname), "wrong type");
   return (Metadata*)mname->address_field(_vmtarget_offset);
 }
 

@@ -3128,17 +3156,22 @@
 int java_lang_Class::_class_loader_offset;
 int java_lang_Class::_protection_domain_offset;
 int java_lang_Class::_component_mirror_offset;
 int java_lang_Class::_init_lock_offset;
 int java_lang_Class::_signers_offset;
+int java_lang_Class::_classData_offset;
+
 GrowableArray<Klass*>* java_lang_Class::_fixup_mirror_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::static_unassigned_stacktrace_offset;
+
 int java_lang_reflect_AccessibleObject::override_offset;
+
 int java_lang_reflect_Method::clazz_offset;
 int java_lang_reflect_Method::name_offset;
 int java_lang_reflect_Method::returnType_offset;
 int java_lang_reflect_Method::parameterTypes_offset;
 int java_lang_reflect_Method::exceptionTypes_offset;

@@ -3147,59 +3180,73 @@
 int java_lang_reflect_Method::signature_offset;
 int java_lang_reflect_Method::annotations_offset;
 int java_lang_reflect_Method::parameter_annotations_offset;
 int java_lang_reflect_Method::annotation_default_offset;
 int java_lang_reflect_Method::type_annotations_offset;
+
 int java_lang_reflect_Constructor::clazz_offset;
 int java_lang_reflect_Constructor::parameterTypes_offset;
 int java_lang_reflect_Constructor::exceptionTypes_offset;
 int java_lang_reflect_Constructor::slot_offset;
 int java_lang_reflect_Constructor::modifiers_offset;
 int java_lang_reflect_Constructor::signature_offset;
 int java_lang_reflect_Constructor::annotations_offset;
 int java_lang_reflect_Constructor::parameter_annotations_offset;
 int java_lang_reflect_Constructor::type_annotations_offset;
+
 int java_lang_reflect_Field::clazz_offset;
 int java_lang_reflect_Field::name_offset;
 int java_lang_reflect_Field::type_offset;
 int java_lang_reflect_Field::slot_offset;
 int java_lang_reflect_Field::modifiers_offset;
 int java_lang_reflect_Field::signature_offset;
 int java_lang_reflect_Field::annotations_offset;
 int java_lang_reflect_Field::type_annotations_offset;
+
 int java_lang_reflect_Parameter::name_offset;
 int java_lang_reflect_Parameter::modifiers_offset;
 int java_lang_reflect_Parameter::index_offset;
 int java_lang_reflect_Parameter::executable_offset;
+
 int java_lang_boxing_object::value_offset;
 int java_lang_boxing_object::long_value_offset;
+
 int java_lang_ref_Reference::referent_offset;
 int java_lang_ref_Reference::queue_offset;
 int java_lang_ref_Reference::next_offset;
 int java_lang_ref_Reference::discovered_offset;
 int java_lang_ref_Reference::static_lock_offset;
 int java_lang_ref_Reference::static_pending_offset;
 int java_lang_ref_Reference::number_of_fake_oop_fields;
+
 int java_lang_ref_SoftReference::timestamp_offset;
 int java_lang_ref_SoftReference::static_clock_offset;
+
 int java_lang_ClassLoader::parent_offset;
+
 int java_lang_System::static_in_offset;
 int java_lang_System::static_out_offset;
 int java_lang_System::static_err_offset;
 int java_lang_System::static_security_offset;
+
 int java_lang_StackTraceElement::declaringClass_offset;
 int java_lang_StackTraceElement::methodName_offset;
 int java_lang_StackTraceElement::fileName_offset;
 int java_lang_StackTraceElement::lineNumber_offset;
+
 int java_lang_AssertionStatusDirectives::classes_offset;
 int java_lang_AssertionStatusDirectives::classEnabled_offset;
 int java_lang_AssertionStatusDirectives::packages_offset;
 int java_lang_AssertionStatusDirectives::packageEnabled_offset;
 int java_lang_AssertionStatusDirectives::deflt_offset;
+
 int java_nio_Buffer::_limit_offset;
+
 int java_util_concurrent_locks_AbstractOwnableSynchronizer::_owner_offset = 0;
+
 int sun_reflect_ConstantPool::_oop_offset;
+
 int sun_reflect_UnsafeStaticFieldAccessorImpl::_base_offset;
 
 
 // Support for java_lang_StackTraceElement
 

@@ -3333,10 +3380,11 @@
   java_lang_Thread::compute_offsets();
   java_lang_ThreadGroup::compute_offsets();
   java_lang_invoke_MethodHandle::compute_offsets();
   java_lang_invoke_DirectMethodHandle::compute_offsets();
   java_lang_invoke_MemberName::compute_offsets();
+  java_lang_invoke_MemberName_ClassData::compute_offsets();
   java_lang_invoke_LambdaForm::compute_offsets();
   java_lang_invoke_MethodType::compute_offsets();
   java_lang_invoke_CallSite::compute_offsets();
   java_security_AccessControlContext::compute_offsets();
   // Initialize reflection classes. The layouts of these classes
< prev index next >