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
[-- Attachment #1 --]
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/
[-- Attachment #2 --]
5 \{w6⧘q#zQb˩r6Ʃ&!
Eꐔww ,o;ݳ9 p mW=;f mWj,@[m
ҴV;h>,[Y|gx/zʘ=3WL6+O0VvvV}ww'^m
,=vTE?01_
EԅFa)ʺ[P3Swˀ2= ѻczJX;(DݳcNAݵgL|,ӛ͜pzf>$>ԝjՅU-ǰ&HE5t;݊5v̹:)*!
Q$K/Un7?t'х0ǴƢ~)rKT$HPc08Lȿ{Aq| Y1۰Y1$Ć2396#R>3~lBqzU\xWhCuB
Kު>}c,=~koŀ5[mvثI|L~C5
fV
edPX|W]/J!Ҍta#NU1\G<:91Q(&m`"eԅ^daUѱ%C3;ѾUQa=x
h_JPF˘ο'pDϊrK/!}qp=E'/3[6{ CkfC{vEµ `~ O0}k2cIeGָpG9%*ΰ@3%x(1zm/I7=qsDv*eYbLDU]LQ"KҸԽ(I mr'?pޔ$qm$3oʮF|gZk'(?*HZ<0-?yQr[$AhrVP~릖êcw&|+dm%
GR`αJN}>9[8=ZG1VqGN|tz[pp.TQduc#c&FZǍ_-ič/=SqYTt("!2!wVk c$%)0X_A~(NR-jf$1Xѷ53dM/RC7Xw-h;$f4jhvx'F{5KW-FwU@%9s,#(c\5(#4xlR<<
(Pjԭb\8`|yr͐pU0)'+ֹV"暈>F}(Ì4wvd!MR",_g8Sڃ* Ԕ[Wp=0E{ThR*~̑Z v3N1:NMd
NacoWڟ=٨2++p6R>',Qq_ղKPSjU#{?,xI^l.Q9<<@hO V3634:^u_8<αx1>:O7B lIK t6CDu1aˁNAw@[θh6T8's\4^i}eΧ tB5)6: j]UjzC#wu~~6'M 9PL`ibhfb#u's.y{J"$V+u59ѓRMRL!cZ6LFE KI^iB졡L*\ |TD+\IyؼSf|kD>8ĽT桞 [J_.jMҵ})-؝
q>h[ ;TC,F\(v[HLJID) !xU,lNEPAH]4ah
NuCM#V㷃?]
_Ϭ
ߵa=)X~2Ej֢?ۡK~-dl}8=>:}/dG}m|^4y9![و(%-j>[cNgD(# 6
79q\IAR^iWuPCl0
[,(aXij9KR[RU"+uOZ3XvppgX^4S9Ӄ q4(A6`5}'"{h
QX>O !!"ɍBGDxWBmTbwm%[/o$ʙۈ$qF4#0ʅY:wD 2x/Y_HB ȡn[c>(8Cz2-Ttݯ@w!ua| uDtR>r?_<-'S=x %RD`(B&E0W>p4{xދd/eNؙ <U"T[ahPBr題sKBcy"`$K81U#s'a 7'((a
:0לu}N8lݜp`:(1eR22%Ui4zHr=5e. \.p0O'T89<핢PB=cf oljߺpOA^H#JhڵuHXM"2|y Qd?'zqtE;3}m<T!Hݑce=+E5^lU=D)q/S`GgZy¤巕mb"`F"|L$
lC?qˀVrZ~QɗHI֊rVڷ8|$AGĽ̯?ƺf =&9{F+0i['Jb"LY( 4YJg;VJ_au'嗺'@뢭yEU5S+N91[q706*%-i#ɥ|/J],3Dkx>֏Ë1ϑ)DR%uC6ӇV
AidTek,=]G3y!_K
2Cnjyd >ġZ3<IMn;*|ï X8sW6I@!,ߕcX;<R-?cwpvT
USJI(G3>A ~q,wUdoIFkI߀AJ~$Xăģ{
iQW-c\(Ao7$g~uXӨ?|y>sK-ꄯn5r8t)&
dwwb9$ﱋ46%^Irz9OG%}.]['aI|Z
15BJ _cNn9MJH؝p%
8('߳ Zҡ l]5a'%U!89x=u߫XNd:*5*^ҿ=.+rwT%vYL]pя(C!
̸cs%II*{La*d&|spEO a-3 B{V{
o<цڋBɢ l-&ko?cjFGb%')NV?sm:EߦMt=ҕ$Ŗo"ittiǮ?tC'|$A土j4>fo3l DYnϼR:=R5yd{8ٓ?I*]YW[~{<=O?J P
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?19980826142541.B20511>
