Skip to content

Commit 3b3e90e

Browse files
committed
8256924: ppc, ppcle, s390: JVM crashes at VM init after JDK-8254231
Reviewed-by: shade
1 parent ff6df15 commit 3b3e90e

File tree

4 files changed

+25
-4
lines changed

4 files changed

+25
-4
lines changed

src/hotspot/cpu/ppc/methodHandles_ppc.cpp

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -220,6 +220,13 @@ address MethodHandles::generate_method_handle_interpreter_entry(MacroAssembler*
220220
return NULL;
221221
}
222222

223+
// No need in interpreter entry for linkToNative for now.
224+
// Interpreter calls compiled entry through i2c.
225+
if (iid == vmIntrinsics::_linkToNative) {
226+
__ stop("Should not reach here"); // empty stubs make SG sick
227+
return NULL;
228+
}
229+
223230
Register argbase = R15_esp; // parameter (preserved)
224231
Register argslot = R3;
225232
Register temp1 = R6;
@@ -306,7 +313,10 @@ void MethodHandles::generate_method_handle_dispatch(MacroAssembler* _masm,
306313
if (receiver_reg != noreg) assert_different_registers(temp1, temp2, temp3, temp4, receiver_reg);
307314
if (member_reg != noreg) assert_different_registers(temp1, temp2, temp3, temp4, member_reg);
308315

309-
if (iid == vmIntrinsics::_invokeBasic) {
316+
if (iid == vmIntrinsics::_invokeBasic || iid == vmIntrinsics::_linkToNative) {
317+
if (iid == vmIntrinsics::_linkToNative) {
318+
assert(for_compiler_entry, "only compiler entry is supported");
319+
}
310320
// indirect through MH.form.vmentry.vmtarget
311321
jump_to_lambda_form(_masm, receiver_reg, R19_method, temp1, temp2, for_compiler_entry);
312322
} else {

src/hotspot/cpu/ppc/sharedRuntime_ppc.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1618,7 +1618,7 @@ static void gen_special_dispatch(MacroAssembler* masm,
16181618
member_arg_pos = method->size_of_parameters() - 1; // trailing MemberName argument
16191619
member_reg = R19_method; // known to be free at this point
16201620
has_receiver = MethodHandles::ref_kind_has_receiver(ref_kind);
1621-
} else if (iid == vmIntrinsics::_invokeBasic) {
1621+
} else if (iid == vmIntrinsics::_invokeBasic || iid == vmIntrinsics::_linkToNative) {
16221622
has_receiver = true;
16231623
} else {
16241624
fatal("unexpected intrinsic id %d", iid);

src/hotspot/cpu/s390/methodHandles_s390.cpp

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -250,6 +250,13 @@ address MethodHandles::generate_method_handle_interpreter_entry(MacroAssembler*
250250
return NULL;
251251
}
252252

253+
// No need in interpreter entry for linkToNative for now.
254+
// Interpreter calls compiled entry through i2c.
255+
if (iid == vmIntrinsics::_linkToNative) {
256+
__ should_not_reach_here(); // Empty stubs make SG sick.
257+
return NULL;
258+
}
259+
253260
// Z_R10: sender SP (must preserve; see prepare_to_jump_from_interprted)
254261
// Z_method: method
255262
// Z_ARG1 (Gargs): incoming argument list (must preserve)
@@ -364,7 +371,10 @@ void MethodHandles::generate_method_handle_dispatch(MacroAssembler* _masm,
364371
assert_different_registers(temp1, temp2, temp3, temp4, Z_R10);
365372
}
366373

367-
if (iid == vmIntrinsics::_invokeBasic) {
374+
if (iid == vmIntrinsics::_invokeBasic || iid == vmIntrinsics::_linkToNative) {
375+
if (iid == vmIntrinsics::_linkToNative) {
376+
assert(for_compiler_entry, "only compiler entry is supported");
377+
}
368378
__ pc(); // Just for the block comment.
369379
// Indirect through MH.form.vmentry.vmtarget.
370380
jump_to_lambda_form(_masm, receiver_reg, Z_method, Z_R1, temp3, for_compiler_entry);

src/hotspot/cpu/s390/sharedRuntime_s390.cpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -919,7 +919,8 @@ static void gen_special_dispatch(MacroAssembler *masm,
919919
member_reg = Z_R9; // Known to be free at this point.
920920
has_receiver = MethodHandles::ref_kind_has_receiver(ref_kind);
921921
} else {
922-
guarantee(special_dispatch == vmIntrinsics::_invokeBasic, "special_dispatch=%d", special_dispatch);
922+
guarantee(special_dispatch == vmIntrinsics::_invokeBasic || special_dispatch == vmIntrinsics::_linkToNative,
923+
"special_dispatch=%d", special_dispatch);
923924
has_receiver = true;
924925
}
925926

0 commit comments

Comments
 (0)