src/share/vm/code/relocInfo.hpp
Index Unified diffs Context diffs Sdiffs Patch New Old Previous File Next File hotspot Cdiff src/share/vm/code/relocInfo.hpp

src/share/vm/code/relocInfo.hpp

Print this page

        

*** 1042,1072 **** public: // "cached_value" points to the first associated set-oop. // The oop_limit helps find the last associated set-oop. // (See comments at the top of this file.) ! static RelocationHolder spec(address cached_value) { RelocationHolder rh = newHolder(); ! new(rh) virtual_call_Relocation(cached_value); return rh; } ! virtual_call_Relocation(address cached_value) { _cached_value = cached_value; assert(cached_value != NULL, "first oop address must be specified"); } - private: - address _cached_value; // location of set-value instruction - friend class RelocIterator; virtual_call_Relocation() { } - public: address cached_value(); // data is packed as scaled offsets in "2_ints" format: [f l] or [Ff Ll] // oop_limit is set to 0 if the limit falls somewhere within the call. // When unpacking, a zero oop_limit is taken to refer to the end of the call. // (This has the effect of bringing in the call's delay slot on SPARC.) void pack_data_to(CodeSection* dest); --- 1042,1076 ---- public: // "cached_value" points to the first associated set-oop. // The oop_limit helps find the last associated set-oop. // (See comments at the top of this file.) ! static RelocationHolder spec(address cached_value, jint method_index = 0) { RelocationHolder rh = newHolder(); ! new(rh) virtual_call_Relocation(cached_value, method_index); return rh; } ! private: ! address _cached_value; // location of set-value instruction ! jint _method_index; // resolved method for a Java call ! ! virtual_call_Relocation(address cached_value, int method_index) { _cached_value = cached_value; + _method_index = method_index; assert(cached_value != NULL, "first oop address must be specified"); } friend class RelocIterator; virtual_call_Relocation() { } public: address cached_value(); + int method_index() { return _method_index; } + Method* method_value(); + // data is packed as scaled offsets in "2_ints" format: [f l] or [Ff Ll] // oop_limit is set to 0 if the limit falls somewhere within the call. // When unpacking, a zero oop_limit is taken to refer to the end of the call. // (This has the effect of bringing in the call's delay slot on SPARC.) void pack_data_to(CodeSection* dest);
*** 1078,1098 **** class opt_virtual_call_Relocation : public CallRelocation { relocInfo::relocType type() { return relocInfo::opt_virtual_call_type; } public: ! static RelocationHolder spec() { RelocationHolder rh = newHolder(); ! new(rh) opt_virtual_call_Relocation(); return rh; } private: friend class RelocIterator; ! opt_virtual_call_Relocation() { } public: void clear_inline_cache(); // find the matching static_stub address static_stub(); }; --- 1082,1114 ---- class opt_virtual_call_Relocation : public CallRelocation { relocInfo::relocType type() { return relocInfo::opt_virtual_call_type; } public: ! static RelocationHolder spec(int method_index = 0) { RelocationHolder rh = newHolder(); ! new(rh) opt_virtual_call_Relocation(method_index); return rh; } private: + jint _method_index; // resolved method for a Java call + + opt_virtual_call_Relocation(int method_index) { + _method_index = method_index; + } + friend class RelocIterator; ! opt_virtual_call_Relocation() {} public: + int method_index() { return _method_index; } + Method* method_value(); + + void pack_data_to(CodeSection* dest); + void unpack_data(); + void clear_inline_cache(); // find the matching static_stub address static_stub(); };
*** 1100,1120 **** class static_call_Relocation : public CallRelocation { relocInfo::relocType type() { return relocInfo::static_call_type; } public: ! static RelocationHolder spec() { RelocationHolder rh = newHolder(); ! new(rh) static_call_Relocation(); return rh; } private: friend class RelocIterator; ! static_call_Relocation() { } public: void clear_inline_cache(); // find the matching static_stub address static_stub(); }; --- 1116,1148 ---- class static_call_Relocation : public CallRelocation { relocInfo::relocType type() { return relocInfo::static_call_type; } public: ! static RelocationHolder spec(int method_index = 0) { RelocationHolder rh = newHolder(); ! new(rh) static_call_Relocation(method_index); return rh; } private: + jint _method_index; // resolved method for a Java call + + static_call_Relocation(int method_index) { + _method_index = method_index; + } + friend class RelocIterator; ! static_call_Relocation() {} public: + int method_index() { return _method_index; } + Method* method_value(); + + void pack_data_to(CodeSection* dest); + void unpack_data(); + void clear_inline_cache(); // find the matching static_stub address static_stub(); };
src/share/vm/code/relocInfo.hpp
Index Unified diffs Context diffs Sdiffs Patch New Old Previous File Next File