aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authoraph <none@none>2014-08-21 11:56:52 -0400
committeraph <none@none>2014-08-21 11:56:52 -0400
commit5d8e6e64e57f7faaed8e64ec4022d50f2f07ccb8 (patch)
tree03d96d12892d7157557c4970d9d97b7479ab8543
parent74848a16286108955eb312a16d1cda776c654815 (diff)
Unwind native AArch64 frames.
-rw-r--r--src/os_cpu/linux_aarch64/vm/os_linux_aarch64.cpp8
1 files changed, 6 insertions, 2 deletions
diff --git a/src/os_cpu/linux_aarch64/vm/os_linux_aarch64.cpp b/src/os_cpu/linux_aarch64/vm/os_linux_aarch64.cpp
index 3912f0276..b345bace4 100644
--- a/src/os_cpu/linux_aarch64/vm/os_linux_aarch64.cpp
+++ b/src/os_cpu/linux_aarch64/vm/os_linux_aarch64.cpp
@@ -172,10 +172,14 @@ frame os::fetch_frame_from_context(void* ucVoid) {
return frame(sp, fp, epc.pc());
}
-// By default, gcc always save frame pointer (%ebp/%rbp) on stack. It may get
-// turned off by -fomit-frame-pointer,
+// By default, gcc always saves frame pointer rfp on this stack. This
+// may get turned off by -fomit-frame-pointer.
frame os::get_sender_for_C_frame(frame* fr) {
+#ifdef BUILTIN_SIM
return frame(fr->sender_sp(), fr->link(), fr->sender_pc());
+#else
+ return frame(fr->link(), fr->link(), fr->sender_pc());
+#endif
}
intptr_t* _get_previous_fp() {