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