Subject: Re: Powerpc signal handler with floating point registers
To: None <port-powerpc@NetBSD.org>
From: chris zhang <sileizhang@yahoo.com>
List: port-powerpc
Date: 02/25/2005 18:02:14
Just tried -current (NetBSD 2.99.16). Still doesn't
seem to work.

Chris

--- chris zhang <sileizhang@yahoo.com> wrote:

> Hi,
> I'm using NetBSD 2.0-RC4 on a powerpc 603 processor
> which has the hardware floating point component
> enabled. I ran into a situation where it seems the
> powerpc floating point registers are not
> saved/restored properly by the signal handler. 
> 
> The following testing program has a floating
> computing
> loop inside "main" routine. It also sets up a
> SIGALRM
> handler to perform another floating point
> calculation
> periodically. When it runs, I got a lot of error
> message from the "fprintf" below, which means the
> signal handler probably interferes with the main
> program and does not restore the floating point
> registers when it returns.
> 
> Any idea why this could happen? I tested on i386
> ports
> and didn't find the same problem, so I guess the
> problem is architecture specific.
> 
> Thanks,
> Chris
> 
> #include <stdio.h>
> #include <signal.h>
> #include <sys/time.h>
> 
> int alarms;
> 
> void testB_alrm_handler(int sig)
> {
>  	static double x = 1.2;
>  	x = x*x;
>  	alarms++;
> }
> 
> int main(void)
> {
>  	register double new = 0;
>  	register double old = new;
> 	struct itimerval it;
> 
>  	signal(SIGALRM, testB_alrm_handler);
> 
>  	it.it_value.tv_sec = 0;
>  	it.it_value.tv_usec = 20000;
>  	it.it_interval = it.it_value;
>  	setitimer(ITIMER_REAL, &it, NULL);
> 
>  	for (;;) {
>  		new = new + 1;
>  		if (new != old + 1)
>  			fprintf(stderr, "ERROR. alarms=%d %g != %g\n",
> alarms, new, old);
>  		old = new;
>  	}
> }
> 
> 
> 	
> 		
> __________________________________ 
> Do you Yahoo!? 
> Yahoo! Mail - You care about security. So do we. 
> http://promotions.yahoo.com/new_mail
> 



		
__________________________________ 
Do you Yahoo!? 
Read only the mail you want - Yahoo! Mail SpamGuard. 
http://promotions.yahoo.com/new_mail