Anton,

On Jaguar (10.2.1), your changes produce the following errors:

signals.c: In function `bsd_signal':
signals.c:77: `SA_ONSTACK' undeclared (first use in this function)
signals.c:77: (Each undeclared identifier is reported only once
signals.c:77: for each function it appears in.)
signals.c: In function `install_signal_handlers':
signals.c:359: `stack_t' undeclared (first use in this function)
signals.c:359: parse error before `sigstack'
signals.c:362: `sigstack' undeclared (first use in this function)
signals.c:362: `SIGSTKSZ' undeclared (first use in this function)
signals.c:365: warning: implicit declaration of function `sigaltstack'
signals.c:365: parse error before `)'

DaR

On 10/25/02 2:39 AM, "Anton Ertl" <[EMAIL PROTECTED]> wrote:

> Anton Ertl wrote:
>> I don't see a good way to prevent such things in every case, so I
>> would recommend leaving Gforth as it is (i.e., direct threaded), and
>> closing the bug report.
> 
> I have found a way to prevent such things in general; the following
> patch seems to fix the problem.
> 
> - anton
> 
> Index: engine/main.c
> ===================================================================
> RCS file: /usr/local/lib/cvs-repository/src-master/gforth/engine/main.c,v
> retrieving revision 1.40
> diff -u -r1.40 main.c
> --- main.c    2000/09/23 15:47:08    1.40
> +++ main.c    2002/10/25 09:35:59
> @@ -82,7 +82,7 @@
> #endif
> 
> #ifdef HAS_DEBUG
> -static int debug=0;
> +int debug=0;
> #else
> # define debug 0
> # define perror(x...)
> Index: engine/signals.c
> ===================================================================
> RCS file: /usr/local/lib/cvs-repository/src-master/gforth/engine/signals.c,v
> retrieving revision 1.11
> diff -u -r1.11 signals.c
> --- signals.c    2000/09/23 15:47:08    1.11
> +++ signals.c    2002/10/25 09:35:59
> @@ -46,6 +46,7 @@
> 
> UCell cols=DEFAULTCOLS;
> UCell rows=DEFAULTROWS;
> +extern int debug;
> 
> #ifndef SA_NODEFER
> #define SA_NODEFER 0
> @@ -60,7 +61,7 @@
> 
>  action.sa_sigaction=handler;
>  sigemptyset(&action.sa_mask);
> -  action.sa_flags=SA_RESTART|SA_NODEFER|SA_SIGINFO; /* pass siginfo */
> +  action.sa_flags=SA_RESTART|SA_NODEFER|SA_SIGINFO|SA_ONSTACK; /* pass
> siginfo */
>  sigaction(sig, &action, NULL);
> }
> #endif
> @@ -73,7 +74,7 @@
> 
>  act.sa_handler=func;
>  sigemptyset(&act.sa_mask);
> -  act.sa_flags=SA_NODEFER;
> +  act.sa_flags=SA_NODEFER|SA_ONSTACK;
>  if (sigaction(signo,&act,&oact) < 0)
>    return SIG_ERR;
>  else
> @@ -355,6 +356,16 @@
>  };
>  int i;
>  void (*throw_handler)() = die_on_signal ? graceful_exit : signal_throw;
> +  stack_t sigstack;
> +  int sas_retval=-1;
> +
> +  sigstack.ss_size=SIGSTKSZ+50*sizeof(void*);
> +  if ((sigstack.ss_sp = malloc(sigstack.ss_size)) != NULL) {
> +    sigstack.ss_flags=0;
> +    sas_retval=sigaltstack(&sigstack,(stack_t *)0);
> +  }
> +  if (debug)
> +    fprintf(stderr,"sigaltstack: %s\n",strerror(sas_retval));
> 
> #define DIM(X)        (sizeof (X) / sizeof *(X))
> /*
> 
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: [EMAIL PROTECTED]
> For additional commands, e-mail: [EMAIL PROTECTED]
> 


---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to