< prev index next >

src/hotspot/share/classfile/javaClasses.cpp

Print this page




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);


< prev index next >