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