8255233: InterpreterRuntime::at_unwind should be a JRT_LEAF
Reviewed-by: coleenp, dholmes
diff --git a/src/hotspot/cpu/aarch64/interp_masm_aarch64.cpp b/src/hotspot/cpu/aarch64/interp_masm_aarch64.cpp
index 44b9f59..0963215 100644
--- a/src/hotspot/cpu/aarch64/interp_masm_aarch64.cpp
+++ b/src/hotspot/cpu/aarch64/interp_masm_aarch64.cpp
@@ -551,7 +551,9 @@
br(Assembler::AL, fast_path);
bind(slow_path);
push(state);
- call_VM(noreg, CAST_FROM_FN_PTR(address, InterpreterRuntime::at_unwind));
+ set_last_Java_frame(esp, rfp, (address)pc(), rscratch1);
+ super_call_VM_leaf(CAST_FROM_FN_PTR(address, InterpreterRuntime::at_unwind), rthread);
+ reset_last_Java_frame(true);
pop(state);
bind(fast_path);
diff --git a/src/hotspot/cpu/x86/interp_masm_x86.cpp b/src/hotspot/cpu/x86/interp_masm_x86.cpp
index 496a804..9274f29 100644
--- a/src/hotspot/cpu/x86/interp_masm_x86.cpp
+++ b/src/hotspot/cpu/x86/interp_masm_x86.cpp
@@ -1003,7 +1003,9 @@
jmp(fast_path);
bind(slow_path);
push(state);
- call_VM(noreg, CAST_FROM_FN_PTR(address, InterpreterRuntime::at_unwind));
+ set_last_Java_frame(rthread, noreg, rbp, (address)pc());
+ super_call_VM_leaf(CAST_FROM_FN_PTR(address, InterpreterRuntime::at_unwind), rthread);
+ reset_last_Java_frame(rthread, true);
pop(state);
NOT_LP64(get_thread(rthread);) // call_VM clobbered it, restore
bind(fast_path);
diff --git a/src/hotspot/share/interpreter/interpreterRuntime.cpp b/src/hotspot/share/interpreter/interpreterRuntime.cpp
index 40c7d09..07d3c0e 100644
--- a/src/hotspot/share/interpreter/interpreterRuntime.cpp
+++ b/src/hotspot/share/interpreter/interpreterRuntime.cpp
@@ -1172,10 +1172,7 @@
}
JRT_END
-JRT_ENTRY(void, InterpreterRuntime::at_unwind(JavaThread* thread))
- // JRT_END does an implicit safepoint check, hence we are guaranteed to block
- // if this is called during a safepoint
-
+JRT_LEAF(void, InterpreterRuntime::at_unwind(JavaThread* thread))
// This function is called by the interpreter when the return poll found a reason
// to call the VM. The reason could be that we are returning into a not yet safe
// to access frame. We handle that below.