[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: Re: Re: [LCP]SIGFPE
It might be messed up but that is how things are.
Though I only tested this in the Linux environment
may be in other Unix flavours it will work differently.
If anyone has tried this under any other enivronment
please let me know.
-devraj
On Fri, 12 Jul 2002 Jack Lloyd wrote :
>I find that odd, since SIGILL and SIGFPE are both in the class of
>signals
>sent where something is wrong with the hardware itself, and it
>does work
>for SIGILL.
>
>So the kernel re-executes the instruction until it works? That's
>messed up.
> -J
>
>On 12 Jul 2002, devraj sanyal wrote:
>
> > setjmp lngjmp doesnot help since the kernel
> > dispatches the signal again and again until
> > the condition of fpe is removed.
> >
> > e.g.
> > int i = 0;
> > SigHandler(int sig)
> > {
> > i = 5;
> > }
> >
> > int main ()
> > {
> > int j;
> > signal (SIGFPE, SigHandler);
> > j = 10/i;
> > printf ("here i am");
> > return 0;
> > }
> >
> >
> > this program works fine and here i am is printed
> > but without changing i the loop is infinite.
> >
> > devraj
> >
> >
> >
> > On Thu, 11 Jul 2002 Jack Lloyd wrote :
> > >Well, it actually only says that ignoring this signal can
>result in an
> > >infinte loop. I would presume this means using SIG_IGN,
>rather than
> > >requiring that the signal handler must abort.
> > >
> > >There is a workaround to this. Basically, use setjmp and
>longjmp. Do a
> > >setjmp right before you do the potentially bad instruction,
>and do a
> > >longjmp out of the signal handler.
> > >
> > >I'm not totally sure that you're allowed to do longjmp inside
>a signal
> > >handler (actually, I'm pretty sure it's undefined by POSIX).
>But I've seen
> > >it done in several pieces of reasonable portable pieces of
>software. I've
> > >never done this for SIGFPE but I've seen it for SIGILL and
>done it myself
> > >for SIGPIPE.
> > >
> > >-Jack
> > >
> > >On 11 Jul 2002, devraj sanyal wrote:
> > >
> > > > This is the default behaviour of the kernel.
> > > > on sigfpe the kernel loops on the signal
> > > > again and again. check out the man page
> > > > for signal.
> > > >
> > > >
> > > >
> > > >
> > > > On Thu, 11 Jul 2002 madhav morje wrote :
> > > > >Hello,
> > > > >
> > > > >I'm a novice in signal field. I was trying to out a
>simple
> > > > >program (which I've pasted below). When the binary was
>executed,
> > > > >signal handler for SIGFPE was executed continuously even
>though
> > > > >I've written a signal handler for it.
> > > > >
> > > > >My query is, why kernel continuously gives this signal to
>my
> > > > >program Or Am I missing something in my code??
> > > > >
> > > > >If I reset signal handler for SIGFPE to defualt one in
>the signal
> > > > >handler function, then my program gets terminated.
> > > > >
> > > > >Regards,
> > > > >Madhav.
> > > > >
> > > > >======================================================
> > > > >#include <signal.h>
> > > > >#include <stdio.h>
> > > > >#include <unistd.h>
> > > > >
> > > > >void sighand(int sig)
> > > > >{
> > > > > printf("\nSig Recd %d", sig);
> > > > > /*
> > > > > ** Should signal handler be reset here for SIGFPE to
>default
> > > > >here ????
> > > > > */
> > > > >}
> > > > >
> > > > >int main()
> > > > >{
> > > > >
> > > > >struct sigaction act;
> > > > >int j=10,k;
> > > > >
> > > > >act.sa_handler = sighand;
> > > > >sigemptyset(&act.sa_mask);
> > > > >act.sa_flags = 0;
> > > > >
> > > > >sigaddset(&act.sa_mask, SIGFPE);
> > > > >
> > > > >(void) sigaction(SIGFPE, &act, 0);
> > > > >
> > > > >k=j/0;
> > > > >
> > > > >printf("\ndone!!\n");
> > > > >
> > > > >return 0;
> > > > >
> > > > >}
> > > > >======================================================
> > > >
> >_________________________________________________________
> > > > >There is always a better job for you at
>Monsterindia.com.
> > > > >Go now http://monsterindia.rediff.com/jobs
> > > > >
> > > > >
> > > > >_______________________________________________
> > > > >This is the Linux C Programming List
> > > > >: http://lists.linux.org.au/listinfo/linuxcprogramming
>List
> > > >
> > > >
>_________________________________________________________
> > > > There is always a better job for you at
>Monsterindia.com.
> > > > Go now http://monsterindia.rediff.com/jobs
> > > >
> > > >
> > > > _______________________________________________
> > > > This is the Linux C Programming List
> > > > : http://lists.linux.org.au/listinfo/linuxcprogramming
>List
> > > >
> > >
> > >
> > >_______________________________________________
> > >This is the Linux C Programming List
> > >: http://lists.linux.org.au/listinfo/linuxcprogramming
>List
> >
> > _________________________________________________________
> > There is always a better job for you at Monsterindia.com.
> > Go now http://monsterindia.rediff.com/jobs
> >
> >
> > _______________________________________________
> > This is the Linux C Programming List
> > : http://lists.linux.org.au/listinfo/linuxcprogramming List
> >
>
>
>
>_______________________________________________
>This is the Linux C Programming List
>: http://lists.linux.org.au/listinfo/linuxcprogramming List