Skip site navigation (1)Skip section navigation (2)
Date:      Wed, 26 Aug 1998 14:25:41 +0200
From:      Martin Cracauer <cracauer@cons.org>
To:        Stephen Hocking-Senior Programmer PGS Tensor Perth <shocking@prth.pgs.com>, Bruce Evans <bde@zeta.org.au>
Cc:        current@FreeBSD.ORG
Subject:   Re: Floating Point Exceptions, signal handlers & subsequent ops
Message-ID:  <19980826142541.B20511@cons.org>
In-Reply-To: <199808260127.JAA02700@ariadne.tensor.pgs.com>; from Stephen Hocking-Senior Programmer PGS Tensor Perth on Wed, Aug 26, 1998 at 09:27:48AM %2B0800
References:  <199808252351.JAA32306@godzilla.zeta.org.au> <199808260127.JAA02700@ariadne.tensor.pgs.com>

next in thread | previous in thread | raw e-mail | index | archive | help

--LpQ9ahxlCli8rRTG
Content-Type: text/plain; charset=us-ascii

In <199808260127.JAA02700@ariadne.tensor.pgs.com>, Stephen Hocking-Senior Programmer PGS Tensor Perth wrote: 
> 
> 	[Much scary stuff regarding traps and the like...]
> 
> OK, I've had a look at machine/trap.h, how do I go about getting info on 
> exactly was exception was caused? A brief perusal of the man pages for math 
> and fpsetmask offers no clues (unless I've missed something totally obvious). 
> All the program wishes to do is note the fact and excveption has occured, get 
> some runtime stats (which is where that next FP operation happens) and exit.

As far as I know, you can't. The kernel does not pass the FP registers
as they were in the mainline program flow to your signal handler.

What we need here is a system call to ask the kernel for the FP
register contents which it should have saved before entering the FP
handler. If the user required so, by a system call, sysctl variable or
kernel config option.

I actually didn't beleive this :-) and wrote some code to get the
registers via the "hidden" third parameter to a signal handler, but in
fact the exception indication bits were cleared.

Example code to copy the register contents to some save place:

static int handler(int sig, int code, struct sigcontext *scp)
{
#define TMP "FPE handler\n"
  write(2,TMP,sizeof(TMP)-1);
#undef TMP
  sig_fpe_was_here++;
  sig_sig = sig;
  sig_code = code;
  memcpy(&sig_context, scp, sizeof(*scp));
  return sig;
}

It's very possible that this code is nonsense. 

I appended some programs tangling with FP on FreeBSD. This fragment is
from "freebsd-signal.c". 

Martin
-- 
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
Martin Cracauer <cracauer@cons.org> http://www.cons.org/cracauer
BSD User Group Hamburg, Germany     http://www.bsdhh.org/

--LpQ9ahxlCli8rRTG
Content-Type: application/x-tar-gz
Content-Transfer-Encoding: base64
Content-Disposition: attachment; filename="float.tar.gz"

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
f+FdWVfMDFt+e8f19Dw9T88XP/8PBUqK7ABQAAA=

--LpQ9ahxlCli8rRTG--

To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe freebsd-current" in the body of the message



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?19980826142541.B20511>