[PATCH] fegetenv/getcontext

Ed Connell Ed.Connell@sas.com
Fri Jun 20 17:00:00 GMT 2003



> From: Andreas Jaeger [mailto:aj@suse.de] 
> 
> "Ed Connell" <Ed.Connell@sas.com> writes:
> 
> > Hi
> >
> > fegetenv and getcontext currently corrupt the floating point
> > mask on x86.  I have included a patch and a testcase.  I 
> > was only able to test this patch on 2.2.93 but looking at
> > CVS, I see no reason the behavior should be different now.
> > Someone involved with x86-64 should see if they need a
> > similar patch.  The problem can be seen on RH 8 and RH 9.
> >
> > Cheers
> > Ed
> >
> > 2003-05-19  Ed Connell  <ed.connell@sas.com>
> >
> >       * sysdeps/unix/sysv/linux/i386/getcontext.S (getcontext): 
> >         Retain floating point mask
> >       * sysdeps/i386/fpu/fegetenv.c (fegetenv): Likewise.
> >
> > --- glibc-2.3.2/sysdeps/i386/fpu/fegetenv.c     2001-07-07 
> 15:21:23.000000000 -0400
> > +++ glibc-2.3.2/sysdeps/i386/fpu/fegetenv.c.edconn      
> 2003-05-19 16:27:16.000000000 -0400
> > @@ -25,6 +25,7 @@
> >  __fegetenv (fenv_t *envp)
> >  {
> >    __asm__ ("fnstenv %0" : "=m" (*envp));
> > +  __asm__ ("fldenv %0" : "=m" (*envp));
> 
> Maybe I'm missing something but we store it in memory - and then you
> load it again directly?  Why will that help?
> 
> Andreas

A side effect of the fnstenv instruction is to mask all FP
exceptions.  We don't want them masked, we want them as they
were on entry to fegetenv.

Did you try the testcase?

Ed



More information about the Libc-alpha mailing list