4238 int java_lang_StackTraceElement::fileName_offset;
4239 int java_lang_StackTraceElement::lineNumber_offset;
4240 int java_lang_StackTraceElement::moduleName_offset;
4241 int java_lang_StackTraceElement::moduleVersion_offset;
4242 int java_lang_StackTraceElement::classLoaderName_offset;
4243 int java_lang_StackTraceElement::declaringClass_offset;
4244 int java_lang_StackTraceElement::declaringClassObject_offset;
4245 int java_lang_StackFrameInfo::_memberName_offset;
4246 int java_lang_StackFrameInfo::_bci_offset;
4247 int java_lang_StackFrameInfo::_version_offset;
4248 int java_lang_LiveStackFrameInfo::_monitors_offset;
4249 int java_lang_LiveStackFrameInfo::_locals_offset;
4250 int java_lang_LiveStackFrameInfo::_operands_offset;
4251 int java_lang_LiveStackFrameInfo::_mode_offset;
4252 int java_lang_AssertionStatusDirectives::classes_offset;
4253 int java_lang_AssertionStatusDirectives::classEnabled_offset;
4254 int java_lang_AssertionStatusDirectives::packages_offset;
4255 int java_lang_AssertionStatusDirectives::packageEnabled_offset;
4256 int java_lang_AssertionStatusDirectives::deflt_offset;
4257 int java_nio_Buffer::_limit_offset;
4258 int java_util_concurrent_locks_AbstractOwnableSynchronizer::_owner_offset = 0;
4259 int reflect_ConstantPool::_oop_offset;
4260 int reflect_UnsafeStaticFieldAccessorImpl::_base_offset;
4261
4262 #define STACKTRACEELEMENT_FIELDS_DO(macro) \
4263 macro(declaringClassObject_offset, k, "declaringClassObject", class_signature, false); \
4264 macro(classLoaderName_offset, k, "classLoaderName", string_signature, false); \
4265 macro(moduleName_offset, k, "moduleName", string_signature, false); \
4266 macro(moduleVersion_offset, k, "moduleVersion", string_signature, false); \
4267 macro(declaringClass_offset, k, "declaringClass", string_signature, false); \
4268 macro(methodName_offset, k, "methodName", string_signature, false); \
4269 macro(fileName_offset, k, "fileName", string_signature, false); \
4270 macro(lineNumber_offset, k, "lineNumber", int_signature, false)
4271
4272 // Support for java_lang_StackTraceElement
4273 void java_lang_StackTraceElement::compute_offsets() {
4274 InstanceKlass* k = SystemDictionary::StackTraceElement_klass();
4275 STACKTRACEELEMENT_FIELDS_DO(FIELD_COMPUTE_OFFSET);
4276 }
4277
4278 #if INCLUDE_CDS
4380 // Support for intrinsification of java.nio.Buffer.checkIndex
4381 int java_nio_Buffer::limit_offset() {
4382 return _limit_offset;
4383 }
4384
4385 #define BUFFER_FIELDS_DO(macro) \
4386 macro(_limit_offset, k, "limit", int_signature, false)
4387
4388 void java_nio_Buffer::compute_offsets() {
4389 InstanceKlass* k = SystemDictionary::nio_Buffer_klass();
4390 assert(k != NULL, "must be loaded in 1.4+");
4391 BUFFER_FIELDS_DO(FIELD_COMPUTE_OFFSET);
4392 }
4393
4394 #if INCLUDE_CDS
4395 void java_nio_Buffer::serialize(SerializeClosure* f) {
4396 BUFFER_FIELDS_DO(FIELD_SERIALIZE_OFFSET);
4397 }
4398 #endif
4399
4400 void java_util_concurrent_locks_AbstractOwnableSynchronizer::initialize(TRAPS) {
4401 if (_owner_offset != 0) return;
4402
4403 SystemDictionary::load_abstract_ownable_synchronizer_klass(CHECK);
4404 InstanceKlass* k = SystemDictionary::abstract_ownable_synchronizer_klass();
4405 compute_offset(_owner_offset, k,
4406 "exclusiveOwnerThread", vmSymbols::thread_signature());
4407 }
4408
4409 oop java_util_concurrent_locks_AbstractOwnableSynchronizer::get_owner_threadObj(oop obj) {
4410 assert(_owner_offset != 0, "Must be initialized");
4411 return obj->obj_field(_owner_offset);
4412 }
4413
4414 static int member_offset(int hardcoded_offset) {
4415 return (hardcoded_offset * heapOopSize) + instanceOopDesc::base_offset_in_bytes();
4416 }
4417
4418 // Compute hard-coded offsets
4419 // Invoked before SystemDictionary::initialize, so pre-loaded classes
4420 // are not available to determine the offset_of_static_fields.
4421 void JavaClasses::compute_hard_coded_offsets() {
4422
4423 // java_lang_boxing_object
4424 java_lang_boxing_object::value_offset = member_offset(java_lang_boxing_object::hc_value_offset);
4425 java_lang_boxing_object::long_value_offset = align_up(member_offset(java_lang_boxing_object::hc_value_offset), BytesPerLong);
4426
4454 java_lang_invoke_MethodType::compute_offsets();
4455 java_lang_invoke_CallSite::compute_offsets();
4456 java_lang_invoke_MethodHandleNatives_CallSiteContext::compute_offsets();
4457 java_security_AccessControlContext::compute_offsets();
4458 // Initialize reflection classes. The layouts of these classes
4459 // changed with the new reflection implementation in JDK 1.4, and
4460 // since the Universe doesn't know what JDK version it is until this
4461 // point we defer computation of these offsets until now.
4462 java_lang_reflect_AccessibleObject::compute_offsets();
4463 java_lang_reflect_Method::compute_offsets();
4464 java_lang_reflect_Constructor::compute_offsets();
4465 java_lang_reflect_Field::compute_offsets();
4466 java_nio_Buffer::compute_offsets();
4467 reflect_ConstantPool::compute_offsets();
4468 reflect_UnsafeStaticFieldAccessorImpl::compute_offsets();
4469 java_lang_reflect_Parameter::compute_offsets();
4470 java_lang_Module::compute_offsets();
4471 java_lang_StackTraceElement::compute_offsets();
4472 java_lang_StackFrameInfo::compute_offsets();
4473 java_lang_LiveStackFrameInfo::compute_offsets();
4474
4475 // generated interpreter code wants to know about the offsets we just computed:
4476 AbstractAssembler::update_delayed_values();
4477 }
4478
4479 #ifndef PRODUCT
4480
4481 // These functions exist to assert the validity of hard-coded field offsets to guard
4482 // against changes in the class files
4483
4484 bool JavaClasses::check_offset(const char *klass_name, int hardcoded_offset, const char *field_name, const char* field_sig) {
4485 EXCEPTION_MARK;
4486 fieldDescriptor fd;
4487 TempNewSymbol klass_sym = SymbolTable::new_symbol(klass_name, CATCH);
4488 Klass* k = SystemDictionary::resolve_or_fail(klass_sym, true, CATCH);
4489 InstanceKlass* ik = InstanceKlass::cast(k);
4490 TempNewSymbol f_name = SymbolTable::new_symbol(field_name, CATCH);
4491 TempNewSymbol f_sig = SymbolTable::new_symbol(field_sig, CATCH);
4492 if (!ik->find_local_field(f_name, f_sig, &fd)) {
4493 tty->print_cr("Nonstatic field %s.%s not found", klass_name, field_name);
|
4238 int java_lang_StackTraceElement::fileName_offset;
4239 int java_lang_StackTraceElement::lineNumber_offset;
4240 int java_lang_StackTraceElement::moduleName_offset;
4241 int java_lang_StackTraceElement::moduleVersion_offset;
4242 int java_lang_StackTraceElement::classLoaderName_offset;
4243 int java_lang_StackTraceElement::declaringClass_offset;
4244 int java_lang_StackTraceElement::declaringClassObject_offset;
4245 int java_lang_StackFrameInfo::_memberName_offset;
4246 int java_lang_StackFrameInfo::_bci_offset;
4247 int java_lang_StackFrameInfo::_version_offset;
4248 int java_lang_LiveStackFrameInfo::_monitors_offset;
4249 int java_lang_LiveStackFrameInfo::_locals_offset;
4250 int java_lang_LiveStackFrameInfo::_operands_offset;
4251 int java_lang_LiveStackFrameInfo::_mode_offset;
4252 int java_lang_AssertionStatusDirectives::classes_offset;
4253 int java_lang_AssertionStatusDirectives::classEnabled_offset;
4254 int java_lang_AssertionStatusDirectives::packages_offset;
4255 int java_lang_AssertionStatusDirectives::packageEnabled_offset;
4256 int java_lang_AssertionStatusDirectives::deflt_offset;
4257 int java_nio_Buffer::_limit_offset;
4258 int java_util_concurrent_locks_AbstractOwnableSynchronizer::_owner_offset;
4259 int reflect_ConstantPool::_oop_offset;
4260 int reflect_UnsafeStaticFieldAccessorImpl::_base_offset;
4261
4262 #define STACKTRACEELEMENT_FIELDS_DO(macro) \
4263 macro(declaringClassObject_offset, k, "declaringClassObject", class_signature, false); \
4264 macro(classLoaderName_offset, k, "classLoaderName", string_signature, false); \
4265 macro(moduleName_offset, k, "moduleName", string_signature, false); \
4266 macro(moduleVersion_offset, k, "moduleVersion", string_signature, false); \
4267 macro(declaringClass_offset, k, "declaringClass", string_signature, false); \
4268 macro(methodName_offset, k, "methodName", string_signature, false); \
4269 macro(fileName_offset, k, "fileName", string_signature, false); \
4270 macro(lineNumber_offset, k, "lineNumber", int_signature, false)
4271
4272 // Support for java_lang_StackTraceElement
4273 void java_lang_StackTraceElement::compute_offsets() {
4274 InstanceKlass* k = SystemDictionary::StackTraceElement_klass();
4275 STACKTRACEELEMENT_FIELDS_DO(FIELD_COMPUTE_OFFSET);
4276 }
4277
4278 #if INCLUDE_CDS
4380 // Support for intrinsification of java.nio.Buffer.checkIndex
4381 int java_nio_Buffer::limit_offset() {
4382 return _limit_offset;
4383 }
4384
4385 #define BUFFER_FIELDS_DO(macro) \
4386 macro(_limit_offset, k, "limit", int_signature, false)
4387
4388 void java_nio_Buffer::compute_offsets() {
4389 InstanceKlass* k = SystemDictionary::nio_Buffer_klass();
4390 assert(k != NULL, "must be loaded in 1.4+");
4391 BUFFER_FIELDS_DO(FIELD_COMPUTE_OFFSET);
4392 }
4393
4394 #if INCLUDE_CDS
4395 void java_nio_Buffer::serialize(SerializeClosure* f) {
4396 BUFFER_FIELDS_DO(FIELD_SERIALIZE_OFFSET);
4397 }
4398 #endif
4399
4400 #define AOS_FIELDS_DO(macro) \
4401 macro(_owner_offset, k, "exclusiveOwnerThread", thread_signature, false)
4402
4403 void java_util_concurrent_locks_AbstractOwnableSynchronizer::compute_offsets() {
4404 InstanceKlass* k = SystemDictionary::java_util_concurrent_locks_AbstractOwnableSynchronizer_klass();
4405 AOS_FIELDS_DO(FIELD_COMPUTE_OFFSET);
4406 }
4407
4408 oop java_util_concurrent_locks_AbstractOwnableSynchronizer::get_owner_threadObj(oop obj) {
4409 assert(_owner_offset != 0, "Must be initialized");
4410 return obj->obj_field(_owner_offset);
4411 }
4412
4413 static int member_offset(int hardcoded_offset) {
4414 return (hardcoded_offset * heapOopSize) + instanceOopDesc::base_offset_in_bytes();
4415 }
4416
4417 // Compute hard-coded offsets
4418 // Invoked before SystemDictionary::initialize, so pre-loaded classes
4419 // are not available to determine the offset_of_static_fields.
4420 void JavaClasses::compute_hard_coded_offsets() {
4421
4422 // java_lang_boxing_object
4423 java_lang_boxing_object::value_offset = member_offset(java_lang_boxing_object::hc_value_offset);
4424 java_lang_boxing_object::long_value_offset = align_up(member_offset(java_lang_boxing_object::hc_value_offset), BytesPerLong);
4425
4453 java_lang_invoke_MethodType::compute_offsets();
4454 java_lang_invoke_CallSite::compute_offsets();
4455 java_lang_invoke_MethodHandleNatives_CallSiteContext::compute_offsets();
4456 java_security_AccessControlContext::compute_offsets();
4457 // Initialize reflection classes. The layouts of these classes
4458 // changed with the new reflection implementation in JDK 1.4, and
4459 // since the Universe doesn't know what JDK version it is until this
4460 // point we defer computation of these offsets until now.
4461 java_lang_reflect_AccessibleObject::compute_offsets();
4462 java_lang_reflect_Method::compute_offsets();
4463 java_lang_reflect_Constructor::compute_offsets();
4464 java_lang_reflect_Field::compute_offsets();
4465 java_nio_Buffer::compute_offsets();
4466 reflect_ConstantPool::compute_offsets();
4467 reflect_UnsafeStaticFieldAccessorImpl::compute_offsets();
4468 java_lang_reflect_Parameter::compute_offsets();
4469 java_lang_Module::compute_offsets();
4470 java_lang_StackTraceElement::compute_offsets();
4471 java_lang_StackFrameInfo::compute_offsets();
4472 java_lang_LiveStackFrameInfo::compute_offsets();
4473 java_util_concurrent_locks_AbstractOwnableSynchronizer::compute_offsets();
4474
4475 // generated interpreter code wants to know about the offsets we just computed:
4476 AbstractAssembler::update_delayed_values();
4477 }
4478
4479 #ifndef PRODUCT
4480
4481 // These functions exist to assert the validity of hard-coded field offsets to guard
4482 // against changes in the class files
4483
4484 bool JavaClasses::check_offset(const char *klass_name, int hardcoded_offset, const char *field_name, const char* field_sig) {
4485 EXCEPTION_MARK;
4486 fieldDescriptor fd;
4487 TempNewSymbol klass_sym = SymbolTable::new_symbol(klass_name, CATCH);
4488 Klass* k = SystemDictionary::resolve_or_fail(klass_sym, true, CATCH);
4489 InstanceKlass* ik = InstanceKlass::cast(k);
4490 TempNewSymbol f_name = SymbolTable::new_symbol(field_name, CATCH);
4491 TempNewSymbol f_sig = SymbolTable::new_symbol(field_sig, CATCH);
4492 if (!ik->find_local_field(f_name, f_sig, &fd)) {
4493 tty->print_cr("Nonstatic field %s.%s not found", klass_name, field_name);
|