diff options
-rw-r--r-- | lang/guile/Makefile | 4 | ||||
-rw-r--r-- | lang/guile/files/extra-patch-ia64 | 94 |
2 files changed, 98 insertions, 0 deletions
diff --git a/lang/guile/Makefile b/lang/guile/Makefile index b22736499ee8..87122278ed5a 100644 --- a/lang/guile/Makefile +++ b/lang/guile/Makefile @@ -39,6 +39,10 @@ PLIST_SUB+= THREADS:="" PLIST_SUB+= THREADS:="@comment " .endif +.if ${ARCH} == "ia64" +EXTRA_PATCHES= ${FILESDIR}/extra-patch-ia64 +.endif + post-extract: cd ${WRKSRC}; ${CHMOD} u+w ${REINPLACE_FILES} @${FIND} ${WRKSRC}/doc -name "*.info*" -delete diff --git a/lang/guile/files/extra-patch-ia64 b/lang/guile/files/extra-patch-ia64 new file mode 100644 index 000000000000..87035da6dcfe --- /dev/null +++ b/lang/guile/files/extra-patch-ia64 @@ -0,0 +1,94 @@ +--- libguile/continuations.c.orig Fri Sep 12 18:58:00 2003 ++++ libguile/continuations.c Wed Nov 24 07:50:54 2004 +@@ -114,15 +114,6 @@ + return 1; + } + +-#ifdef __ia64__ +-struct rv +-{ +- long retval; +- long first_return; +-}; +-extern struct rv ia64_getcontext (ucontext_t *) __asm__ ("getcontext"); +-#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. */ +@@ -135,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; +@@ -162,17 +150,15 @@ + memcpy (continuation->stack, src, sizeof (SCM_STACKITEM) * stack_size); + + #ifdef __ia64__ +- rv = ia64_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; +@@ -235,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 Wed Nov 24 07:41:44 2004 ++++ libguile/gc.c Wed Nov 24 07:53:51 2004 +@@ -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 Sun Sep 5 23:05:37 2004 ++++ libguile/init.c Wed Nov 24 07:59:48 2004 +@@ -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 22:41:32 2002 ++++ libguile/root.c Wed Nov 24 08:00:14 2004 +@@ -254,6 +254,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; |