8080650: Enable stubs to use frame pointers correctly
Summary: Change MacroAssembler::verified_entry() to set up RBP correctly when generating stub code.
Reviewed-by: kvn
--- a/hotspot/src/cpu/x86/vm/macroAssembler_x86.cpp Thu Oct 15 11:20:04 2015 +0000
+++ b/hotspot/src/cpu/x86/vm/macroAssembler_x86.cpp Thu Oct 15 17:38:41 2015 +0200
@@ -6247,7 +6247,9 @@
// Save caller's stack pointer into RBP if the frame pointer is preserved.
if (PreserveFramePointer) {
movptr(rbp, rsp);
- addptr(rbp, framesize + wordSize);
+ if (framesize > 0) {
+ addptr(rbp, framesize);
+ }
}
}
--- a/hotspot/src/cpu/x86/vm/x86_32.ad Thu Oct 15 11:20:04 2015 +0000
+++ b/hotspot/src/cpu/x86/vm/x86_32.ad Thu Oct 15 17:38:41 2015 +0200
@@ -580,7 +580,11 @@
st->print("MOV [ESP + #%d], EBP\t# Save EBP",framesize);
if (PreserveFramePointer) {
st->print("\n\t");
- st->print("MOV EBP, [ESP + #%d]\t# Save the caller's SP into EBP", (framesize + wordSize));
+ st->print("MOV EBP, ESP\t# Save the caller's SP into EBP");
+ if (framesize > 0) {
+ st->print("\n\t");
+ st->print("ADD EBP, #%d", framesize);
+ }
}
}
--- a/hotspot/src/cpu/x86/vm/x86_64.ad Thu Oct 15 11:20:04 2015 +0000
+++ b/hotspot/src/cpu/x86/vm/x86_64.ad Thu Oct 15 17:38:41 2015 +0200
@@ -867,7 +867,11 @@
st->print("movq [rsp + #%d], rbp\t# Save rbp",framesize);
if (PreserveFramePointer) {
st->print("\n\t");
- st->print("movq rbp, [rsp + #%d]\t# Save the caller's SP into rbp", (framesize + wordSize));
+ st->print("movq rbp, rsp\t# Save the caller's SP into rbp");
+ if (framesize > 0) {
+ st->print("\n\t");
+ st->print("addq rbp, #%d", framesize);
+ }
}
}