summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--libguile/continuations.c2
-rw-r--r--libguile/stacks.c2
-rw-r--r--libguile/vm.c5
-rw-r--r--libguile/vm.h3
4 files changed, 4 insertions, 8 deletions
diff --git a/libguile/continuations.c b/libguile/continuations.c
index 7cc3cea10..c0a2bd8ae 100644
--- a/libguile/continuations.c
+++ b/libguile/continuations.c
@@ -186,7 +186,7 @@ scm_i_continuation_to_frame (SCM continuation, struct scm_frame *frame)
stack_top = data->stack_bottom + data->stack_size;
frame->stack_holder = data;
frame->fp_offset = stack_top - (data->fp + data->reloc);
- frame->sp_offset = stack_top - (data->sp + data->reloc);
+ frame->sp_offset = data->stack_size;
frame->ip = data->ra;
return 1;
diff --git a/libguile/stacks.c b/libguile/stacks.c
index ec3ec789f..366176b10 100644
--- a/libguile/stacks.c
+++ b/libguile/stacks.c
@@ -330,7 +330,7 @@ SCM_DEFINE (scm_make_stack, "make-stack", 1, 0, 1,
kind = SCM_VM_FRAME_KIND_CONT;
frame.stack_holder = c;
frame.fp_offset = stack_top - (c->fp + c->reloc);
- frame.sp_offset = stack_top - (c->sp + c->reloc);
+ frame.sp_offset = c->stack_size;
frame.ip = c->ra;
}
else if (SCM_VM_FRAME_P (obj))
diff --git a/libguile/vm.c b/libguile/vm.c
index d5a72727f..74dce6351 100644
--- a/libguile/vm.c
+++ b/libguile/vm.c
@@ -120,7 +120,7 @@ scm_i_vm_cont_to_frame (SCM cont, struct scm_frame *frame)
stack_top = data->stack_bottom + data->stack_size;
frame->stack_holder = data;
frame->fp_offset = stack_top - (data->fp + data->reloc);
- frame->sp_offset = stack_top - (data->sp + data->reloc);
+ frame->sp_offset = data->stack_size;
frame->ip = data->ra;
return 1;
@@ -142,7 +142,6 @@ scm_i_vm_capture_stack (union scm_vm_stack_element *stack_top,
p->stack_bottom = scm_gc_malloc (p->stack_size * sizeof (*p->stack_bottom),
"capture_vm_cont");
p->ra = ra;
- p->sp = sp;
p->fp = fp;
memcpy (p->stack_bottom, sp, p->stack_size * sizeof (*p->stack_bottom));
p->reloc = (p->stack_bottom + p->stack_size) - stack_top;
@@ -178,7 +177,7 @@ vm_return_to_continuation_inner (void *data_ptr)
memcpy (vp->stack_top - cp->stack_size,
cp->stack_bottom,
cp->stack_size * sizeof (*cp->stack_bottom));
- vm_restore_sp (vp, cp->sp + reloc);
+ vm_restore_sp (vp, vp->stack_top - cp->stack_size);
if (reloc)
{
diff --git a/libguile/vm.h b/libguile/vm.h
index adac08593..936633d21 100644
--- a/libguile/vm.h
+++ b/libguile/vm.h
@@ -79,9 +79,6 @@ SCM_INTERNAL void scm_i_vm_free_stack (struct scm_vm *vp);
#define SCM_F_VM_CONT_REWINDABLE 0x2
struct scm_vm_cont {
- /* FIXME: sp isn't needed, it's effectively the same as
- stack_bottom */
- union scm_vm_stack_element *sp;
union scm_vm_stack_element *fp;
scm_t_uint32 *ra;
scm_t_ptrdiff stack_size;