mirror of
https://git.savannah.gnu.org/git/guile.git
synced 2025-06-15 08:10:17 +02:00
* __scm.h (SCM_STACK_PTR): New macro. (Cast argument through
(void *) in order to avoid an aliasing warning; thanks to Bruce Korb.) * stackchk.h (SCM_STACK_OVERFLOW_P): Use SCM_STACK_PTR. * threads.c (suspend, launch_thread, scm_threads_mark_stacks): Use SCM_STACK_PTR. * threads.c (scm_threads_mark_stacks): Bugfix: Changed thread->base --> t->base. * eval.c (SCM_CEVAL): Don't cast argument of SCM_STACK_OVERFLOW_P.
This commit is contained in:
parent
d97f609a4a
commit
79f55b7c6b
5 changed files with 32 additions and 14 deletions
|
@ -1,3 +1,19 @@
|
||||||
|
2003-05-22 Mikael Djurfeldt <djurfeldt@nada.kth.se>
|
||||||
|
|
||||||
|
* __scm.h (SCM_STACK_PTR): New macro. (Cast argument through
|
||||||
|
(void *) in order to avoid an aliasing warning; thanks to Bruce
|
||||||
|
Korb.)
|
||||||
|
|
||||||
|
* stackchk.h (SCM_STACK_OVERFLOW_P): Use SCM_STACK_PTR.
|
||||||
|
|
||||||
|
* threads.c (suspend, launch_thread, scm_threads_mark_stacks): Use
|
||||||
|
SCM_STACK_PTR.
|
||||||
|
|
||||||
|
* threads.c (scm_threads_mark_stacks): Bugfix: Changed
|
||||||
|
thread->base --> t->base.
|
||||||
|
|
||||||
|
* eval.c (SCM_CEVAL): Don't cast argument of SCM_STACK_OVERFLOW_P.
|
||||||
|
|
||||||
2003-05-20 Marius Vollmer <marius.vollmer@uni-dortmund.de>
|
2003-05-20 Marius Vollmer <marius.vollmer@uni-dortmund.de>
|
||||||
|
|
||||||
* deprecated.h, deprecated.c (scm_makstr, scm_makfromstr,
|
* deprecated.h, deprecated.c (scm_makstr, scm_makfromstr,
|
||||||
|
|
|
@ -3,7 +3,7 @@
|
||||||
#ifndef SCM___SCM_H
|
#ifndef SCM___SCM_H
|
||||||
#define SCM___SCM_H
|
#define SCM___SCM_H
|
||||||
|
|
||||||
/* Copyright (C) 1995,1996,1998,1999,2000,2001,2002 Free Software Foundation, Inc.
|
/* Copyright (C) 1995,1996,1998,1999,2000,2001,2002, 2003 Free Software Foundation, Inc.
|
||||||
*
|
*
|
||||||
* This program is free software; you can redistribute it and/or modify
|
* This program is free software; you can redistribute it and/or modify
|
||||||
* it under the terms of the GNU General Public License as published by
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
@ -394,6 +394,10 @@ typedef short SCM_STACKITEM;
|
||||||
#else
|
#else
|
||||||
typedef long SCM_STACKITEM;
|
typedef long SCM_STACKITEM;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
/* Cast pointer through (void *) in order to avoid compiler warnings
|
||||||
|
when strict aliasing is enabled */
|
||||||
|
#define SCM_STACK_PTR(ptr) ((SCM_STACKITEM *) (void *) (ptr))
|
||||||
|
|
||||||
|
|
||||||
#define SCM_ASYNC_TICK /*fixme* should change names */ \
|
#define SCM_ASYNC_TICK /*fixme* should change names */ \
|
||||||
|
|
|
@ -1962,8 +1962,7 @@ SCM_CEVAL (SCM x, SCM env)
|
||||||
scm_last_debug_frame = &debug;
|
scm_last_debug_frame = &debug;
|
||||||
#endif
|
#endif
|
||||||
#ifdef EVAL_STACK_CHECKING
|
#ifdef EVAL_STACK_CHECKING
|
||||||
if (scm_stack_checking_enabled_p
|
if (scm_stack_checking_enabled_p && SCM_STACK_OVERFLOW_P (&proc))
|
||||||
&& SCM_STACK_OVERFLOW_P ((SCM_STACKITEM *) &proc))
|
|
||||||
{
|
{
|
||||||
#ifdef DEVAL
|
#ifdef DEVAL
|
||||||
debug.info->e.exp = x;
|
debug.info->e.exp = x;
|
||||||
|
|
|
@ -3,7 +3,7 @@
|
||||||
#ifndef SCM_STACKCHK_H
|
#ifndef SCM_STACKCHK_H
|
||||||
#define SCM_STACKCHK_H
|
#define SCM_STACKCHK_H
|
||||||
|
|
||||||
/* Copyright (C) 1995,1996,1998,2000 Free Software Foundation, Inc.
|
/* Copyright (C) 1995,1996,1998,2000, 2003 Free Software Foundation, Inc.
|
||||||
*
|
*
|
||||||
* This library is free software; you can redistribute it and/or
|
* This library is free software; you can redistribute it and/or
|
||||||
* modify it under the terms of the GNU Lesser General Public
|
* modify it under the terms of the GNU Lesser General Public
|
||||||
|
@ -36,10 +36,12 @@
|
||||||
#ifdef STACK_CHECKING
|
#ifdef STACK_CHECKING
|
||||||
# if SCM_STACK_GROWS_UP
|
# if SCM_STACK_GROWS_UP
|
||||||
# define SCM_STACK_OVERFLOW_P(s)\
|
# define SCM_STACK_OVERFLOW_P(s)\
|
||||||
(s > ((SCM_STACKITEM *) SCM_BASE (scm_rootcont) + SCM_STACK_LIMIT))
|
(SCM_STACK_PTR (s) \
|
||||||
|
> ((SCM_STACKITEM *) SCM_BASE (scm_rootcont) + SCM_STACK_LIMIT))
|
||||||
# else
|
# else
|
||||||
# define SCM_STACK_OVERFLOW_P(s)\
|
# define SCM_STACK_OVERFLOW_P(s)\
|
||||||
(s < ((SCM_STACKITEM *) SCM_BASE (scm_rootcont) - SCM_STACK_LIMIT))
|
(SCM_STACK_PTR (s) \
|
||||||
|
< ((SCM_STACKITEM *) SCM_BASE (scm_rootcont) - SCM_STACK_LIMIT))
|
||||||
# endif
|
# endif
|
||||||
# define SCM_CHECK_STACK\
|
# define SCM_CHECK_STACK\
|
||||||
{\
|
{\
|
||||||
|
|
|
@ -216,7 +216,7 @@ suspend ()
|
||||||
scm_thread *c = SCM_CURRENT_THREAD;
|
scm_thread *c = SCM_CURRENT_THREAD;
|
||||||
|
|
||||||
/* record top of stack for the GC */
|
/* record top of stack for the GC */
|
||||||
c->top = (SCM_STACKITEM *)&c;
|
c->top = SCM_STACK_PTR (&c);
|
||||||
/* save registers. */
|
/* save registers. */
|
||||||
SCM_FLUSH_REGISTER_WINDOWS;
|
SCM_FLUSH_REGISTER_WINDOWS;
|
||||||
setjmp (c->regs);
|
setjmp (c->regs);
|
||||||
|
@ -331,7 +331,7 @@ really_launch (SCM_STACKITEM *base, launch_data *data)
|
||||||
static void *
|
static void *
|
||||||
launch_thread (void *p)
|
launch_thread (void *p)
|
||||||
{
|
{
|
||||||
really_launch ((SCM_STACKITEM *)&p, (launch_data *)p);
|
really_launch (SCM_STACK_PTR (&p), (launch_data *) p);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -952,8 +952,7 @@ scm_threads_mark_stacks (void)
|
||||||
/* stack_len is long rather than sizet in order to guarantee
|
/* stack_len is long rather than sizet in order to guarantee
|
||||||
that &stack_len is long aligned */
|
that &stack_len is long aligned */
|
||||||
#if SCM_STACK_GROWS_UP
|
#if SCM_STACK_GROWS_UP
|
||||||
stack_len = ((SCM_STACKITEM *) (&t) -
|
stack_len = SCM_STACK_PTR (&t) - t->base;
|
||||||
(SCM_STACKITEM *) thread->base);
|
|
||||||
|
|
||||||
/* Protect from the C stack. This must be the first marking
|
/* Protect from the C stack. This must be the first marking
|
||||||
* done because it provides information about what objects
|
* done because it provides information about what objects
|
||||||
|
@ -973,8 +972,7 @@ scm_threads_mark_stacks (void)
|
||||||
scm_mark_locations (((size_t) t->base,
|
scm_mark_locations (((size_t) t->base,
|
||||||
(sizet) stack_len));
|
(sizet) stack_len));
|
||||||
#else
|
#else
|
||||||
stack_len = ((SCM_STACKITEM *) t->base -
|
stack_len = t->base - SCM_STACK_PTR (&t);
|
||||||
(SCM_STACKITEM *) (&t));
|
|
||||||
|
|
||||||
/* Protect from the C stack. This must be the first marking
|
/* Protect from the C stack. This must be the first marking
|
||||||
* done because it provides information about what objects
|
* done because it provides information about what objects
|
||||||
|
@ -991,8 +989,7 @@ scm_threads_mark_stacks (void)
|
||||||
((size_t) sizeof scm_save_regs_gc_mark
|
((size_t) sizeof scm_save_regs_gc_mark
|
||||||
/ sizeof (SCM_STACKITEM)));
|
/ sizeof (SCM_STACKITEM)));
|
||||||
|
|
||||||
scm_mark_locations ((SCM_STACKITEM *) &t,
|
scm_mark_locations (SCM_STACK_PTR (&t), stack_len);
|
||||||
stack_len);
|
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue