From owner-freebsd-arch Wed Jan 9 16:49:23 2002 Delivered-To: freebsd-arch@freebsd.org Received: from mailman.zeta.org.au (mailman.zeta.org.au [203.26.10.16]) by hub.freebsd.org (Postfix) with ESMTP id 7676837B405 for ; Wed, 9 Jan 2002 16:49:20 -0800 (PST) Received: from bde.zeta.org.au (bde.zeta.org.au [203.2.228.102]) by mailman.zeta.org.au (8.9.3/8.8.7) with ESMTP id LAA18593; Thu, 10 Jan 2002 11:48:46 +1100 Date: Thu, 10 Jan 2002 11:49:33 +1100 (EST) From: Bruce Evans X-X-Sender: To: Nate Williams Cc: Daniel Eischen , Dan Eischen , Peter Wemm , Archie Cobbs , Alfred Perlstein , Subject: Re: Request for review: getcontext, setcontext, etc In-Reply-To: <15420.34931.201187.449640@caddis.yogotech.com> Message-ID: <20020110114251.S10376-100000@gamplex.bde.org> MIME-Version: 1.0 Content-Type: TEXT/PLAIN; charset=US-ASCII Sender: owner-freebsd-arch@FreeBSD.ORG Precedence: bulk List-ID: List-Archive: (Web Archive) List-Help: (List Instructions) List-Subscribe: List-Unsubscribe: X-Loop: FreeBSD.ORG On Wed, 9 Jan 2002, Nate Williams wrote: > > > > fldz > > > > fld1 > > > > fdiv %st,%st(1) # 1.0 / 0.0, exception on this instruction > > > > # but no trap yet > > > > fnstsw %ax # no trap yet since this is control instruction > > > > fnclex # forget about exception; no trap at all since > > > > # we did only control instructions after the > > > > # one that cause the exception > > > > > > > > > > It is especially wrong for fnsave in context switches because it > > > > > > causes the signals in the context of the context switcher instead of > > > > > > in the context of the thread that caused the exception. > > > > > > > > > > Which signals are you refering to? > > > > > > > > The SIGFPE that you get for `wait'. > > > > > > So, when is SIGFPE going to be triggered above, since it appears to be > > > masked by using fnstw vs. fstw. > > > > When the above is interrupted by a signal, and the signal handler wants > > to switch to another thread, and erroneously saves the context using > > fsave instead of fnsave. > > Assuming I used followed things up with 'fnsave', will the exception be > triggered by a frstor, and thus the exception will be correctly reported > by the thread triggering the excpetion? Only on broken systems. > > > In other words, how do I actually make sure that I receive the > > > exception/trapf for FP errors? > > > > Let the thread (appear to) continue normally by never triggering a trap > > for the exception if you switch its context. Using fnsave/frstor > > accomplishes this, except on broken (old) systems where fnsave traps anyway. > > Is this broken hardware systems, or broken software systems? (In other > words, does "broken (old)" imply a bug in hardware or software?) Mostly broken hardware. Software can still get the broken behaviour by using irq13 error reporting, which may still be required for backwards compatibility. I think W98 would have to use it for DOS mode; I don't know about native mode. See Appendix C of the Intel MMX manual (1997 version at least) for more details. Bruce To Unsubscribe: send mail to majordomo@FreeBSD.org with "unsubscribe freebsd-arch" in the body of the message