1
Fork 0
mirror of https://git.savannah.gnu.org/git/guile.git synced 2025-05-20 11:40:18 +02:00

* init.c (scm_boot_guile): Add level of indirection to

scm_boot_guile_1() to ensure that stack base pointer is properly
initialized.  There was no guarantee that variable i was the
highest/lowest variable on stack (i.e. the call frame of
scm_boot_guile was not completely protected from gc).
This commit is contained in:
Jim Blandy 1996-10-05 17:47:51 +00:00
parent 00fb6d20d9
commit c275ddc708

View file

@ -316,6 +316,13 @@ typedef long setjmp_type;
* prohibited.
*/
static int scm_boot_guile_1 SCM_P ((SCM_STACKITEM *base,
char **result,
int argc, char **argv,
FILE *in, FILE *out, FILE *err,
void (*init_func) (),
char *boot_cmd));
int
scm_boot_guile (result, argc, argv, in, out, err, init_func, boot_cmd)
char ** result;
@ -326,10 +333,27 @@ scm_boot_guile (result, argc, argv, in, out, err, init_func, boot_cmd)
FILE * err;
void (*init_func) ();
char * boot_cmd;
{
SCM_STACKITEM dummy;
return scm_boot_guile_1 (&dummy, result, argc, argv, in, out, err,
init_func, boot_cmd);
}
static int
scm_boot_guile_1 (base, result, argc, argv, in, out, err, init_func, boot_cmd)
SCM_STACKITEM *base;
char ** result;
int argc;
char ** argv;
FILE * in;
FILE * out;
FILE * err;
void (*init_func) ();
char * boot_cmd;
{
static int initialized = 0;
static int live = 0;
SCM_STACKITEM i;
setjmp_type setjmp_val;
int stat;
@ -345,7 +369,7 @@ scm_boot_guile (result, argc, argv, in, out, err, init_func, boot_cmd)
if (initialized)
{
scm_restart_stack (&i);
scm_restart_stack (base);
}
else
{
@ -357,7 +381,7 @@ scm_boot_guile (result, argc, argv, in, out, err, init_func, boot_cmd)
#ifdef USE_THREADS
scm_init_threads (&i);
#endif
scm_start_stack (&i, in, out, err);
scm_start_stack (base, in, out, err);
scm_init_gsubr ();
scm_init_feature ();
scm_init_alist ();