src/share/vm/classfile/javaClasses.cpp
Index
Unified diffs
Context diffs
Sdiffs
Patch
New
Old
Previous File
Next File
*** old/src/share/vm/classfile/javaClasses.cpp Fri Oct 31 13:39:05 2014
--- new/src/share/vm/classfile/javaClasses.cpp Fri Oct 31 13:39:04 2014
*** 113,123 ****
--- 113,123 ----
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 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,886 ****
--- 872,887 ----
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, SymbolTable::new_symbol("classData", THREAD), SymbolTable::new_symbol("Ljava/lang/Class$ClassData;", THREAD));
// 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());
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,905 ****
--- 897,910 ----
_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,923 ****
--- 919,951 ----
}
the_class_mirror->int_field_put(classRedefinedCount_offset, value);
}
+ int java_lang_Class_ClassData::_elementData_offset;
+ int java_lang_Class_ClassData::_size_offset;
+
+ void java_lang_Class_ClassData::compute_offsets() {
+ Thread* THREAD = Thread::current();
+ Klass* k = SystemDictionary::Class_ClassData_klass();
+ compute_offset(_elementData_offset, k, SymbolTable::new_symbol("elementData", THREAD), SymbolTable::new_symbol("[Ljava/lang/Comparable;", THREAD));
+ compute_offset(_size_offset, k, SymbolTable::new_symbol("size", THREAD), vmSymbols::int_signature());
+ }
+
+ bool java_lang_Class_ClassData::is_instance(oop obj) {
+ return obj != NULL && obj->klass() == SystemDictionary::Class_ClassData_klass();
+ }
+
+ objArrayOop java_lang_Class_ClassData::elementData(oop obj) {
+ assert(is_instance(obj), err_msg("%s", obj == NULL ? "null" : obj->klass()->external_name()));
+ return (objArrayOop) obj->obj_field(_elementData_offset);
+ }
+
+ int java_lang_Class_ClassData::size(oop obj) {
+ assert(is_instance(obj), err_msg("%s", obj == NULL ? "null" : obj->klass()->external_name()));
+ return obj->int_field(_size_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
*** 3128,3144 ****
--- 3156,3177 ----
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,3205 ****
--- 3180,3252 ----
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
*** 3327,3336 ****
--- 3374,3384 ----
// Compute non-hard-coded field offsets of all the classes in this file
void JavaClasses::compute_offsets() {
// java_lang_Class::compute_offsets was called earlier in bootstrap
+ java_lang_Class_ClassData::compute_offsets();
java_lang_ClassLoader::compute_offsets();
java_lang_Thread::compute_offsets();
java_lang_ThreadGroup::compute_offsets();
java_lang_invoke_MethodHandle::compute_offsets();
java_lang_invoke_DirectMethodHandle::compute_offsets();
src/share/vm/classfile/javaClasses.cpp
Index
Unified diffs
Context diffs
Sdiffs
Patch
New
Old
Previous File
Next File