< prev index next >

src/share/vm/classfile/javaClasses.cpp

Print this page




2950   objArrayOop pts = ptypes(mt);
2951   int count = pts->length();
2952   int slots = 0;
2953   for (int i = 0; i < count; i++) {
2954     BasicType bt = java_lang_Class::as_BasicType(pts->obj_at(i));
2955     slots += type2size[bt];
2956   }
2957   return slots;
2958 }
2959 
2960 int java_lang_invoke_MethodType::rtype_slot_count(oop mt) {
2961   BasicType bt = java_lang_Class::as_BasicType(rtype(mt));
2962   return type2size[bt];
2963 }
2964 
2965 
2966 // Support for java_lang_invoke_CallSite
2967 
2968 int java_lang_invoke_CallSite::_target_offset;
2969 int java_lang_invoke_CallSite::_context_offset;
2970 int java_lang_invoke_CallSite::_default_context_offset;
2971 
2972 void java_lang_invoke_CallSite::compute_offsets() {
2973   Klass* k = SystemDictionary::CallSite_klass();
2974   if (k != NULL) {
2975     compute_offset(_target_offset, k, vmSymbols::target_name(), vmSymbols::java_lang_invoke_MethodHandle_signature());
2976     compute_offset(_context_offset, k, vmSymbols::context_name(), vmSymbols::sun_misc_Cleaner_signature());
2977     compute_offset(_default_context_offset, k,
2978                    vmSymbols::DEFAULT_CONTEXT_name(), vmSymbols::sun_misc_Cleaner_signature(),
2979                    /*is_static=*/true, /*allow_super=*/false);
2980   }
2981 }
2982 
2983 oop java_lang_invoke_CallSite::context_volatile(oop call_site) {
2984   assert(java_lang_invoke_CallSite::is_instance(call_site), "");
2985 
2986   oop dep_oop = call_site->obj_field_volatile(_context_offset);
2987   return dep_oop;
2988 }
2989 
2990 void java_lang_invoke_CallSite::set_context_volatile(oop call_site, oop context) {
2991   assert(java_lang_invoke_CallSite::is_instance(call_site), "");
2992   call_site->obj_field_put_volatile(_context_offset, context);






2993 }
2994 
2995 bool java_lang_invoke_CallSite::set_context_cas(oop call_site, oop context, oop expected) {
2996   assert(java_lang_invoke_CallSite::is_instance(call_site), "");
2997   HeapWord* context_addr = call_site->obj_field_addr<HeapWord>(_context_offset);
2998   oop res = oopDesc::atomic_compare_exchange_oop(context, context_addr, expected, true);
2999   bool success = (res == expected);
3000   if (success) {
3001     update_barrier_set((void*)context_addr, context);
3002   }
3003   return success;
3004 }
3005 
3006 oop java_lang_invoke_CallSite::default_context() {
3007   InstanceKlass* ik = InstanceKlass::cast(SystemDictionary::CallSite_klass());
3008   oop def_context_oop = ik->java_mirror()->obj_field(_default_context_offset);
3009   assert(!oopDesc::is_null(def_context_oop), "");
3010   return def_context_oop;
3011 }
3012 
3013 // Support for java_security_AccessControlContext
3014 
3015 int java_security_AccessControlContext::_context_offset = 0;
3016 int java_security_AccessControlContext::_privilegedContext_offset = 0;
3017 int java_security_AccessControlContext::_isPrivileged_offset = 0;
3018 int java_security_AccessControlContext::_isAuthorized_offset = -1;
3019 
3020 void java_security_AccessControlContext::compute_offsets() {
3021   assert(_isPrivileged_offset == 0, "offsets should be initialized only once");
3022   fieldDescriptor fd;
3023   InstanceKlass* ik = InstanceKlass::cast(SystemDictionary::AccessControlContext_klass());
3024 
3025   if (!ik->find_local_field(vmSymbols::context_name(), vmSymbols::protectiondomain_signature(), &fd)) {
3026     fatal("Invalid layout of java.security.AccessControlContext");
3027   }
3028   _context_offset = fd.offset();
3029 
3030   if (!ik->find_local_field(vmSymbols::privilegedContext_name(), vmSymbols::accesscontrolcontext_signature(), &fd)) {


3386   java_lang_AssertionStatusDirectives::classEnabled_offset = java_lang_AssertionStatusDirectives::hc_classEnabled_offset * x + header;
3387   java_lang_AssertionStatusDirectives::packages_offset = java_lang_AssertionStatusDirectives::hc_packages_offset * x + header;
3388   java_lang_AssertionStatusDirectives::packageEnabled_offset = java_lang_AssertionStatusDirectives::hc_packageEnabled_offset * x + header;
3389   java_lang_AssertionStatusDirectives::deflt_offset = java_lang_AssertionStatusDirectives::hc_deflt_offset * x + header;
3390 
3391 }
3392 
3393 
3394 // Compute non-hard-coded field offsets of all the classes in this file
3395 void JavaClasses::compute_offsets() {
3396   // java_lang_Class::compute_offsets was called earlier in bootstrap
3397   java_lang_ClassLoader::compute_offsets();
3398   java_lang_Thread::compute_offsets();
3399   java_lang_ThreadGroup::compute_offsets();
3400   java_lang_invoke_MethodHandle::compute_offsets();
3401   java_lang_invoke_DirectMethodHandle::compute_offsets();
3402   java_lang_invoke_MemberName::compute_offsets();
3403   java_lang_invoke_LambdaForm::compute_offsets();
3404   java_lang_invoke_MethodType::compute_offsets();
3405   java_lang_invoke_CallSite::compute_offsets();

3406   java_security_AccessControlContext::compute_offsets();
3407   // Initialize reflection classes. The layouts of these classes
3408   // changed with the new reflection implementation in JDK 1.4, and
3409   // since the Universe doesn't know what JDK version it is until this
3410   // point we defer computation of these offsets until now.
3411   java_lang_reflect_AccessibleObject::compute_offsets();
3412   java_lang_reflect_Method::compute_offsets();
3413   java_lang_reflect_Constructor::compute_offsets();
3414   java_lang_reflect_Field::compute_offsets();
3415   java_nio_Buffer::compute_offsets();
3416   sun_reflect_ConstantPool::compute_offsets();
3417   sun_reflect_UnsafeStaticFieldAccessorImpl::compute_offsets();
3418   java_lang_reflect_Parameter::compute_offsets();
3419 
3420   // generated interpreter code wants to know about the offsets we just computed:
3421   AbstractAssembler::update_delayed_values();
3422 }
3423 
3424 #ifndef PRODUCT
3425 




2950   objArrayOop pts = ptypes(mt);
2951   int count = pts->length();
2952   int slots = 0;
2953   for (int i = 0; i < count; i++) {
2954     BasicType bt = java_lang_Class::as_BasicType(pts->obj_at(i));
2955     slots += type2size[bt];
2956   }
2957   return slots;
2958 }
2959 
2960 int java_lang_invoke_MethodType::rtype_slot_count(oop mt) {
2961   BasicType bt = java_lang_Class::as_BasicType(rtype(mt));
2962   return type2size[bt];
2963 }
2964 
2965 
2966 // Support for java_lang_invoke_CallSite
2967 
2968 int java_lang_invoke_CallSite::_target_offset;
2969 int java_lang_invoke_CallSite::_context_offset;

2970 
2971 void java_lang_invoke_CallSite::compute_offsets() {
2972   Klass* k = SystemDictionary::CallSite_klass();
2973   if (k != NULL) {
2974     compute_offset(_target_offset, k, vmSymbols::target_name(), vmSymbols::java_lang_invoke_MethodHandle_signature());
2975     compute_offset(_context_offset, k, vmSymbols::context_name(), vmSymbols::java_lang_invoke_CallSite_Context_signature());



2976   }
2977 }
2978 
2979 oop java_lang_invoke_CallSite::context(oop call_site) {
2980   assert(java_lang_invoke_CallSite::is_instance(call_site), "");
2981 
2982   oop dep_oop = call_site->obj_field(_context_offset);
2983   return dep_oop;
2984 }
2985 
2986 // Support for java_lang_invoke_CallSite_Context
2987 
2988 int java_lang_invoke_CallSite_Context::_dependencies_offset;
2989 
2990 void java_lang_invoke_CallSite_Context::compute_offsets() {
2991   Klass* k = SystemDictionary::Context_klass();
2992   if (k != NULL) {
2993     compute_offset(_dependencies_offset, k, vmSymbols::dependencies_name(), vmSymbols::long_signature());
2994   }
2995 }
2996 
2997 nmethodBucket* java_lang_invoke_CallSite_Context::dependencies(oop call_site) {
2998   assert(java_lang_invoke_CallSite_Context::is_instance(call_site), "");
2999   return (nmethodBucket*) (address) call_site->long_field(_dependencies_offset);






3000 }
3001 
3002 void java_lang_invoke_CallSite_Context::set_dependencies(oop call_site, nmethodBucket* context) {
3003   assert(java_lang_invoke_CallSite_Context::is_instance(call_site), "");
3004   call_site->long_field_put(_dependencies_offset, (jlong) (address) context);


3005 }
3006 
3007 // Support for java_security_AccessControlContext
3008 
3009 int java_security_AccessControlContext::_context_offset = 0;
3010 int java_security_AccessControlContext::_privilegedContext_offset = 0;
3011 int java_security_AccessControlContext::_isPrivileged_offset = 0;
3012 int java_security_AccessControlContext::_isAuthorized_offset = -1;
3013 
3014 void java_security_AccessControlContext::compute_offsets() {
3015   assert(_isPrivileged_offset == 0, "offsets should be initialized only once");
3016   fieldDescriptor fd;
3017   InstanceKlass* ik = InstanceKlass::cast(SystemDictionary::AccessControlContext_klass());
3018 
3019   if (!ik->find_local_field(vmSymbols::context_name(), vmSymbols::protectiondomain_signature(), &fd)) {
3020     fatal("Invalid layout of java.security.AccessControlContext");
3021   }
3022   _context_offset = fd.offset();
3023 
3024   if (!ik->find_local_field(vmSymbols::privilegedContext_name(), vmSymbols::accesscontrolcontext_signature(), &fd)) {


3380   java_lang_AssertionStatusDirectives::classEnabled_offset = java_lang_AssertionStatusDirectives::hc_classEnabled_offset * x + header;
3381   java_lang_AssertionStatusDirectives::packages_offset = java_lang_AssertionStatusDirectives::hc_packages_offset * x + header;
3382   java_lang_AssertionStatusDirectives::packageEnabled_offset = java_lang_AssertionStatusDirectives::hc_packageEnabled_offset * x + header;
3383   java_lang_AssertionStatusDirectives::deflt_offset = java_lang_AssertionStatusDirectives::hc_deflt_offset * x + header;
3384 
3385 }
3386 
3387 
3388 // Compute non-hard-coded field offsets of all the classes in this file
3389 void JavaClasses::compute_offsets() {
3390   // java_lang_Class::compute_offsets was called earlier in bootstrap
3391   java_lang_ClassLoader::compute_offsets();
3392   java_lang_Thread::compute_offsets();
3393   java_lang_ThreadGroup::compute_offsets();
3394   java_lang_invoke_MethodHandle::compute_offsets();
3395   java_lang_invoke_DirectMethodHandle::compute_offsets();
3396   java_lang_invoke_MemberName::compute_offsets();
3397   java_lang_invoke_LambdaForm::compute_offsets();
3398   java_lang_invoke_MethodType::compute_offsets();
3399   java_lang_invoke_CallSite::compute_offsets();
3400   java_lang_invoke_CallSite_Context::compute_offsets();
3401   java_security_AccessControlContext::compute_offsets();
3402   // Initialize reflection classes. The layouts of these classes
3403   // changed with the new reflection implementation in JDK 1.4, and
3404   // since the Universe doesn't know what JDK version it is until this
3405   // point we defer computation of these offsets until now.
3406   java_lang_reflect_AccessibleObject::compute_offsets();
3407   java_lang_reflect_Method::compute_offsets();
3408   java_lang_reflect_Constructor::compute_offsets();
3409   java_lang_reflect_Field::compute_offsets();
3410   java_nio_Buffer::compute_offsets();
3411   sun_reflect_ConstantPool::compute_offsets();
3412   sun_reflect_UnsafeStaticFieldAccessorImpl::compute_offsets();
3413   java_lang_reflect_Parameter::compute_offsets();
3414 
3415   // generated interpreter code wants to know about the offsets we just computed:
3416   AbstractAssembler::update_delayed_values();
3417 }
3418 
3419 #ifndef PRODUCT
3420 


< prev index next >