summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndy Wingo <wingo@pobox.com>2019-04-26 12:45:16 +0200
committerAndy Wingo <wingo@pobox.com>2019-04-26 12:45:16 +0200
commit14e64a8b57ff0abb9140db37268ca24fe4980cd0 (patch)
tree0005bbbf0453f7153d0c03476d4f4c31c087aa65
parent5b45f04cc8410d0308cdef02d9ed0be383281610 (diff)
downloadguile-14e64a8b57ff0abb9140db37268ca24fe4980cd0.tar.gz
Ensure stack alignment in JIT code.
* libguile/jit.c (emit_entry_trampoline): Explicitly align stack.
-rw-r--r--libguile/jit.c4
1 files changed, 4 insertions, 0 deletions
diff --git a/libguile/jit.c b/libguile/jit.c
index a5317928c..f10e2674e 100644
--- a/libguile/jit.c
+++ b/libguile/jit.c
@@ -1282,6 +1282,8 @@ emit_entry_trampoline (scm_jit_state *j)
if (jit_fpr_is_callee_save (fprs[i]))
jit_pushr_d (j->jit, fprs[i]);
+ size_t alignment = jit_align_stack (j->jit, 0);
+
/* Load our reserved registers: THREAD and SP. Also load IP for the
mcode jump. */
jit_load_args_2 (j->jit, thread_operand (),
@@ -1297,6 +1299,8 @@ emit_entry_trampoline (scm_jit_state *j)
/* Initialize global exit_mcode to point here. */
exit_mcode = jit_address (j->jit);
+ jit_shrink_stack (j->jit, alignment);
+
/* Restore callee-save registers. */
for (size_t i = 0; i < fpr_count; i++)
if (jit_fpr_is_callee_save (fprs[fpr_count - i - 1]))