8256986: [PPC64] C2 crashes when accessing nonexisting jvms of CallLeafDirectNode
Reviewed-by: clanger
This commit is contained in:
parent
644271e7a4
commit
d51e2ab219
@ -1115,11 +1115,17 @@ int MachCallDynamicJavaNode::ret_addr_offset() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
int MachCallRuntimeNode::ret_addr_offset() {
|
int MachCallRuntimeNode::ret_addr_offset() {
|
||||||
|
if (rule() == CallRuntimeDirect_rule) {
|
||||||
|
// CallRuntimeDirectNode uses call_c.
|
||||||
#if defined(ABI_ELFv2)
|
#if defined(ABI_ELFv2)
|
||||||
return 28;
|
return 28;
|
||||||
#else
|
#else
|
||||||
return 40;
|
return 40;
|
||||||
#endif
|
#endif
|
||||||
|
}
|
||||||
|
assert(rule() == CallLeafDirect_rule, "unexpected node with rule %u", rule());
|
||||||
|
// CallLeafDirectNode uses bl.
|
||||||
|
return 4;
|
||||||
}
|
}
|
||||||
|
|
||||||
int MachCallNativeNode::ret_addr_offset() {
|
int MachCallNativeNode::ret_addr_offset() {
|
||||||
@ -3578,6 +3584,7 @@ encode %{
|
|||||||
call->_tf = _tf;
|
call->_tf = _tf;
|
||||||
call->_entry_point = _entry_point;
|
call->_entry_point = _entry_point;
|
||||||
call->_cnt = _cnt;
|
call->_cnt = _cnt;
|
||||||
|
call->_guaranteed_safepoint = true;
|
||||||
call->_oop_map = _oop_map;
|
call->_oop_map = _oop_map;
|
||||||
call->_jvms = _jvms;
|
call->_jvms = _jvms;
|
||||||
call->_jvmadj = _jvmadj;
|
call->_jvmadj = _jvmadj;
|
||||||
@ -3778,6 +3785,7 @@ encode %{
|
|||||||
call->_tf = _tf;
|
call->_tf = _tf;
|
||||||
call->_entry_point = _entry_point;
|
call->_entry_point = _entry_point;
|
||||||
call->_cnt = _cnt;
|
call->_cnt = _cnt;
|
||||||
|
call->_guaranteed_safepoint = false;
|
||||||
call->_oop_map = _oop_map;
|
call->_oop_map = _oop_map;
|
||||||
guarantee(!_jvms, "You must clone the jvms and adapt the offsets by fix_jvms().");
|
guarantee(!_jvms, "You must clone the jvms and adapt the offsets by fix_jvms().");
|
||||||
call->_jvms = NULL;
|
call->_jvms = NULL;
|
||||||
@ -3785,7 +3793,6 @@ encode %{
|
|||||||
call->_in_rms = _in_rms;
|
call->_in_rms = _in_rms;
|
||||||
call->_nesting = _nesting;
|
call->_nesting = _nesting;
|
||||||
|
|
||||||
|
|
||||||
// New call needs all inputs of old call.
|
// New call needs all inputs of old call.
|
||||||
// Req...
|
// Req...
|
||||||
for (uint i = 0; i < req(); ++i) {
|
for (uint i = 0; i < req(); ++i) {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user