This is the mail archive of the
libc-alpha@sources.redhat.com
mailing list for the glibc project.
RE: [PATCH] fegetenv/getcontext
- From: "Ed Connell" <Ed dot Connell at sas dot com>
- To: "Andreas Jaeger" <aj at suse dot de>
- Cc: <libc-alpha at sources dot redhat dot com>
- Date: Fri, 20 Jun 2003 12:58:19 -0400
- Subject: RE: [PATCH] fegetenv/getcontext
> 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