--- libguile/continuations.c.orig Sat Dec 7 14:41:31 2002
+++ libguile/continuations.c Sun Oct 19 21:44:01 2003
@@ -114,16 +114,6 @@
return 1;
}
-#ifdef __ia64__
-struct rv
-{
- long retval;
- long first_return;
-};
-extern struct rv getcontext (ucontext_t *);
-extern int setcontext (ucontext_t *);
-#endif /* __ia64__ */
-
/* this may return more than once: the first time with the escape
procedure, then subsequently with the value to be passed to the
continuation. */
@@ -136,9 +126,6 @@
scm_t_contregs *rootcont = SCM_CONTREGS (scm_rootcont);
long stack_size;
SCM_STACKITEM * src;
-#ifdef __ia64__
- struct rv rv;
-#endif
SCM_ENTER_A_SECTION;
SCM_FLUSH_REGISTER_WINDOWS;
@@ -163,17 +150,15 @@
memcpy (continuation->stack, src, sizeof (SCM_STACKITEM) * stack_size);
#ifdef __ia64__
- rv = getcontext (&continuation->ctx);
- if (rv.first_return)
+ continuation->backing_store = NULL;
+ getcontext(&continuation->ctx);
+ if (continuation->backing_store == NULL)
{
continuation->backing_store_size =
- continuation->ctx.uc_mcontext.sc_ar_bsp -
- __libc_ia64_register_backing_store_base;
- continuation->backing_store = NULL;
+ continuation->ctx.uc_mcontext.mc_special.bspstore - (4UL << 61);
continuation->backing_store =
scm_must_malloc (continuation->backing_store_size, FUNC_NAME);
- memcpy (continuation->backing_store,
- (void *) __libc_ia64_register_backing_store_base,
+ memcpy (continuation->backing_store, (void *)(4UL << 61),
continuation->backing_store_size);
*first = 1;
return cont;
@@ -236,8 +221,7 @@
continuation->throw_value = val;
#ifdef __ia64__
- memcpy ((void *) __libc_ia64_register_backing_store_base,
- continuation->backing_store,
+ memcpy ((void *)(4UL << 61), continuation->backing_store,
continuation->backing_store_size);
setcontext (&continuation->ctx);
#else
--- libguile/gc.c.orig Sun Apr 20 11:16:59 2003
+++ libguile/gc.c Sun Oct 19 21:44:01 2003
@@ -1041,8 +1041,8 @@
scm_mark_locations ((SCM_STACKITEM *) &ctx.uc_mcontext, \
((size_t) (sizeof (SCM_STACKITEM) - 1 + sizeof ctx.uc_mcontext) \
/ sizeof (SCM_STACKITEM))); \
- bot = (SCM_STACKITEM *) __libc_ia64_register_backing_store_base; \
- top = (SCM_STACKITEM *) ctx.uc_mcontext.sc_ar_bsp; \
+ bot = (SCM_STACKITEM *) (4UL << 61); \
+ top = (SCM_STACKITEM *) ctx.uc_mcontext.mc_special.bspstore; \
scm_mark_locations (bot, top - bot); } while (0)
#else
# define SCM_MARK_BACKING_STORE()
--- libguile/init.c.orig Sat Dec 7 14:41:32 2002
+++ libguile/init.c Sun Oct 19 21:44:01 2003
@@ -188,6 +188,7 @@
{
scm_t_contregs *contregs = scm_must_malloc (sizeof (scm_t_contregs),
"continuation");
+ memset(contregs, 0, sizeof(*contregs));
contregs->num_stack_items = 0;
contregs->seq = 0;
SCM_NEWSMOB (scm_rootcont, scm_tc16_continuation, contregs);
--- libguile/root.c.orig Sat Dec 7 14:41:32 2002
+++ libguile/root.c Sun Oct 19 21:44:01 2003
@@ -253,7 +253,7 @@
{
scm_t_contregs *contregs = scm_must_malloc (sizeof (scm_t_contregs),
"inferior root continuation");
-
+ memset(contregs, 0, sizeof(*contregs));
contregs->num_stack_items = 0;
contregs->dynenv = SCM_EOL;
contregs->base = stack_start;