hotspot/src/share/vm/classfile/javaClasses.cpp
changeset 44520 0553e129e0ec
parent 43929 9a572e758c9b
child 46388 d7a164ad6b7f
equal deleted inserted replaced
44471:7e8e5ceecf99 44520:0553e129e0ec
   771 
   771 
   772   // Initialize static fields
   772   // Initialize static fields
   773   InstanceKlass::cast(k())->do_local_static_fields(&initialize_static_field, mirror, CHECK);
   773   InstanceKlass::cast(k())->do_local_static_fields(&initialize_static_field, mirror, CHECK);
   774 }
   774 }
   775 
   775 
   776 // Set the java.lang.reflect.Module module field in the java_lang_Class mirror
   776 // Set the java.lang.Module module field in the java_lang_Class mirror
   777 void java_lang_Class::set_mirror_module_field(KlassHandle k, Handle mirror, Handle module, TRAPS) {
   777 void java_lang_Class::set_mirror_module_field(KlassHandle k, Handle mirror, Handle module, TRAPS) {
   778   if (module.is_null()) {
   778   if (module.is_null()) {
   779     // During startup, the module may be NULL only if java.base has not been defined yet.
   779     // During startup, the module may be NULL only if java.base has not been defined yet.
   780     // Put the class on the fixup_module_list to patch later when the java.lang.reflect.Module
   780     // Put the class on the fixup_module_list to patch later when the java.lang.Module
   781     // for java.base is known.
   781     // for java.base is known.
   782     assert(!Universe::is_module_initialized(), "Incorrect java.lang.reflect.Module pre module system initialization");
   782     assert(!Universe::is_module_initialized(), "Incorrect java.lang.Module pre module system initialization");
   783 
   783 
   784     bool javabase_was_defined = false;
   784     bool javabase_was_defined = false;
   785     {
   785     {
   786       MutexLocker m1(Module_lock, THREAD);
   786       MutexLocker m1(Module_lock, THREAD);
   787       // Keep list of classes needing java.base module fixup
   787       // Keep list of classes needing java.base module fixup
   808     }
   808     }
   809   } else {
   809   } else {
   810     assert(Universe::is_module_initialized() ||
   810     assert(Universe::is_module_initialized() ||
   811            (ModuleEntryTable::javabase_defined() &&
   811            (ModuleEntryTable::javabase_defined() &&
   812             (module() == JNIHandles::resolve(ModuleEntryTable::javabase_moduleEntry()->module()))),
   812             (module() == JNIHandles::resolve(ModuleEntryTable::javabase_moduleEntry()->module()))),
   813            "Incorrect java.lang.reflect.Module specification while creating mirror");
   813            "Incorrect java.lang.Module specification while creating mirror");
   814     set_module(mirror(), module());
   814     set_module(mirror(), module());
   815   }
   815   }
   816 }
   816 }
   817 
   817 
   818 void java_lang_Class::create_mirror(KlassHandle k, Handle class_loader,
   818 void java_lang_Class::create_mirror(KlassHandle k, Handle class_loader,
  2802   assert(Universe::is_fully_initialized(), "Need to find another solution to the reflection problem");
  2802   assert(Universe::is_fully_initialized(), "Need to find another solution to the reflection problem");
  2803   param->obj_field_put(executable_offset, value);
  2803   param->obj_field_put(executable_offset, value);
  2804 }
  2804 }
  2805 
  2805 
  2806 
  2806 
  2807 int java_lang_reflect_Module::loader_offset;
  2807 int java_lang_Module::loader_offset;
  2808 int java_lang_reflect_Module::name_offset;
  2808 int java_lang_Module::name_offset;
  2809 int java_lang_reflect_Module::_module_entry_offset = -1;
  2809 int java_lang_Module::_module_entry_offset = -1;
  2810 
  2810 
  2811 Handle java_lang_reflect_Module::create(Handle loader, Handle module_name, TRAPS) {
  2811 Handle java_lang_Module::create(Handle loader, Handle module_name, TRAPS) {
  2812   assert(Universe::is_fully_initialized(), "Need to find another solution to the reflection problem");
  2812   assert(Universe::is_fully_initialized(), "Need to find another solution to the reflection problem");
  2813 
  2813 
  2814   Symbol* name = vmSymbols::java_lang_reflect_Module();
  2814   Symbol* name = vmSymbols::java_lang_Module();
  2815   Klass* k = SystemDictionary::resolve_or_fail(name, true, CHECK_NH);
  2815   Klass* k = SystemDictionary::resolve_or_fail(name, true, CHECK_NH);
  2816   instanceKlassHandle klass (THREAD, k);
  2816   instanceKlassHandle klass (THREAD, k);
  2817 
  2817 
  2818   Handle jlrmh = klass->allocate_instance_handle(CHECK_NH);
  2818   Handle jlmh = klass->allocate_instance_handle(CHECK_NH);
  2819   JavaValue result(T_VOID);
  2819   JavaValue result(T_VOID);
  2820   JavaCalls::call_special(&result, jlrmh, KlassHandle(THREAD, klass()),
  2820   JavaCalls::call_special(&result, jlmh, KlassHandle(THREAD, klass()),
  2821                           vmSymbols::object_initializer_name(),
  2821                           vmSymbols::object_initializer_name(),
  2822                           vmSymbols::java_lang_reflect_module_init_signature(),
  2822                           vmSymbols::java_lang_module_init_signature(),
  2823                           loader, module_name, CHECK_NH);
  2823                           loader, module_name, CHECK_NH);
  2824   return jlrmh;
  2824   return jlmh;
  2825 }
  2825 }
  2826 
  2826 
  2827 void java_lang_reflect_Module::compute_offsets() {
  2827 void java_lang_Module::compute_offsets() {
  2828   Klass* k = SystemDictionary::reflect_Module_klass();
  2828   Klass* k = SystemDictionary::Module_klass();
  2829   if(NULL != k) {
  2829   if(NULL != k) {
  2830     compute_offset(loader_offset,  k, vmSymbols::loader_name(),  vmSymbols::classloader_signature());
  2830     compute_offset(loader_offset,  k, vmSymbols::loader_name(),  vmSymbols::classloader_signature());
  2831     compute_offset(name_offset,    k, vmSymbols::name_name(),    vmSymbols::string_signature());
  2831     compute_offset(name_offset,    k, vmSymbols::name_name(),    vmSymbols::string_signature());
  2832     MODULE_INJECTED_FIELDS(INJECTED_FIELD_COMPUTE_OFFSET);
  2832     MODULE_INJECTED_FIELDS(INJECTED_FIELD_COMPUTE_OFFSET);
  2833   }
  2833   }
  2834 }
  2834 }
  2835 
  2835 
  2836 
  2836 
  2837 oop java_lang_reflect_Module::loader(oop module) {
  2837 oop java_lang_Module::loader(oop module) {
  2838   assert(Universe::is_fully_initialized(), "Need to find another solution to the reflection problem");
  2838   assert(Universe::is_fully_initialized(), "Need to find another solution to the reflection problem");
  2839   return module->obj_field(loader_offset);
  2839   return module->obj_field(loader_offset);
  2840 }
  2840 }
  2841 
  2841 
  2842 void java_lang_reflect_Module::set_loader(oop module, oop value) {
  2842 void java_lang_Module::set_loader(oop module, oop value) {
  2843   assert(Universe::is_fully_initialized(), "Need to find another solution to the reflection problem");
  2843   assert(Universe::is_fully_initialized(), "Need to find another solution to the reflection problem");
  2844   module->obj_field_put(loader_offset, value);
  2844   module->obj_field_put(loader_offset, value);
  2845 }
  2845 }
  2846 
  2846 
  2847 oop java_lang_reflect_Module::name(oop module) {
  2847 oop java_lang_Module::name(oop module) {
  2848   assert(Universe::is_fully_initialized(), "Need to find another solution to the reflection problem");
  2848   assert(Universe::is_fully_initialized(), "Need to find another solution to the reflection problem");
  2849   return module->obj_field(name_offset);
  2849   return module->obj_field(name_offset);
  2850 }
  2850 }
  2851 
  2851 
  2852 void java_lang_reflect_Module::set_name(oop module, oop value) {
  2852 void java_lang_Module::set_name(oop module, oop value) {
  2853   assert(Universe::is_fully_initialized(), "Need to find another solution to the reflection problem");
  2853   assert(Universe::is_fully_initialized(), "Need to find another solution to the reflection problem");
  2854   module->obj_field_put(name_offset, value);
  2854   module->obj_field_put(name_offset, value);
  2855 }
  2855 }
  2856 
  2856 
  2857 ModuleEntry* java_lang_reflect_Module::module_entry(oop module, TRAPS) {
  2857 ModuleEntry* java_lang_Module::module_entry(oop module, TRAPS) {
  2858   assert(_module_entry_offset != -1, "Uninitialized module_entry_offset");
  2858   assert(_module_entry_offset != -1, "Uninitialized module_entry_offset");
  2859   assert(module != NULL, "module can't be null");
  2859   assert(module != NULL, "module can't be null");
  2860   assert(module->is_oop(), "module must be oop");
  2860   assert(module->is_oop(), "module must be oop");
  2861 
  2861 
  2862   ModuleEntry* module_entry = (ModuleEntry*)module->address_field(_module_entry_offset);
  2862   ModuleEntry* module_entry = (ModuleEntry*)module->address_field(_module_entry_offset);
  2863   if (module_entry == NULL) {
  2863   if (module_entry == NULL) {
  2864     // If the inject field containing the ModuleEntry* is null then return the
  2864     // If the inject field containing the ModuleEntry* is null then return the
  2865     // class loader's unnamed module.
  2865     // class loader's unnamed module.
  2866     oop loader = java_lang_reflect_Module::loader(module);
  2866     oop loader = java_lang_Module::loader(module);
  2867     Handle h_loader = Handle(THREAD, loader);
  2867     Handle h_loader = Handle(THREAD, loader);
  2868     ClassLoaderData* loader_cld = SystemDictionary::register_loader(h_loader, CHECK_NULL);
  2868     ClassLoaderData* loader_cld = SystemDictionary::register_loader(h_loader, CHECK_NULL);
  2869     return loader_cld->modules()->unnamed_module();
  2869     return loader_cld->modules()->unnamed_module();
  2870   }
  2870   }
  2871   return module_entry;
  2871   return module_entry;
  2872 }
  2872 }
  2873 
  2873 
  2874 void java_lang_reflect_Module::set_module_entry(oop module, ModuleEntry* module_entry) {
  2874 void java_lang_Module::set_module_entry(oop module, ModuleEntry* module_entry) {
  2875   assert(_module_entry_offset != -1, "Uninitialized module_entry_offset");
  2875   assert(_module_entry_offset != -1, "Uninitialized module_entry_offset");
  2876   assert(module != NULL, "module can't be null");
  2876   assert(module != NULL, "module can't be null");
  2877   assert(module->is_oop(), "module must be oop");
  2877   assert(module->is_oop(), "module must be oop");
  2878   module->address_field_put(_module_entry_offset, (address)module_entry);
  2878   module->address_field_put(_module_entry_offset, (address)module_entry);
  2879 }
  2879 }
  3875   java_lang_reflect_Field::compute_offsets();
  3875   java_lang_reflect_Field::compute_offsets();
  3876   java_nio_Buffer::compute_offsets();
  3876   java_nio_Buffer::compute_offsets();
  3877   reflect_ConstantPool::compute_offsets();
  3877   reflect_ConstantPool::compute_offsets();
  3878   reflect_UnsafeStaticFieldAccessorImpl::compute_offsets();
  3878   reflect_UnsafeStaticFieldAccessorImpl::compute_offsets();
  3879   java_lang_reflect_Parameter::compute_offsets();
  3879   java_lang_reflect_Parameter::compute_offsets();
  3880   java_lang_reflect_Module::compute_offsets();
  3880   java_lang_Module::compute_offsets();
  3881   java_lang_StackFrameInfo::compute_offsets();
  3881   java_lang_StackFrameInfo::compute_offsets();
  3882   java_lang_LiveStackFrameInfo::compute_offsets();
  3882   java_lang_LiveStackFrameInfo::compute_offsets();
  3883 
  3883 
  3884   // generated interpreter code wants to know about the offsets we just computed:
  3884   // generated interpreter code wants to know about the offsets we just computed:
  3885   AbstractAssembler::update_delayed_values();
  3885   AbstractAssembler::update_delayed_values();