< prev index next >

hotspot/src/share/vm/classfile/javaClasses.cpp

Print this page




2170   }
2171 
2172   if (!version_matches(method(), version)) {
2173     // The method was redefined, accurate line number information isn't available
2174     java_lang_StackTraceElement::set_fileName(element(), NULL);
2175     java_lang_StackTraceElement::set_lineNumber(element(), -1);
2176   } else {
2177     // Fill in source file name and line number.
2178     Symbol* source = Backtrace::get_source_file_name(holder, version);
2179     if (ShowHiddenFrames && source == NULL)
2180       source = vmSymbols::unknown_class_name();
2181     oop filename = StringTable::intern(source, CHECK);
2182     java_lang_StackTraceElement::set_fileName(element(), filename);
2183 
2184     int line_number = Backtrace::get_line_number(method, bci);
2185     java_lang_StackTraceElement::set_lineNumber(element(), line_number);
2186   }
2187 }
2188 
2189 Method* java_lang_StackFrameInfo::get_method(Handle stackFrame, InstanceKlass* holder, TRAPS) {
2190   if (MemberNameInStackFrame) {
2191     Handle mname(THREAD, stackFrame->obj_field(_memberName_offset));
2192     Method* method = (Method*)java_lang_invoke_MemberName::vmtarget(mname());
2193     // we should expand MemberName::name when Throwable uses StackTrace
2194     // MethodHandles::expand_MemberName(mname, MethodHandles::_suppress_defc|MethodHandles::_suppress_type, CHECK_NULL);
2195     return method;
2196   } else {
2197     short mid       = stackFrame->short_field(_mid_offset);
2198     short version   = stackFrame->short_field(_version_offset);
2199     return holder->method_with_orig_idnum(mid, version);
2200   }
2201 }
2202 
2203 Symbol* java_lang_StackFrameInfo::get_file_name(Handle stackFrame, InstanceKlass* holder) {
2204   if (MemberNameInStackFrame) {
2205     return holder->source_file_name();
2206   } else {
2207     short version = stackFrame->short_field(_version_offset);
2208     return Backtrace::get_source_file_name(holder, version);
2209   }
2210 }
2211 
2212 void java_lang_StackFrameInfo::set_method_and_bci(Handle stackFrame, const methodHandle& method, int bci) {
2213   // set Method* or mid/cpref
2214   if (MemberNameInStackFrame) {
2215     oop mname = stackFrame->obj_field(_memberName_offset);
2216     InstanceKlass* ik = method->method_holder();
2217     CallInfo info(method(), ik);
2218     MethodHandles::init_method_MemberName(mname, info);
2219   } else {
2220     int mid = method->orig_method_idnum();
2221     int cpref = method->name_index();
2222     assert((jushort)mid == mid,        "mid should be short");
2223     assert((jushort)cpref == cpref,    "cpref should be short");
2224     java_lang_StackFrameInfo::set_mid(stackFrame(),     (short)mid);
2225     java_lang_StackFrameInfo::set_cpref(stackFrame(),   (short)cpref);
2226   }
2227   // set bci
2228   java_lang_StackFrameInfo::set_bci(stackFrame(), bci);
2229   // method may be redefined; store the version
2230   int version = method->constants()->version();
2231   assert((jushort)version == version, "version should be short");
2232   java_lang_StackFrameInfo::set_version(stackFrame(), (short)version);
2233 }
2234 
2235 void java_lang_StackFrameInfo::fill_methodInfo(Handle stackFrame, TRAPS) {
2236   ResourceMark rm(THREAD);
2237   oop k = stackFrame->obj_field(_declaringClass_offset);
2238   InstanceKlass* holder = InstanceKlass::cast(java_lang_Class::as_Klass(k));
2239   Method* method = java_lang_StackFrameInfo::get_method(stackFrame, holder, CHECK);
2240   int bci = stackFrame->int_field(_bci_offset);
2241 
2242   // The method can be NULL if the requested class version is gone
2243   Symbol* sym = (method != NULL) ? method->name() : NULL;
2244   if (MemberNameInStackFrame) {
2245     assert(sym != NULL, "MemberName must have method name");
2246   } else {
2247       // The method can be NULL if the requested class version is gone
2248     if (sym == NULL) {
2249       short cpref   = stackFrame->short_field(_cpref_offset);
2250       sym = holder->constants()->symbol_at(cpref);
2251     }
2252   }
2253 
2254   // set method name
2255   oop methodname = StringTable::intern(sym, CHECK);
2256   java_lang_StackFrameInfo::set_methodName(stackFrame(), methodname);
2257 
2258   // set file name and line number
2259   Symbol* source = get_file_name(stackFrame, holder);
2260   if (source != NULL) {
2261     oop filename = StringTable::intern(source, CHECK);
2262     java_lang_StackFrameInfo::set_fileName(stackFrame(), filename);
2263   }
2264 
2265   // if the method has been redefined, the bci is no longer applicable
2266   short version = stackFrame->short_field(_version_offset);
2267   if (version_matches(method, version)) {
2268     int line_number = Backtrace::get_line_number(method, bci);
2269     java_lang_StackFrameInfo::set_lineNumber(stackFrame(), line_number);
2270   }
2271 }
2272 
2273 void java_lang_StackFrameInfo::compute_offsets() {
2274   Klass* k = SystemDictionary::StackFrameInfo_klass();
2275   compute_offset(_declaringClass_offset, k, vmSymbols::declaringClass_name(),  vmSymbols::class_signature());
2276   compute_offset(_memberName_offset,     k, vmSymbols::memberName_name(),  vmSymbols::object_signature());
2277   compute_offset(_bci_offset,            k, vmSymbols::bci_name(),         vmSymbols::int_signature());
2278   compute_offset(_methodName_offset,     k, vmSymbols::methodName_name(),  vmSymbols::string_signature());
2279   compute_offset(_fileName_offset,       k, vmSymbols::fileName_name(),    vmSymbols::string_signature());
2280   compute_offset(_lineNumber_offset,     k, vmSymbols::lineNumber_name(),  vmSymbols::int_signature());
2281   STACKFRAMEINFO_INJECTED_FIELDS(INJECTED_FIELD_COMPUTE_OFFSET);
2282 }
2283 
2284 void java_lang_LiveStackFrameInfo::compute_offsets() {
2285   Klass* k = SystemDictionary::LiveStackFrameInfo_klass();
2286   compute_offset(_monitors_offset,   k, vmSymbols::monitors_name(),    vmSymbols::object_array_signature());
2287   compute_offset(_locals_offset,     k, vmSymbols::locals_name(),      vmSymbols::object_array_signature());
2288   compute_offset(_operands_offset,   k, vmSymbols::operands_name(),    vmSymbols::object_array_signature());
2289 }
2290 
2291 void java_lang_reflect_AccessibleObject::compute_offsets() {
2292   Klass* k = SystemDictionary::reflect_AccessibleObject_klass();
2293   compute_offset(override_offset, k, vmSymbols::override_name(), vmSymbols::bool_signature());
2294 }
2295 
2296 jboolean java_lang_reflect_AccessibleObject::override(oop reflect) {
2297   assert(Universe::is_fully_initialized(), "Need to find another solution to the reflection problem");
2298   return (jboolean) reflect->bool_field(override_offset);
2299 }
2300 


3673 int java_lang_ref_Reference::discovered_offset;
3674 int java_lang_ref_Reference::static_lock_offset;
3675 int java_lang_ref_Reference::static_pending_offset;
3676 int java_lang_ref_Reference::number_of_fake_oop_fields;
3677 int java_lang_ref_SoftReference::timestamp_offset;
3678 int java_lang_ref_SoftReference::static_clock_offset;
3679 int java_lang_ClassLoader::parent_offset;
3680 int java_lang_System::static_in_offset;
3681 int java_lang_System::static_out_offset;
3682 int java_lang_System::static_err_offset;
3683 int java_lang_System::static_security_offset;
3684 int java_lang_StackTraceElement::declaringClass_offset;
3685 int java_lang_StackTraceElement::methodName_offset;
3686 int java_lang_StackTraceElement::fileName_offset;
3687 int java_lang_StackTraceElement::lineNumber_offset;
3688 int java_lang_StackTraceElement::moduleName_offset;
3689 int java_lang_StackTraceElement::moduleVersion_offset;
3690 int java_lang_StackFrameInfo::_declaringClass_offset;
3691 int java_lang_StackFrameInfo::_memberName_offset;
3692 int java_lang_StackFrameInfo::_bci_offset;
3693 int java_lang_StackFrameInfo::_methodName_offset;
3694 int java_lang_StackFrameInfo::_fileName_offset;
3695 int java_lang_StackFrameInfo::_lineNumber_offset;
3696 int java_lang_StackFrameInfo::_mid_offset;
3697 int java_lang_StackFrameInfo::_version_offset;
3698 int java_lang_StackFrameInfo::_cpref_offset;
3699 int java_lang_LiveStackFrameInfo::_monitors_offset;
3700 int java_lang_LiveStackFrameInfo::_locals_offset;
3701 int java_lang_LiveStackFrameInfo::_operands_offset;
3702 int java_lang_AssertionStatusDirectives::classes_offset;
3703 int java_lang_AssertionStatusDirectives::classEnabled_offset;
3704 int java_lang_AssertionStatusDirectives::packages_offset;
3705 int java_lang_AssertionStatusDirectives::packageEnabled_offset;
3706 int java_lang_AssertionStatusDirectives::deflt_offset;
3707 int java_nio_Buffer::_limit_offset;
3708 int java_util_concurrent_locks_AbstractOwnableSynchronizer::_owner_offset = 0;
3709 int sun_reflect_ConstantPool::_oop_offset;
3710 int sun_reflect_UnsafeStaticFieldAccessorImpl::_base_offset;
3711 
3712 
3713 // Support for java_lang_StackTraceElement
3714 
3715 void java_lang_StackTraceElement::set_fileName(oop element, oop value) {
3716   element->obj_field_put(fileName_offset, value);
3717 }
3718 


3724   element->obj_field_put(methodName_offset, value);
3725 }
3726 
3727 void java_lang_StackTraceElement::set_lineNumber(oop element, int value) {
3728   element->int_field_put(lineNumber_offset, value);
3729 }
3730 
3731 void java_lang_StackTraceElement::set_moduleName(oop element, oop value) {
3732   element->obj_field_put(moduleName_offset, value);
3733 }
3734 
3735 void java_lang_StackTraceElement::set_moduleVersion(oop element, oop value) {
3736   element->obj_field_put(moduleVersion_offset, value);
3737 }
3738 
3739 // Support for java_lang_StackFrameInfo
3740 void java_lang_StackFrameInfo::set_declaringClass(oop element, oop value) {
3741   element->obj_field_put(_declaringClass_offset, value);
3742 }
3743 
3744 void java_lang_StackFrameInfo::set_mid(oop element, short value) {
3745   element->short_field_put(_mid_offset, value);
3746 }
3747 
3748 void java_lang_StackFrameInfo::set_version(oop element, short value) {
3749   element->short_field_put(_version_offset, value);
3750 }
3751 
3752 void java_lang_StackFrameInfo::set_cpref(oop element, short value) {
3753   element->short_field_put(_cpref_offset, value);
3754 }
3755 
3756 void java_lang_StackFrameInfo::set_bci(oop element, int value) {
3757   element->int_field_put(_bci_offset, value);
3758 }
3759 
3760 void java_lang_StackFrameInfo::set_fileName(oop element, oop value) {
3761   element->obj_field_put(_fileName_offset, value);
3762 }
3763 
3764 void java_lang_StackFrameInfo::set_methodName(oop element, oop value) {
3765   element->obj_field_put(_methodName_offset, value);
3766 }
3767 
3768 void java_lang_StackFrameInfo::set_lineNumber(oop element, int value) {
3769   element->int_field_put(_lineNumber_offset, value);
3770 }
3771 
3772 void java_lang_LiveStackFrameInfo::set_monitors(oop element, oop value) {
3773   element->obj_field_put(_monitors_offset, value);
3774 }
3775 
3776 void java_lang_LiveStackFrameInfo::set_locals(oop element, oop value) {
3777   element->obj_field_put(_locals_offset, value);
3778 }
3779 
3780 void java_lang_LiveStackFrameInfo::set_operands(oop element, oop value) {
3781   element->obj_field_put(_operands_offset, value);
3782 }
3783 
3784 // Support for java Assertions - java_lang_AssertionStatusDirectives.
3785 
3786 void java_lang_AssertionStatusDirectives::set_classes(oop o, oop val) {
3787   o->obj_field_put(classes_offset, val);
3788 }
3789 




2170   }
2171 
2172   if (!version_matches(method(), version)) {
2173     // The method was redefined, accurate line number information isn't available
2174     java_lang_StackTraceElement::set_fileName(element(), NULL);
2175     java_lang_StackTraceElement::set_lineNumber(element(), -1);
2176   } else {
2177     // Fill in source file name and line number.
2178     Symbol* source = Backtrace::get_source_file_name(holder, version);
2179     if (ShowHiddenFrames && source == NULL)
2180       source = vmSymbols::unknown_class_name();
2181     oop filename = StringTable::intern(source, CHECK);
2182     java_lang_StackTraceElement::set_fileName(element(), filename);
2183 
2184     int line_number = Backtrace::get_line_number(method, bci);
2185     java_lang_StackTraceElement::set_lineNumber(element(), line_number);
2186   }
2187 }
2188 
2189 Method* java_lang_StackFrameInfo::get_method(Handle stackFrame, InstanceKlass* holder, TRAPS) {

2190   Handle mname(THREAD, stackFrame->obj_field(_memberName_offset));
2191   Method* method = (Method*)java_lang_invoke_MemberName::vmtarget(mname());
2192   // we should expand MemberName::name when Throwable uses StackTrace
2193   // MethodHandles::expand_MemberName(mname, MethodHandles::_suppress_defc|MethodHandles::_suppress_type, CHECK_NULL);
2194   return method;














2195 }
2196 
2197 void java_lang_StackFrameInfo::set_method_and_bci(Handle stackFrame, const methodHandle& method, int bci) {
2198   // set Method* or mid/cpref

2199   oop mname = stackFrame->obj_field(_memberName_offset);
2200   InstanceKlass* ik = method->method_holder();
2201   CallInfo info(method(), ik);
2202   MethodHandles::init_method_MemberName(mname, info);








2203   // set bci
2204   java_lang_StackFrameInfo::set_bci(stackFrame(), bci);
2205   // method may be redefined; store the version
2206   int version = method->constants()->version();
2207   assert((jushort)version == version, "version should be short");
2208   java_lang_StackFrameInfo::set_version(stackFrame(), (short)version);
2209 }
2210 
2211 void java_lang_StackFrameInfo::fill_methodInfo(Handle stackFrame, Handle stack_trace_element, TRAPS) {
2212   ResourceMark rm(THREAD);
2213   Handle k (THREAD, stackFrame->obj_field(_declaringClass_offset));
2214   InstanceKlass* holder = InstanceKlass::cast(java_lang_Class::as_Klass(k()));
2215   Method* method = java_lang_StackFrameInfo::get_method(stackFrame, holder, CHECK);













2216 












2217   short version = stackFrame->short_field(_version_offset);
2218   short bci = stackFrame->short_field(_bci_offset);
2219   int cpref = method->name_index();
2220   java_lang_StackTraceElement::fill_in(stack_trace_element, holder, method, version, bci, cpref, CHECK);

2221 }
2222 
2223 void java_lang_StackFrameInfo::compute_offsets() {
2224   Klass* k = SystemDictionary::StackFrameInfo_klass();
2225   compute_offset(_declaringClass_offset, k, vmSymbols::declaringClass_name(),  vmSymbols::class_signature());
2226   compute_offset(_memberName_offset,     k, vmSymbols::memberName_name(),  vmSymbols::object_signature());
2227   compute_offset(_bci_offset,            k, vmSymbols::bci_name(),         vmSymbols::short_signature());



2228   STACKFRAMEINFO_INJECTED_FIELDS(INJECTED_FIELD_COMPUTE_OFFSET);
2229 }
2230 
2231 void java_lang_LiveStackFrameInfo::compute_offsets() {
2232   Klass* k = SystemDictionary::LiveStackFrameInfo_klass();
2233   compute_offset(_monitors_offset,   k, vmSymbols::monitors_name(),    vmSymbols::object_array_signature());
2234   compute_offset(_locals_offset,     k, vmSymbols::locals_name(),      vmSymbols::object_array_signature());
2235   compute_offset(_operands_offset,   k, vmSymbols::operands_name(),    vmSymbols::object_array_signature());
2236 }
2237 
2238 void java_lang_reflect_AccessibleObject::compute_offsets() {
2239   Klass* k = SystemDictionary::reflect_AccessibleObject_klass();
2240   compute_offset(override_offset, k, vmSymbols::override_name(), vmSymbols::bool_signature());
2241 }
2242 
2243 jboolean java_lang_reflect_AccessibleObject::override(oop reflect) {
2244   assert(Universe::is_fully_initialized(), "Need to find another solution to the reflection problem");
2245   return (jboolean) reflect->bool_field(override_offset);
2246 }
2247 


3620 int java_lang_ref_Reference::discovered_offset;
3621 int java_lang_ref_Reference::static_lock_offset;
3622 int java_lang_ref_Reference::static_pending_offset;
3623 int java_lang_ref_Reference::number_of_fake_oop_fields;
3624 int java_lang_ref_SoftReference::timestamp_offset;
3625 int java_lang_ref_SoftReference::static_clock_offset;
3626 int java_lang_ClassLoader::parent_offset;
3627 int java_lang_System::static_in_offset;
3628 int java_lang_System::static_out_offset;
3629 int java_lang_System::static_err_offset;
3630 int java_lang_System::static_security_offset;
3631 int java_lang_StackTraceElement::declaringClass_offset;
3632 int java_lang_StackTraceElement::methodName_offset;
3633 int java_lang_StackTraceElement::fileName_offset;
3634 int java_lang_StackTraceElement::lineNumber_offset;
3635 int java_lang_StackTraceElement::moduleName_offset;
3636 int java_lang_StackTraceElement::moduleVersion_offset;
3637 int java_lang_StackFrameInfo::_declaringClass_offset;
3638 int java_lang_StackFrameInfo::_memberName_offset;
3639 int java_lang_StackFrameInfo::_bci_offset;




3640 int java_lang_StackFrameInfo::_version_offset;

3641 int java_lang_LiveStackFrameInfo::_monitors_offset;
3642 int java_lang_LiveStackFrameInfo::_locals_offset;
3643 int java_lang_LiveStackFrameInfo::_operands_offset;
3644 int java_lang_AssertionStatusDirectives::classes_offset;
3645 int java_lang_AssertionStatusDirectives::classEnabled_offset;
3646 int java_lang_AssertionStatusDirectives::packages_offset;
3647 int java_lang_AssertionStatusDirectives::packageEnabled_offset;
3648 int java_lang_AssertionStatusDirectives::deflt_offset;
3649 int java_nio_Buffer::_limit_offset;
3650 int java_util_concurrent_locks_AbstractOwnableSynchronizer::_owner_offset = 0;
3651 int sun_reflect_ConstantPool::_oop_offset;
3652 int sun_reflect_UnsafeStaticFieldAccessorImpl::_base_offset;
3653 
3654 
3655 // Support for java_lang_StackTraceElement
3656 
3657 void java_lang_StackTraceElement::set_fileName(oop element, oop value) {
3658   element->obj_field_put(fileName_offset, value);
3659 }
3660 


3666   element->obj_field_put(methodName_offset, value);
3667 }
3668 
3669 void java_lang_StackTraceElement::set_lineNumber(oop element, int value) {
3670   element->int_field_put(lineNumber_offset, value);
3671 }
3672 
3673 void java_lang_StackTraceElement::set_moduleName(oop element, oop value) {
3674   element->obj_field_put(moduleName_offset, value);
3675 }
3676 
3677 void java_lang_StackTraceElement::set_moduleVersion(oop element, oop value) {
3678   element->obj_field_put(moduleVersion_offset, value);
3679 }
3680 
3681 // Support for java_lang_StackFrameInfo
3682 void java_lang_StackFrameInfo::set_declaringClass(oop element, oop value) {
3683   element->obj_field_put(_declaringClass_offset, value);
3684 }
3685 




3686 void java_lang_StackFrameInfo::set_version(oop element, short value) {
3687   element->short_field_put(_version_offset, value);
3688 }
3689 




3690 void java_lang_StackFrameInfo::set_bci(oop element, int value) {
3691   element->int_field_put(_bci_offset, value);












3692 }
3693 
3694 void java_lang_LiveStackFrameInfo::set_monitors(oop element, oop value) {
3695   element->obj_field_put(_monitors_offset, value);
3696 }
3697 
3698 void java_lang_LiveStackFrameInfo::set_locals(oop element, oop value) {
3699   element->obj_field_put(_locals_offset, value);
3700 }
3701 
3702 void java_lang_LiveStackFrameInfo::set_operands(oop element, oop value) {
3703   element->obj_field_put(_operands_offset, value);
3704 }
3705 
3706 // Support for java Assertions - java_lang_AssertionStatusDirectives.
3707 
3708 void java_lang_AssertionStatusDirectives::set_classes(oop o, oop val) {
3709   o->obj_field_put(classes_offset, val);
3710 }
3711 


< prev index next >