From 33b14b6f0c236072e1783043b32c80afc75b2fef Mon Sep 17 00:00:00 2001 From: Stephen Adams Date: Sat, 7 Aug 1993 00:15:54 +0000 Subject: [PATCH] Fix for re-entrant foreign function: saves C stack & frame pointers --- v7/src/microcode/utils.c | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) 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); } -- 2.25.1