From: Stephen Adams Date: Sat, 7 Aug 1993 00:15:54 +0000 (+0000) Subject: Fix for re-entrant foreign function: saves C stack & frame pointers X-Git-Tag: 20090517-FFI~8117 X-Git-Url: https://birchwood-abbey.net/git?a=commitdiff_plain;h=33b14b6f0c236072e1783043b32c80afc75b2fef;p=mit-scheme.git Fix for re-entrant foreign function: saves C stack & frame pointers --- diff --git a/v7/src/microcode/utils.c b/v7/src/microcode/utils.c index 0ba965548..51602f097 100644 --- a/v7/src/microcode/utils.c +++ b/v7/src/microcode/utils.c @@ -1,6 +1,6 @@ /* -*-C-*- -$Id: utils.c,v 9.60 1993/08/03 08:30:06 gjr Exp $ +$Id: utils.c,v 9.61 1993/08/07 00:15:54 adams Exp $ Copyright (c) 1987-1993 Massachusetts Institute of Technology @@ -1093,6 +1093,7 @@ extern SCHEME_OBJECT EXFUN (Re_Enter_Interpreter, (void)); extern SCHEME_OBJECT EXFUN (C_call_scheme, (SCHEME_OBJECT, long, SCHEME_OBJECT *)); + SCHEME_OBJECT DEFUN (C_call_scheme, (proc, nargs, argvec), SCHEME_OBJECT proc @@ -1100,6 +1101,11 @@ DEFUN (C_call_scheme, (proc, nargs, argvec), AND SCHEME_OBJECT * argvec) { SCHEME_OBJECT primitive, prim_lexpr, * sp, result; + + extern void *C_Frame_Pointer, *C_Stack_Pointer; + void *cfp, *csp; + + cfp = C_Frame_Pointer, csp = C_Stack_Pointer; primitive = (Regs [REGBLOCK_PRIMITIVE]); prim_lexpr = (Regs [REGBLOCK_LEXPR_ACTUALS]); @@ -1140,5 +1146,7 @@ DEFUN (C_call_scheme, (proc, nargs, argvec), Regs [REGBLOCK_LEXPR_ACTUALS] = prim_lexpr; Regs [REGBLOCK_PRIMITIVE] = primitive; + C_Frame_Pointer = cfp; + C_Stack_Pointer = csp; return (result); }