hotspot/src/share/vm/classfile/javaClasses.cpp
changeset 4571 80b553bddc26
parent 4562 5d93cb2d2090
child 4886 a2f9a66475b3
equal deleted inserted replaced
4569:f372ea9e5ed4 4571:80b553bddc26
    66 Handle java_lang_String::basic_create(int length, bool tenured, TRAPS) {
    66 Handle java_lang_String::basic_create(int length, bool tenured, TRAPS) {
    67   // Create the String object first, so there's a chance that the String
    67   // Create the String object first, so there's a chance that the String
    68   // and the char array it points to end up in the same cache line.
    68   // and the char array it points to end up in the same cache line.
    69   oop obj;
    69   oop obj;
    70   if (tenured) {
    70   if (tenured) {
    71     obj = instanceKlass::cast(SystemDictionary::string_klass())->allocate_permanent_instance(CHECK_NH);
    71     obj = instanceKlass::cast(SystemDictionary::String_klass())->allocate_permanent_instance(CHECK_NH);
    72   } else {
    72   } else {
    73     obj = instanceKlass::cast(SystemDictionary::string_klass())->allocate_instance(CHECK_NH);
    73     obj = instanceKlass::cast(SystemDictionary::String_klass())->allocate_instance(CHECK_NH);
    74   }
    74   }
    75 
    75 
    76   // Create the char array.  The String object must be handlized here
    76   // Create the char array.  The String object must be handlized here
    77   // because GC can happen as a result of the allocation attempt.
    77   // because GC can happen as a result of the allocation attempt.
    78   Handle h_obj(THREAD, obj);
    78   Handle h_obj(THREAD, obj);
   291   return UNICODE::as_utf8(position, len);
   291   return UNICODE::as_utf8(position, len);
   292 }
   292 }
   293 
   293 
   294 bool java_lang_String::equals(oop java_string, jchar* chars, int len) {
   294 bool java_lang_String::equals(oop java_string, jchar* chars, int len) {
   295   assert(SharedSkipVerify ||
   295   assert(SharedSkipVerify ||
   296          java_string->klass() == SystemDictionary::string_klass(),
   296          java_string->klass() == SystemDictionary::String_klass(),
   297          "must be java_string");
   297          "must be java_string");
   298   typeArrayOop value  = java_lang_String::value(java_string);
   298   typeArrayOop value  = java_lang_String::value(java_string);
   299   int          offset = java_lang_String::offset(java_string);
   299   int          offset = java_lang_String::offset(java_string);
   300   int          length = java_lang_String::length(java_string);
   300   int          length = java_lang_String::length(java_string);
   301   if (length != len) {
   301   if (length != len) {
   309   return true;
   309   return true;
   310 }
   310 }
   311 
   311 
   312 void java_lang_String::print(Handle java_string, outputStream* st) {
   312 void java_lang_String::print(Handle java_string, outputStream* st) {
   313   oop          obj    = java_string();
   313   oop          obj    = java_string();
   314   assert(obj->klass() == SystemDictionary::string_klass(), "must be java_string");
   314   assert(obj->klass() == SystemDictionary::String_klass(), "must be java_string");
   315   typeArrayOop value  = java_lang_String::value(obj);
   315   typeArrayOop value  = java_lang_String::value(obj);
   316   int          offset = java_lang_String::offset(obj);
   316   int          offset = java_lang_String::offset(obj);
   317   int          length = java_lang_String::length(obj);
   317   int          length = java_lang_String::length(obj);
   318 
   318 
   319   int end = MIN2(length, 100);
   319   int end = MIN2(length, 100);
   337   // to support Class.getModifiers().  Instance classes recalculate
   337   // to support Class.getModifiers().  Instance classes recalculate
   338   // the cached flags after the class file is parsed, but before the
   338   // the cached flags after the class file is parsed, but before the
   339   // class is put into the system dictionary.
   339   // class is put into the system dictionary.
   340   int computed_modifiers = k->compute_modifier_flags(CHECK_0);
   340   int computed_modifiers = k->compute_modifier_flags(CHECK_0);
   341   k->set_modifier_flags(computed_modifiers);
   341   k->set_modifier_flags(computed_modifiers);
   342   if (SystemDictionary::class_klass_loaded()) {
   342   if (SystemDictionary::Class_klass_loaded()) {
   343     // Allocate mirror (java.lang.Class instance)
   343     // Allocate mirror (java.lang.Class instance)
   344     Handle mirror = instanceKlass::cast(SystemDictionary::class_klass())->allocate_permanent_instance(CHECK_0);
   344     Handle mirror = instanceKlass::cast(SystemDictionary::Class_klass())->allocate_permanent_instance(CHECK_0);
   345     // Setup indirections
   345     // Setup indirections
   346     mirror->obj_field_put(klass_offset,  k());
   346     mirror->obj_field_put(klass_offset,  k());
   347     k->set_java_mirror(mirror());
   347     k->set_java_mirror(mirror());
   348     // It might also have a component mirror.  This mirror must already exist.
   348     // It might also have a component mirror.  This mirror must already exist.
   349     if (k->oop_is_javaArray()) {
   349     if (k->oop_is_javaArray()) {
   376 
   376 
   377 
   377 
   378 oop java_lang_Class::create_basic_type_mirror(const char* basic_type_name, BasicType type, TRAPS) {
   378 oop java_lang_Class::create_basic_type_mirror(const char* basic_type_name, BasicType type, TRAPS) {
   379   // This should be improved by adding a field at the Java level or by
   379   // This should be improved by adding a field at the Java level or by
   380   // introducing a new VM klass (see comment in ClassFileParser)
   380   // introducing a new VM klass (see comment in ClassFileParser)
   381   oop java_class = instanceKlass::cast(SystemDictionary::class_klass())->allocate_permanent_instance(CHECK_0);
   381   oop java_class = instanceKlass::cast(SystemDictionary::Class_klass())->allocate_permanent_instance(CHECK_0);
   382   if (type != T_VOID) {
   382   if (type != T_VOID) {
   383     klassOop aklass = Universe::typeArrayKlassObj(type);
   383     klassOop aklass = Universe::typeArrayKlassObj(type);
   384     assert(aklass != NULL, "correct bootstrap");
   384     assert(aklass != NULL, "correct bootstrap");
   385     set_array_klass(java_class, aklass);
   385     set_array_klass(java_class, aklass);
   386   }
   386   }
   500 }
   500 }
   501 
   501 
   502 
   502 
   503 oop java_lang_Class::primitive_mirror(BasicType t) {
   503 oop java_lang_Class::primitive_mirror(BasicType t) {
   504   oop mirror = Universe::java_mirror(t);
   504   oop mirror = Universe::java_mirror(t);
   505   assert(mirror != NULL && mirror->is_a(SystemDictionary::class_klass()), "must be a Class");
   505   assert(mirror != NULL && mirror->is_a(SystemDictionary::Class_klass()), "must be a Class");
   506   assert(java_lang_Class::is_primitive(mirror), "must be primitive");
   506   assert(java_lang_Class::is_primitive(mirror), "must be primitive");
   507   return mirror;
   507   return mirror;
   508 }
   508 }
   509 
   509 
   510 bool java_lang_Class::offsets_computed = false;
   510 bool java_lang_Class::offsets_computed = false;
   513 
   513 
   514 void java_lang_Class::compute_offsets() {
   514 void java_lang_Class::compute_offsets() {
   515   assert(!offsets_computed, "offsets should be initialized only once");
   515   assert(!offsets_computed, "offsets should be initialized only once");
   516   offsets_computed = true;
   516   offsets_computed = true;
   517 
   517 
   518   klassOop k = SystemDictionary::class_klass();
   518   klassOop k = SystemDictionary::Class_klass();
   519   // The classRedefinedCount field is only present starting in 1.5,
   519   // The classRedefinedCount field is only present starting in 1.5,
   520   // so don't go fatal.
   520   // so don't go fatal.
   521   compute_optional_offset(classRedefinedCount_offset,
   521   compute_optional_offset(classRedefinedCount_offset,
   522     k, vmSymbols::classRedefinedCount_name(), vmSymbols::int_signature());
   522     k, vmSymbols::classRedefinedCount_name(), vmSymbols::int_signature());
   523 
   523 
   524   // The field indicating parallelCapable (parallelLockMap) is only present starting in 7,
   524   // The field indicating parallelCapable (parallelLockMap) is only present starting in 7,
   525   klassOop k1 = SystemDictionary::classloader_klass();
   525   klassOop k1 = SystemDictionary::ClassLoader_klass();
   526   compute_optional_offset(parallelCapable_offset,
   526   compute_optional_offset(parallelCapable_offset,
   527     k1, vmSymbols::parallelCapable_name(), vmSymbols::concurrenthashmap_signature());
   527     k1, vmSymbols::parallelCapable_name(), vmSymbols::concurrenthashmap_signature());
   528 }
   528 }
   529 
   529 
   530 // For class loader classes, parallelCapable defined
   530 // For class loader classes, parallelCapable defined
   586 
   586 
   587 
   587 
   588 void java_lang_Thread::compute_offsets() {
   588 void java_lang_Thread::compute_offsets() {
   589   assert(_group_offset == 0, "offsets should be initialized only once");
   589   assert(_group_offset == 0, "offsets should be initialized only once");
   590 
   590 
   591   klassOop k = SystemDictionary::thread_klass();
   591   klassOop k = SystemDictionary::Thread_klass();
   592   compute_offset(_name_offset,      k, vmSymbols::name_name(),      vmSymbols::char_array_signature());
   592   compute_offset(_name_offset,      k, vmSymbols::name_name(),      vmSymbols::char_array_signature());
   593   compute_offset(_group_offset,     k, vmSymbols::group_name(),     vmSymbols::threadgroup_signature());
   593   compute_offset(_group_offset,     k, vmSymbols::group_name(),     vmSymbols::threadgroup_signature());
   594   compute_offset(_contextClassLoader_offset, k, vmSymbols::contextClassLoader_name(), vmSymbols::classloader_signature());
   594   compute_offset(_contextClassLoader_offset, k, vmSymbols::contextClassLoader_name(), vmSymbols::classloader_signature());
   595   compute_offset(_inheritedAccessControlContext_offset, k, vmSymbols::inheritedAccessControlContext_name(), vmSymbols::accesscontrolcontext_signature());
   595   compute_offset(_inheritedAccessControlContext_offset, k, vmSymbols::inheritedAccessControlContext_name(), vmSymbols::accesscontrolcontext_signature());
   596   compute_offset(_priority_offset,  k, vmSymbols::priority_name(),  vmSymbols::int_signature());
   596   compute_offset(_priority_offset,  k, vmSymbols::priority_name(),  vmSymbols::int_signature());
   845 }
   845 }
   846 
   846 
   847 void java_lang_ThreadGroup::compute_offsets() {
   847 void java_lang_ThreadGroup::compute_offsets() {
   848   assert(_parent_offset == 0, "offsets should be initialized only once");
   848   assert(_parent_offset == 0, "offsets should be initialized only once");
   849 
   849 
   850   klassOop k = SystemDictionary::threadGroup_klass();
   850   klassOop k = SystemDictionary::ThreadGroup_klass();
   851 
   851 
   852   compute_offset(_parent_offset,      k, vmSymbols::parent_name(),      vmSymbols::threadgroup_signature());
   852   compute_offset(_parent_offset,      k, vmSymbols::parent_name(),      vmSymbols::threadgroup_signature());
   853   compute_offset(_name_offset,        k, vmSymbols::name_name(),        vmSymbols::string_signature());
   853   compute_offset(_name_offset,        k, vmSymbols::name_name(),        vmSymbols::string_signature());
   854   compute_offset(_threads_offset,     k, vmSymbols::threads_name(),     vmSymbols::thread_array_signature());
   854   compute_offset(_threads_offset,     k, vmSymbols::threads_name(),     vmSymbols::thread_array_signature());
   855   compute_offset(_groups_offset,      k, vmSymbols::groups_name(),      vmSymbols::threadgroup_array_signature());
   855   compute_offset(_groups_offset,      k, vmSymbols::groups_name(),      vmSymbols::threadgroup_array_signature());
  1342   // Fill in stack trace into preallocated backtrace (no GC)
  1342   // Fill in stack trace into preallocated backtrace (no GC)
  1343 
  1343 
  1344   // No-op if stack trace is disabled
  1344   // No-op if stack trace is disabled
  1345   if (!StackTraceInThrowable) return;
  1345   if (!StackTraceInThrowable) return;
  1346 
  1346 
  1347   assert(throwable->is_a(SystemDictionary::throwable_klass()), "sanity check");
  1347   assert(throwable->is_a(SystemDictionary::Throwable_klass()), "sanity check");
  1348 
  1348 
  1349   oop backtrace = java_lang_Throwable::backtrace(throwable());
  1349   oop backtrace = java_lang_Throwable::backtrace(throwable());
  1350   assert(backtrace != NULL, "backtrace not preallocated");
  1350   assert(backtrace != NULL, "backtrace not preallocated");
  1351 
  1351 
  1352   oop m = objArrayOop(backtrace)->obj_at(trace_methods_offset);
  1352   oop m = objArrayOop(backtrace)->obj_at(trace_methods_offset);
  1447 oop java_lang_StackTraceElement::create(methodHandle method, int bci, TRAPS) {
  1447 oop java_lang_StackTraceElement::create(methodHandle method, int bci, TRAPS) {
  1448   // SystemDictionary::stackTraceElement_klass() will be null for pre-1.4 JDKs
  1448   // SystemDictionary::stackTraceElement_klass() will be null for pre-1.4 JDKs
  1449   assert(JDK_Version::is_gte_jdk14x_version(), "should only be called in >= 1.4");
  1449   assert(JDK_Version::is_gte_jdk14x_version(), "should only be called in >= 1.4");
  1450 
  1450 
  1451   // Allocate java.lang.StackTraceElement instance
  1451   // Allocate java.lang.StackTraceElement instance
  1452   klassOop k = SystemDictionary::stackTraceElement_klass();
  1452   klassOop k = SystemDictionary::StackTraceElement_klass();
  1453   assert(k != NULL, "must be loaded in 1.4+");
  1453   assert(k != NULL, "must be loaded in 1.4+");
  1454   instanceKlassHandle ik (THREAD, k);
  1454   instanceKlassHandle ik (THREAD, k);
  1455   if (ik->should_be_initialized()) {
  1455   if (ik->should_be_initialized()) {
  1456     ik->initialize(CHECK_0);
  1456     ik->initialize(CHECK_0);
  1457   }
  1457   }
  1485   return element();
  1485   return element();
  1486 }
  1486 }
  1487 
  1487 
  1488 
  1488 
  1489 void java_lang_reflect_AccessibleObject::compute_offsets() {
  1489 void java_lang_reflect_AccessibleObject::compute_offsets() {
  1490   klassOop k = SystemDictionary::reflect_accessible_object_klass();
  1490   klassOop k = SystemDictionary::reflect_AccessibleObject_klass();
  1491   compute_offset(override_offset, k, vmSymbols::override_name(), vmSymbols::bool_signature());
  1491   compute_offset(override_offset, k, vmSymbols::override_name(), vmSymbols::bool_signature());
  1492 }
  1492 }
  1493 
  1493 
  1494 jboolean java_lang_reflect_AccessibleObject::override(oop reflect) {
  1494 jboolean java_lang_reflect_AccessibleObject::override(oop reflect) {
  1495   assert(Universe::is_fully_initialized(), "Need to find another solution to the reflection problem");
  1495   assert(Universe::is_fully_initialized(), "Need to find another solution to the reflection problem");
  1500   assert(Universe::is_fully_initialized(), "Need to find another solution to the reflection problem");
  1500   assert(Universe::is_fully_initialized(), "Need to find another solution to the reflection problem");
  1501   reflect->bool_field_put(override_offset, (int) value);
  1501   reflect->bool_field_put(override_offset, (int) value);
  1502 }
  1502 }
  1503 
  1503 
  1504 void java_lang_reflect_Method::compute_offsets() {
  1504 void java_lang_reflect_Method::compute_offsets() {
  1505   klassOop k = SystemDictionary::reflect_method_klass();
  1505   klassOop k = SystemDictionary::reflect_Method_klass();
  1506   compute_offset(clazz_offset,          k, vmSymbols::clazz_name(),          vmSymbols::class_signature());
  1506   compute_offset(clazz_offset,          k, vmSymbols::clazz_name(),          vmSymbols::class_signature());
  1507   compute_offset(name_offset,           k, vmSymbols::name_name(),           vmSymbols::string_signature());
  1507   compute_offset(name_offset,           k, vmSymbols::name_name(),           vmSymbols::string_signature());
  1508   compute_offset(returnType_offset,     k, vmSymbols::returnType_name(),     vmSymbols::class_signature());
  1508   compute_offset(returnType_offset,     k, vmSymbols::returnType_name(),     vmSymbols::class_signature());
  1509   compute_offset(parameterTypes_offset, k, vmSymbols::parameterTypes_name(), vmSymbols::class_array_signature());
  1509   compute_offset(parameterTypes_offset, k, vmSymbols::parameterTypes_name(), vmSymbols::class_array_signature());
  1510   compute_offset(exceptionTypes_offset, k, vmSymbols::exceptionTypes_name(), vmSymbols::class_array_signature());
  1510   compute_offset(exceptionTypes_offset, k, vmSymbols::exceptionTypes_name(), vmSymbols::class_array_signature());
  1521   compute_optional_offset(annotation_default_offset,    k, vmSymbols::annotation_default_name(),    vmSymbols::byte_array_signature());
  1521   compute_optional_offset(annotation_default_offset,    k, vmSymbols::annotation_default_name(),    vmSymbols::byte_array_signature());
  1522 }
  1522 }
  1523 
  1523 
  1524 Handle java_lang_reflect_Method::create(TRAPS) {
  1524 Handle java_lang_reflect_Method::create(TRAPS) {
  1525   assert(Universe::is_fully_initialized(), "Need to find another solution to the reflection problem");
  1525   assert(Universe::is_fully_initialized(), "Need to find another solution to the reflection problem");
  1526   klassOop klass = SystemDictionary::reflect_method_klass();
  1526   klassOop klass = SystemDictionary::reflect_Method_klass();
  1527   // This class is eagerly initialized during VM initialization, since we keep a refence
  1527   // This class is eagerly initialized during VM initialization, since we keep a refence
  1528   // to one of the methods
  1528   // to one of the methods
  1529   assert(instanceKlass::cast(klass)->is_initialized(), "must be initialized");
  1529   assert(instanceKlass::cast(klass)->is_initialized(), "must be initialized");
  1530   return instanceKlass::cast(klass)->allocate_instance_handle(CHECK_NH);
  1530   return instanceKlass::cast(klass)->allocate_instance_handle(CHECK_NH);
  1531 }
  1531 }
  1663   assert(has_annotation_default_field(), "annotation default field must be present");
  1663   assert(has_annotation_default_field(), "annotation default field must be present");
  1664   method->obj_field_put(annotation_default_offset, value);
  1664   method->obj_field_put(annotation_default_offset, value);
  1665 }
  1665 }
  1666 
  1666 
  1667 void java_lang_reflect_Constructor::compute_offsets() {
  1667 void java_lang_reflect_Constructor::compute_offsets() {
  1668   klassOop k = SystemDictionary::reflect_constructor_klass();
  1668   klassOop k = SystemDictionary::reflect_Constructor_klass();
  1669   compute_offset(clazz_offset,          k, vmSymbols::clazz_name(),          vmSymbols::class_signature());
  1669   compute_offset(clazz_offset,          k, vmSymbols::clazz_name(),          vmSymbols::class_signature());
  1670   compute_offset(parameterTypes_offset, k, vmSymbols::parameterTypes_name(), vmSymbols::class_array_signature());
  1670   compute_offset(parameterTypes_offset, k, vmSymbols::parameterTypes_name(), vmSymbols::class_array_signature());
  1671   compute_offset(exceptionTypes_offset, k, vmSymbols::exceptionTypes_name(), vmSymbols::class_array_signature());
  1671   compute_offset(exceptionTypes_offset, k, vmSymbols::exceptionTypes_name(), vmSymbols::class_array_signature());
  1672   compute_offset(slot_offset,           k, vmSymbols::slot_name(),           vmSymbols::int_signature());
  1672   compute_offset(slot_offset,           k, vmSymbols::slot_name(),           vmSymbols::int_signature());
  1673   compute_offset(modifiers_offset,      k, vmSymbols::modifiers_name(),      vmSymbols::int_signature());
  1673   compute_offset(modifiers_offset,      k, vmSymbols::modifiers_name(),      vmSymbols::int_signature());
  1787   assert(has_parameter_annotations_field(), "parameter annotations field must be present");
  1787   assert(has_parameter_annotations_field(), "parameter annotations field must be present");
  1788   method->obj_field_put(parameter_annotations_offset, value);
  1788   method->obj_field_put(parameter_annotations_offset, value);
  1789 }
  1789 }
  1790 
  1790 
  1791 void java_lang_reflect_Field::compute_offsets() {
  1791 void java_lang_reflect_Field::compute_offsets() {
  1792   klassOop k = SystemDictionary::reflect_field_klass();
  1792   klassOop k = SystemDictionary::reflect_Field_klass();
  1793   compute_offset(clazz_offset,     k, vmSymbols::clazz_name(),     vmSymbols::class_signature());
  1793   compute_offset(clazz_offset,     k, vmSymbols::clazz_name(),     vmSymbols::class_signature());
  1794   compute_offset(name_offset,      k, vmSymbols::name_name(),      vmSymbols::string_signature());
  1794   compute_offset(name_offset,      k, vmSymbols::name_name(),      vmSymbols::string_signature());
  1795   compute_offset(type_offset,      k, vmSymbols::type_name(),      vmSymbols::class_signature());
  1795   compute_offset(type_offset,      k, vmSymbols::type_name(),      vmSymbols::class_signature());
  1796   compute_offset(slot_offset,      k, vmSymbols::slot_name(),      vmSymbols::int_signature());
  1796   compute_offset(slot_offset,      k, vmSymbols::slot_name(),      vmSymbols::int_signature());
  1797   compute_offset(modifiers_offset, k, vmSymbols::modifiers_name(), vmSymbols::int_signature());
  1797   compute_offset(modifiers_offset, k, vmSymbols::modifiers_name(), vmSymbols::int_signature());
  1894   field->obj_field_put(annotations_offset, value);
  1894   field->obj_field_put(annotations_offset, value);
  1895 }
  1895 }
  1896 
  1896 
  1897 
  1897 
  1898 void sun_reflect_ConstantPool::compute_offsets() {
  1898 void sun_reflect_ConstantPool::compute_offsets() {
  1899   klassOop k = SystemDictionary::reflect_constant_pool_klass();
  1899   klassOop k = SystemDictionary::reflect_ConstantPool_klass();
  1900   // This null test can be removed post beta
  1900   // This null test can be removed post beta
  1901   if (k != NULL) {
  1901   if (k != NULL) {
  1902     compute_offset(_cp_oop_offset, k, vmSymbols::constantPoolOop_name(), vmSymbols::object_signature());
  1902     compute_offset(_cp_oop_offset, k, vmSymbols::constantPoolOop_name(), vmSymbols::object_signature());
  1903   }
  1903   }
  1904 }
  1904 }
  1905 
  1905 
  1906 
  1906 
  1907 Handle sun_reflect_ConstantPool::create(TRAPS) {
  1907 Handle sun_reflect_ConstantPool::create(TRAPS) {
  1908   assert(Universe::is_fully_initialized(), "Need to find another solution to the reflection problem");
  1908   assert(Universe::is_fully_initialized(), "Need to find another solution to the reflection problem");
  1909   klassOop k = SystemDictionary::reflect_constant_pool_klass();
  1909   klassOop k = SystemDictionary::reflect_ConstantPool_klass();
  1910   instanceKlassHandle klass (THREAD, k);
  1910   instanceKlassHandle klass (THREAD, k);
  1911   // Ensure it is initialized
  1911   // Ensure it is initialized
  1912   klass->initialize(CHECK_NH);
  1912   klass->initialize(CHECK_NH);
  1913   return klass->allocate_instance_handle(CHECK_NH);
  1913   return klass->allocate_instance_handle(CHECK_NH);
  1914 }
  1914 }
  1924   assert(Universe::is_fully_initialized(), "Need to find another solution to the reflection problem");
  1924   assert(Universe::is_fully_initialized(), "Need to find another solution to the reflection problem");
  1925   reflect->obj_field_put(_cp_oop_offset, value);
  1925   reflect->obj_field_put(_cp_oop_offset, value);
  1926 }
  1926 }
  1927 
  1927 
  1928 void sun_reflect_UnsafeStaticFieldAccessorImpl::compute_offsets() {
  1928 void sun_reflect_UnsafeStaticFieldAccessorImpl::compute_offsets() {
  1929   klassOop k = SystemDictionary::reflect_unsafe_static_field_accessor_impl_klass();
  1929   klassOop k = SystemDictionary::reflect_UnsafeStaticFieldAccessorImpl_klass();
  1930   // This null test can be removed post beta
  1930   // This null test can be removed post beta
  1931   if (k != NULL) {
  1931   if (k != NULL) {
  1932     compute_offset(_base_offset, k,
  1932     compute_offset(_base_offset, k,
  1933                    vmSymbols::base_name(), vmSymbols::object_signature());
  1933                    vmSymbols::base_name(), vmSymbols::object_signature());
  1934   }
  1934   }
  2070 }
  2070 }
  2071 
  2071 
  2072 
  2072 
  2073 // Support for java_lang_ref_Reference
  2073 // Support for java_lang_ref_Reference
  2074 oop java_lang_ref_Reference::pending_list_lock() {
  2074 oop java_lang_ref_Reference::pending_list_lock() {
  2075   instanceKlass* ik = instanceKlass::cast(SystemDictionary::reference_klass());
  2075   instanceKlass* ik = instanceKlass::cast(SystemDictionary::Reference_klass());
  2076   char *addr = (((char *)ik->start_of_static_fields()) + static_lock_offset);
  2076   char *addr = (((char *)ik->start_of_static_fields()) + static_lock_offset);
  2077   if (UseCompressedOops) {
  2077   if (UseCompressedOops) {
  2078     return oopDesc::load_decode_heap_oop((narrowOop *)addr);
  2078     return oopDesc::load_decode_heap_oop((narrowOop *)addr);
  2079   } else {
  2079   } else {
  2080     return oopDesc::load_decode_heap_oop((oop*)addr);
  2080     return oopDesc::load_decode_heap_oop((oop*)addr);
  2081   }
  2081   }
  2082 }
  2082 }
  2083 
  2083 
  2084 HeapWord *java_lang_ref_Reference::pending_list_addr() {
  2084 HeapWord *java_lang_ref_Reference::pending_list_addr() {
  2085   instanceKlass* ik = instanceKlass::cast(SystemDictionary::reference_klass());
  2085   instanceKlass* ik = instanceKlass::cast(SystemDictionary::Reference_klass());
  2086   char *addr = (((char *)ik->start_of_static_fields()) + static_pending_offset);
  2086   char *addr = (((char *)ik->start_of_static_fields()) + static_pending_offset);
  2087   // XXX This might not be HeapWord aligned, almost rather be char *.
  2087   // XXX This might not be HeapWord aligned, almost rather be char *.
  2088   return (HeapWord*)addr;
  2088   return (HeapWord*)addr;
  2089 }
  2089 }
  2090 
  2090 
  2103 jlong java_lang_ref_SoftReference::timestamp(oop ref) {
  2103 jlong java_lang_ref_SoftReference::timestamp(oop ref) {
  2104   return ref->long_field(timestamp_offset);
  2104   return ref->long_field(timestamp_offset);
  2105 }
  2105 }
  2106 
  2106 
  2107 jlong java_lang_ref_SoftReference::clock() {
  2107 jlong java_lang_ref_SoftReference::clock() {
  2108   instanceKlass* ik = instanceKlass::cast(SystemDictionary::soft_reference_klass());
  2108   instanceKlass* ik = instanceKlass::cast(SystemDictionary::SoftReference_klass());
  2109   int offset = ik->offset_of_static_fields() + static_clock_offset;
  2109   int offset = ik->offset_of_static_fields() + static_clock_offset;
  2110 
  2110 
  2111   return SystemDictionary::soft_reference_klass()->long_field(offset);
  2111   return SystemDictionary::SoftReference_klass()->long_field(offset);
  2112 }
  2112 }
  2113 
  2113 
  2114 void java_lang_ref_SoftReference::set_clock(jlong value) {
  2114 void java_lang_ref_SoftReference::set_clock(jlong value) {
  2115   instanceKlass* ik = instanceKlass::cast(SystemDictionary::soft_reference_klass());
  2115   instanceKlass* ik = instanceKlass::cast(SystemDictionary::SoftReference_klass());
  2116   int offset = ik->offset_of_static_fields() + static_clock_offset;
  2116   int offset = ik->offset_of_static_fields() + static_clock_offset;
  2117 
  2117 
  2118   SystemDictionary::soft_reference_klass()->long_field_put(offset, value);
  2118   SystemDictionary::SoftReference_klass()->long_field_put(offset, value);
  2119 }
  2119 }
  2120 
  2120 
  2121 
  2121 
  2122 // Support for java_dyn_MethodHandle
  2122 // Support for java_dyn_MethodHandle
  2123 
  2123 
  2536   if (loader != NULL) {
  2536   if (loader != NULL) {
  2537     // See whether this is one of the class loaders associated with
  2537     // See whether this is one of the class loaders associated with
  2538     // the generated bytecodes for reflection, and if so, "magically"
  2538     // the generated bytecodes for reflection, and if so, "magically"
  2539     // delegate to its parent to prevent class loading from occurring
  2539     // delegate to its parent to prevent class loading from occurring
  2540     // in places where applications using reflection didn't expect it.
  2540     // in places where applications using reflection didn't expect it.
  2541     klassOop delegating_cl_class = SystemDictionary::reflect_delegating_classloader_klass();
  2541     klassOop delegating_cl_class = SystemDictionary::reflect_DelegatingClassLoader_klass();
  2542     // This might be null in non-1.4 JDKs
  2542     // This might be null in non-1.4 JDKs
  2543     if (delegating_cl_class != NULL && loader->is_a(delegating_cl_class)) {
  2543     if (delegating_cl_class != NULL && loader->is_a(delegating_cl_class)) {
  2544       return parent(loader);
  2544       return parent(loader);
  2545     }
  2545     }
  2546   }
  2546   }
  2551 // Support for java_lang_System
  2551 // Support for java_lang_System
  2552 
  2552 
  2553 void java_lang_System::compute_offsets() {
  2553 void java_lang_System::compute_offsets() {
  2554   assert(offset_of_static_fields == 0, "offsets should be initialized only once");
  2554   assert(offset_of_static_fields == 0, "offsets should be initialized only once");
  2555 
  2555 
  2556   instanceKlass* ik = instanceKlass::cast(SystemDictionary::system_klass());
  2556   instanceKlass* ik = instanceKlass::cast(SystemDictionary::System_klass());
  2557   offset_of_static_fields = ik->offset_of_static_fields();
  2557   offset_of_static_fields = ik->offset_of_static_fields();
  2558 }
  2558 }
  2559 
  2559 
  2560 int java_lang_System::in_offset_in_bytes() {
  2560 int java_lang_System::in_offset_in_bytes() {
  2561   return (offset_of_static_fields + static_in_offset);
  2561   return (offset_of_static_fields + static_in_offset);