Module Name:    src
Committed By:   riastradh
Date:           Sun Nov 11 01:26:08 UTC 2018

Modified Files:
        src/tests/kernel: Makefile h_segv.c

Log Message:
Use feenableexcept to trap fp exceptions, and trigger one, for SIGFPE.

Not every CPU traps integer division by zero -- aarch64, powerpc,
&c., just return zero.


To generate a diff of this commit:
cvs rdiff -u -r1.53 -r1.54 src/tests/kernel/Makefile
cvs rdiff -u -r1.8 -r1.9 src/tests/kernel/h_segv.c

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/tests/kernel/Makefile
diff -u src/tests/kernel/Makefile:1.53 src/tests/kernel/Makefile:1.54
--- src/tests/kernel/Makefile:1.53	Wed Mar 14 02:13:47 2018
+++ src/tests/kernel/Makefile	Sun Nov 11 01:26:08 2018
@@ -1,4 +1,4 @@
-# $NetBSD: Makefile,v 1.53 2018/03/14 02:13:47 kamil Exp $
+# $NetBSD: Makefile,v 1.54 2018/11/11 01:26:08 riastradh Exp $
 
 NOMAN=		# defined
 
@@ -67,4 +67,6 @@ CPPFLAGS.t_subr_prf.c=	-Wno-pointer-sign
 
 CLEANFILES+=	t_subr_prf.c
 
+LDADD.h_segv+=	-lm
+
 .include <bsd.test.mk>

Index: src/tests/kernel/h_segv.c
diff -u src/tests/kernel/h_segv.c:1.8 src/tests/kernel/h_segv.c:1.9
--- src/tests/kernel/h_segv.c:1.8	Sun Nov 11 01:26:00 2018
+++ src/tests/kernel/h_segv.c	Sun Nov 11 01:26:08 2018
@@ -1,4 +1,4 @@
-/*	$NetBSD: h_segv.c,v 1.8 2018/11/11 01:26:00 riastradh Exp $	*/
+/*	$NetBSD: h_segv.c,v 1.9 2018/11/11 01:26:08 riastradh Exp $	*/
 
 /*-
  * Copyright (c) 2017 The NetBSD Foundation, Inc.
@@ -29,13 +29,14 @@
  * POSSIBILITY OF SUCH DAMAGE.
  */
 #include <sys/cdefs.h>
-__RCSID("$NetBSD: h_segv.c,v 1.8 2018/11/11 01:26:00 riastradh Exp $");
+__RCSID("$NetBSD: h_segv.c,v 1.9 2018/11/11 01:26:08 riastradh Exp $");
 
 #include <sys/types.h>
 #include <sys/mman.h>
 #include <sys/ptrace.h>
 
 #include <err.h>
+#include <fenv.h>
 #include <signal.h>
 #include <stdio.h>
 #include <stdlib.h>
@@ -103,10 +104,12 @@ trigger_ill(void)
 static void
 trigger_fpe(void)
 {
-	volatile int a = getpid();
-	volatile int b = strtol("0", NULL, 0);
+	volatile double a = getpid();
+	volatile double b = strtol("0", NULL, 0);
 
-	usleep(a/b);
+	feenableexcept(FE_ALL_EXCEPT);
+
+	usleep((int)(a/b));
 }
 
 static void

Reply via email to