NetBSD-Bugs archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

PR/56820 CVS commit: src/lib/libc/softfloat



The following reply was made to PR misc/56820; it has been noted by GNATS.

From: "Taylor R Campbell" <riastradh%netbsd.org@localhost>
To: gnats-bugs%gnats.NetBSD.org@localhost
Cc: 
Subject: PR/56820 CVS commit: src/lib/libc/softfloat
Date: Sun, 27 Apr 2025 15:23:28 +0000

 Module Name:	src
 Committed By:	riastradh
 Date:		Sun Apr 27 15:23:27 UTC 2025
 
 Modified Files:
 	src/lib/libc/softfloat: softfloat-specialize
 
 Log Message:
 libc softfloat: Make SIGFPE for trapped fp exceptions non-ignorable.
 
 In hardfloat, when the kernel delivers SIGFPE for a floating-point
 exception trap, if SIGFPE is masked or ignored, it is handled _as if_
 SIGFPE were unmasked and had the default signal disposition:
 
     964 	/*
     965 	 * If the signal is masked or ignored, then unmask it and
     966 	 * reset it to the default action so that the process or
     967 	 * its tracer will be notified.
     968 	 */
     969 	const bool ignored = action == SIG_IGN;
     970 	if (masked || ignored) {
     971 		mutex_enter(&ps->sa_mutex);
     972 		sigdelset(mask, signo);
     973 		sigdelset(&p->p_sigctx.ps_sigcatch, signo);
     974 		sigdelset(&p->p_sigctx.ps_sigignore, signo);
     975 		sigdelset(&SIGACTION_PS(ps, signo).sa_mask, signo);
     976 		SIGACTION_PS(ps, signo).sa_handler = SIG_DFL;
     977 		mutex_exit(&ps->sa_mutex);
     978 	}
 
 https://nxr.netbsd.org/xref/src/sys/kern/kern_sig.c?r=1.410#964
 
 In other words, if you have asked for floating-point exception traps
 via fpsetmask(3) or feeenableexcept(3), then you can't simply defer
 or ignore them at the signal level any more than you can defer or
 ignore SIGBUS or SIGSEGV.  And if the signal handler returns, it will
 restart the instruction and -- if nothing has changed in the set of
 trapped floating-point exceptions -- trap again, delivering the same
 signal again.
 
 Since we can't lock access to signal dispositions, I don't think we
 can guarantee the same effect from userland atomically, but we can
 get a close approximation (should be good enough for single-threaded
 programs, at least) by mimicking this logic and calling sigqueueinfo
 in a loop.
 
 PR misc/56820: Many FPE related tests fail on softfloat machines
 
 
 To generate a diff of this commit:
 cvs rdiff -u -r1.9 -r1.10 src/lib/libc/softfloat/softfloat-specialize
 
 Please note that diffs are not public domain; they are subject to the
 copyright notices on the relevant files.
 


Home | Main Index | Thread Index | Old Index