2305 int java_lang_invoke_MethodHandle::_vmtarget_offset;
2306 int java_lang_invoke_MethodHandle::_vmentry_offset;
2307 int java_lang_invoke_MethodHandle::_vmslots_offset;
2308
2309 int java_lang_invoke_MemberName::_clazz_offset;
2310 int java_lang_invoke_MemberName::_name_offset;
2311 int java_lang_invoke_MemberName::_type_offset;
2312 int java_lang_invoke_MemberName::_flags_offset;
2313 int java_lang_invoke_MemberName::_vmtarget_offset;
2314 int java_lang_invoke_MemberName::_vmindex_offset;
2315
2316 int java_lang_invoke_DirectMethodHandle::_vmindex_offset;
2317
2318 int java_lang_invoke_BoundMethodHandle::_argument_offset;
2319 int java_lang_invoke_BoundMethodHandle::_vmargslot_offset;
2320
2321 int java_lang_invoke_AdapterMethodHandle::_conversion_offset;
2322
2323 void java_lang_invoke_MethodHandle::compute_offsets() {
2324 klassOop k = SystemDictionary::MethodHandle_klass();
2325 if (k != NULL && EnableMethodHandles) {
2326 bool allow_super = false;
2327 if (AllowTransitionalJSR292) allow_super = true; // temporary, to access java.dyn.MethodHandleImpl
2328 compute_offset(_type_offset, k, vmSymbols::type_name(), vmSymbols::java_lang_invoke_MethodType_signature(), allow_super);
2329 compute_offset(_vmtarget_offset, k, vmSymbols::vmtarget_name(), vmSymbols::object_signature(), allow_super);
2330 compute_offset(_vmentry_offset, k, vmSymbols::vmentry_name(), vmSymbols::machine_word_signature(), allow_super);
2331
2332 // Note: MH.vmslots (if it is present) is a hoisted copy of MH.type.form.vmslots.
2333 // It is optional pending experiments to keep or toss.
2334 compute_optional_offset(_vmslots_offset, k, vmSymbols::vmslots_name(), vmSymbols::int_signature(), allow_super);
2335 }
2336 }
2337
2338 void java_lang_invoke_MemberName::compute_offsets() {
2339 klassOop k = SystemDictionary::MemberName_klass();
2340 if (k != NULL && EnableMethodHandles) {
2341 compute_offset(_clazz_offset, k, vmSymbols::clazz_name(), vmSymbols::class_signature());
2342 compute_offset(_name_offset, k, vmSymbols::name_name(), vmSymbols::string_signature());
2343 compute_offset(_type_offset, k, vmSymbols::type_name(), vmSymbols::object_signature());
2344 compute_offset(_flags_offset, k, vmSymbols::flags_name(), vmSymbols::int_signature());
2345 compute_offset(_vmtarget_offset, k, vmSymbols::vmtarget_name(), vmSymbols::object_signature());
2346 compute_offset(_vmindex_offset, k, vmSymbols::vmindex_name(), vmSymbols::int_signature());
2347 }
2348 }
2349
2350 void java_lang_invoke_DirectMethodHandle::compute_offsets() {
2351 klassOop k = SystemDictionary::DirectMethodHandle_klass();
2352 if (k != NULL && EnableMethodHandles) {
2353 compute_offset(_vmindex_offset, k, vmSymbols::vmindex_name(), vmSymbols::int_signature(), true);
2354 }
2355 }
2356
2357 void java_lang_invoke_BoundMethodHandle::compute_offsets() {
2358 klassOop k = SystemDictionary::BoundMethodHandle_klass();
2359 if (k != NULL && EnableMethodHandles) {
2360 compute_offset(_vmargslot_offset, k, vmSymbols::vmargslot_name(), vmSymbols::int_signature(), true);
2361 compute_offset(_argument_offset, k, vmSymbols::argument_name(), vmSymbols::object_signature(), true);
2362 }
2363 }
2364
2365 void java_lang_invoke_AdapterMethodHandle::compute_offsets() {
2366 klassOop k = SystemDictionary::AdapterMethodHandle_klass();
2367 if (k != NULL && EnableMethodHandles) {
2368 compute_offset(_conversion_offset, k, vmSymbols::conversion_name(), vmSymbols::int_signature(), true);
2369 }
2370 }
2371
2372 oop java_lang_invoke_MethodHandle::type(oop mh) {
2373 return mh->obj_field(_type_offset);
2374 }
2375
2376 void java_lang_invoke_MethodHandle::set_type(oop mh, oop mtype) {
2377 mh->obj_field_put(_type_offset, mtype);
2378 }
2379
2380 int java_lang_invoke_MethodHandle::vmslots(oop mh) {
2381 int vmslots_offset = _vmslots_offset;
2382 if (vmslots_offset != 0) {
2383 #ifdef ASSERT
2384 int x = mh->int_field(vmslots_offset);
2385 int y = compute_vmslots(mh);
2386 assert(x == y, "correct hoisted value");
2387 #endif
2965 // java_lang_StackTraceElement
2966 java_lang_StackTraceElement::declaringClass_offset = java_lang_StackTraceElement::hc_declaringClass_offset * x + header;
2967 java_lang_StackTraceElement::methodName_offset = java_lang_StackTraceElement::hc_methodName_offset * x + header;
2968 java_lang_StackTraceElement::fileName_offset = java_lang_StackTraceElement::hc_fileName_offset * x + header;
2969 java_lang_StackTraceElement::lineNumber_offset = java_lang_StackTraceElement::hc_lineNumber_offset * x + header;
2970 java_lang_AssertionStatusDirectives::classes_offset = java_lang_AssertionStatusDirectives::hc_classes_offset * x + header;
2971 java_lang_AssertionStatusDirectives::classEnabled_offset = java_lang_AssertionStatusDirectives::hc_classEnabled_offset * x + header;
2972 java_lang_AssertionStatusDirectives::packages_offset = java_lang_AssertionStatusDirectives::hc_packages_offset * x + header;
2973 java_lang_AssertionStatusDirectives::packageEnabled_offset = java_lang_AssertionStatusDirectives::hc_packageEnabled_offset * x + header;
2974 java_lang_AssertionStatusDirectives::deflt_offset = java_lang_AssertionStatusDirectives::hc_deflt_offset * x + header;
2975
2976 }
2977
2978
2979 // Compute non-hard-coded field offsets of all the classes in this file
2980 void JavaClasses::compute_offsets() {
2981
2982 java_lang_Class::compute_offsets();
2983 java_lang_Thread::compute_offsets();
2984 java_lang_ThreadGroup::compute_offsets();
2985 if (EnableMethodHandles) {
2986 java_lang_invoke_MethodHandle::compute_offsets();
2987 java_lang_invoke_MemberName::compute_offsets();
2988 java_lang_invoke_DirectMethodHandle::compute_offsets();
2989 java_lang_invoke_BoundMethodHandle::compute_offsets();
2990 java_lang_invoke_AdapterMethodHandle::compute_offsets();
2991 java_lang_invoke_MethodType::compute_offsets();
2992 java_lang_invoke_MethodTypeForm::compute_offsets();
2993 }
2994 if (EnableInvokeDynamic) {
2995 java_lang_invoke_CallSite::compute_offsets();
2996 }
2997 java_security_AccessControlContext::compute_offsets();
2998 // Initialize reflection classes. The layouts of these classes
2999 // changed with the new reflection implementation in JDK 1.4, and
3000 // since the Universe doesn't know what JDK version it is until this
3001 // point we defer computation of these offsets until now.
3002 java_lang_reflect_AccessibleObject::compute_offsets();
3003 java_lang_reflect_Method::compute_offsets();
3004 java_lang_reflect_Constructor::compute_offsets();
3005 java_lang_reflect_Field::compute_offsets();
3006 if (JDK_Version::is_gte_jdk14x_version()) {
3007 java_nio_Buffer::compute_offsets();
3008 }
3009 if (JDK_Version::is_gte_jdk15x_version()) {
3010 sun_reflect_ConstantPool::compute_offsets();
3011 sun_reflect_UnsafeStaticFieldAccessorImpl::compute_offsets();
3012 }
3013 sun_misc_AtomicLongCSImpl::compute_offsets();
3014
|
2305 int java_lang_invoke_MethodHandle::_vmtarget_offset;
2306 int java_lang_invoke_MethodHandle::_vmentry_offset;
2307 int java_lang_invoke_MethodHandle::_vmslots_offset;
2308
2309 int java_lang_invoke_MemberName::_clazz_offset;
2310 int java_lang_invoke_MemberName::_name_offset;
2311 int java_lang_invoke_MemberName::_type_offset;
2312 int java_lang_invoke_MemberName::_flags_offset;
2313 int java_lang_invoke_MemberName::_vmtarget_offset;
2314 int java_lang_invoke_MemberName::_vmindex_offset;
2315
2316 int java_lang_invoke_DirectMethodHandle::_vmindex_offset;
2317
2318 int java_lang_invoke_BoundMethodHandle::_argument_offset;
2319 int java_lang_invoke_BoundMethodHandle::_vmargslot_offset;
2320
2321 int java_lang_invoke_AdapterMethodHandle::_conversion_offset;
2322
2323 void java_lang_invoke_MethodHandle::compute_offsets() {
2324 klassOop k = SystemDictionary::MethodHandle_klass();
2325 if (k != NULL && EnableInvokeDynamic) {
2326 bool allow_super = false;
2327 if (AllowTransitionalJSR292) allow_super = true; // temporary, to access java.dyn.MethodHandleImpl
2328 compute_offset(_type_offset, k, vmSymbols::type_name(), vmSymbols::java_lang_invoke_MethodType_signature(), allow_super);
2329 compute_offset(_vmtarget_offset, k, vmSymbols::vmtarget_name(), vmSymbols::object_signature(), allow_super);
2330 compute_offset(_vmentry_offset, k, vmSymbols::vmentry_name(), vmSymbols::machine_word_signature(), allow_super);
2331
2332 // Note: MH.vmslots (if it is present) is a hoisted copy of MH.type.form.vmslots.
2333 // It is optional pending experiments to keep or toss.
2334 compute_optional_offset(_vmslots_offset, k, vmSymbols::vmslots_name(), vmSymbols::int_signature(), allow_super);
2335 }
2336 }
2337
2338 void java_lang_invoke_MemberName::compute_offsets() {
2339 klassOop k = SystemDictionary::MemberName_klass();
2340 if (k != NULL && EnableInvokeDynamic) {
2341 compute_offset(_clazz_offset, k, vmSymbols::clazz_name(), vmSymbols::class_signature());
2342 compute_offset(_name_offset, k, vmSymbols::name_name(), vmSymbols::string_signature());
2343 compute_offset(_type_offset, k, vmSymbols::type_name(), vmSymbols::object_signature());
2344 compute_offset(_flags_offset, k, vmSymbols::flags_name(), vmSymbols::int_signature());
2345 compute_offset(_vmtarget_offset, k, vmSymbols::vmtarget_name(), vmSymbols::object_signature());
2346 compute_offset(_vmindex_offset, k, vmSymbols::vmindex_name(), vmSymbols::int_signature());
2347 }
2348 }
2349
2350 void java_lang_invoke_DirectMethodHandle::compute_offsets() {
2351 klassOop k = SystemDictionary::DirectMethodHandle_klass();
2352 if (k != NULL && EnableInvokeDynamic) {
2353 compute_offset(_vmindex_offset, k, vmSymbols::vmindex_name(), vmSymbols::int_signature(), true);
2354 }
2355 }
2356
2357 void java_lang_invoke_BoundMethodHandle::compute_offsets() {
2358 klassOop k = SystemDictionary::BoundMethodHandle_klass();
2359 if (k != NULL && EnableInvokeDynamic) {
2360 compute_offset(_vmargslot_offset, k, vmSymbols::vmargslot_name(), vmSymbols::int_signature(), true);
2361 compute_offset(_argument_offset, k, vmSymbols::argument_name(), vmSymbols::object_signature(), true);
2362 }
2363 }
2364
2365 void java_lang_invoke_AdapterMethodHandle::compute_offsets() {
2366 klassOop k = SystemDictionary::AdapterMethodHandle_klass();
2367 if (k != NULL && EnableInvokeDynamic) {
2368 compute_offset(_conversion_offset, k, vmSymbols::conversion_name(), vmSymbols::int_signature(), true);
2369 }
2370 }
2371
2372 oop java_lang_invoke_MethodHandle::type(oop mh) {
2373 return mh->obj_field(_type_offset);
2374 }
2375
2376 void java_lang_invoke_MethodHandle::set_type(oop mh, oop mtype) {
2377 mh->obj_field_put(_type_offset, mtype);
2378 }
2379
2380 int java_lang_invoke_MethodHandle::vmslots(oop mh) {
2381 int vmslots_offset = _vmslots_offset;
2382 if (vmslots_offset != 0) {
2383 #ifdef ASSERT
2384 int x = mh->int_field(vmslots_offset);
2385 int y = compute_vmslots(mh);
2386 assert(x == y, "correct hoisted value");
2387 #endif
2965 // java_lang_StackTraceElement
2966 java_lang_StackTraceElement::declaringClass_offset = java_lang_StackTraceElement::hc_declaringClass_offset * x + header;
2967 java_lang_StackTraceElement::methodName_offset = java_lang_StackTraceElement::hc_methodName_offset * x + header;
2968 java_lang_StackTraceElement::fileName_offset = java_lang_StackTraceElement::hc_fileName_offset * x + header;
2969 java_lang_StackTraceElement::lineNumber_offset = java_lang_StackTraceElement::hc_lineNumber_offset * x + header;
2970 java_lang_AssertionStatusDirectives::classes_offset = java_lang_AssertionStatusDirectives::hc_classes_offset * x + header;
2971 java_lang_AssertionStatusDirectives::classEnabled_offset = java_lang_AssertionStatusDirectives::hc_classEnabled_offset * x + header;
2972 java_lang_AssertionStatusDirectives::packages_offset = java_lang_AssertionStatusDirectives::hc_packages_offset * x + header;
2973 java_lang_AssertionStatusDirectives::packageEnabled_offset = java_lang_AssertionStatusDirectives::hc_packageEnabled_offset * x + header;
2974 java_lang_AssertionStatusDirectives::deflt_offset = java_lang_AssertionStatusDirectives::hc_deflt_offset * x + header;
2975
2976 }
2977
2978
2979 // Compute non-hard-coded field offsets of all the classes in this file
2980 void JavaClasses::compute_offsets() {
2981
2982 java_lang_Class::compute_offsets();
2983 java_lang_Thread::compute_offsets();
2984 java_lang_ThreadGroup::compute_offsets();
2985 if (EnableInvokeDynamic) {
2986 java_lang_invoke_MethodHandle::compute_offsets();
2987 java_lang_invoke_MemberName::compute_offsets();
2988 java_lang_invoke_DirectMethodHandle::compute_offsets();
2989 java_lang_invoke_BoundMethodHandle::compute_offsets();
2990 java_lang_invoke_AdapterMethodHandle::compute_offsets();
2991 java_lang_invoke_MethodType::compute_offsets();
2992 java_lang_invoke_MethodTypeForm::compute_offsets();
2993 java_lang_invoke_CallSite::compute_offsets();
2994 }
2995 java_security_AccessControlContext::compute_offsets();
2996 // Initialize reflection classes. The layouts of these classes
2997 // changed with the new reflection implementation in JDK 1.4, and
2998 // since the Universe doesn't know what JDK version it is until this
2999 // point we defer computation of these offsets until now.
3000 java_lang_reflect_AccessibleObject::compute_offsets();
3001 java_lang_reflect_Method::compute_offsets();
3002 java_lang_reflect_Constructor::compute_offsets();
3003 java_lang_reflect_Field::compute_offsets();
3004 if (JDK_Version::is_gte_jdk14x_version()) {
3005 java_nio_Buffer::compute_offsets();
3006 }
3007 if (JDK_Version::is_gte_jdk15x_version()) {
3008 sun_reflect_ConstantPool::compute_offsets();
3009 sun_reflect_UnsafeStaticFieldAccessorImpl::compute_offsets();
3010 }
3011 sun_misc_AtomicLongCSImpl::compute_offsets();
3012
|