summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorbluhm <>2020-01-13 14:58:38 +0000
committerbluhm <>2020-01-13 14:58:38 +0000
commit996be56cf768b80e4785865e699cef34a00a6000 (patch)
treeb5804ea3ccdb375c0f26e1b98ed973b8754149c5
parent23772d25ea2d9f0c22b6fcc0ea8e281694436352 (diff)
downloadopenbsd-996be56cf768b80e4785865e699cef34a00a6000.tar.gz
openbsd-996be56cf768b80e4785865e699cef34a00a6000.tar.bz2
openbsd-996be56cf768b80e4785865e699cef34a00a6000.zip
Split setjmp-fpu regress into separate tests. Use errx(3) to explain
potential problems. Regress still failing on amd64.
-rw-r--r--src/regress/lib/libc/setjmp-fpu/Makefile12
-rw-r--r--src/regress/lib/libc/setjmp-fpu/_setjmp.c11
-rw-r--r--src/regress/lib/libc/setjmp-fpu/main.c12
-rw-r--r--src/regress/lib/libc/setjmp-fpu/setjmp-fpu.c44
-rw-r--r--src/regress/lib/libc/setjmp-fpu/setjmp.c11
-rw-r--r--src/regress/lib/libc/setjmp-fpu/sigsetjmp.c11
6 files changed, 69 insertions, 32 deletions
diff --git a/src/regress/lib/libc/setjmp-fpu/Makefile b/src/regress/lib/libc/setjmp-fpu/Makefile
index 33d0f7e88a..7b9fae5f5f 100644
--- a/src/regress/lib/libc/setjmp-fpu/Makefile
+++ b/src/regress/lib/libc/setjmp-fpu/Makefile
@@ -1,8 +1,14 @@
1# $OpenBSD: Makefile,v 1.2 2013/12/29 05:46:43 martynas Exp $ 1# $OpenBSD: Makefile,v 1.3 2020/01/13 14:58:38 bluhm Exp $
2 2
3PROG= setjmp-fpu 3PROGS= _setjmp setjmp sigsetjmp
4SRCS= _setjmp.c main.c setjmp.c sigsetjmp.c
5 4
6LDADD= -lm 5LDADD= -lm
7 6
7.for p in ${PROGS}
8REGRESS_TARGETS += run-$p
9run-$p: $p
10 @echo '======== $@ ========'
11 ./$p
12.endfor
13
8.include <bsd.regress.mk> 14.include <bsd.regress.mk>
diff --git a/src/regress/lib/libc/setjmp-fpu/_setjmp.c b/src/regress/lib/libc/setjmp-fpu/_setjmp.c
index a2195a5ff8..dba5d7259d 100644
--- a/src/regress/lib/libc/setjmp-fpu/_setjmp.c
+++ b/src/regress/lib/libc/setjmp-fpu/_setjmp.c
@@ -1,4 +1,13 @@
1/* $OpenBSD: _setjmp.c,v 1.3 2015/11/08 18:10:14 miod Exp $ */ 1/* $OpenBSD: _setjmp.c,v 1.4 2020/01/13 14:58:38 bluhm Exp $ */
2
3int test__setjmp(void);
4
5int
6main(int argc, char *argv[])
7{
8 return test__setjmp();
9}
10
2#define SETJMP(env, savemask) _setjmp(env) 11#define SETJMP(env, savemask) _setjmp(env)
3#define LONGJMP(env, val) _longjmp(env, val) 12#define LONGJMP(env, val) _longjmp(env, val)
4#define TEST_SETJMP test__setjmp 13#define TEST_SETJMP test__setjmp
diff --git a/src/regress/lib/libc/setjmp-fpu/main.c b/src/regress/lib/libc/setjmp-fpu/main.c
deleted file mode 100644
index 5050fee855..0000000000
--- a/src/regress/lib/libc/setjmp-fpu/main.c
+++ /dev/null
@@ -1,12 +0,0 @@
1/* $OpenBSD: main.c,v 1.2 2015/01/20 04:41:01 krw Exp $ */
2int test__setjmp(void);
3int test_setjmp(void);
4int test_sigsetjmp(void);
5
6int
7main(int argc, char *argv[])
8{
9 return (test__setjmp()
10 | test_setjmp()
11 | test_sigsetjmp());
12}
diff --git a/src/regress/lib/libc/setjmp-fpu/setjmp-fpu.c b/src/regress/lib/libc/setjmp-fpu/setjmp-fpu.c
index 694061dcbb..11d616ae71 100644
--- a/src/regress/lib/libc/setjmp-fpu/setjmp-fpu.c
+++ b/src/regress/lib/libc/setjmp-fpu/setjmp-fpu.c
@@ -1,46 +1,62 @@
1#include <err.h>
1#include <fenv.h> 2#include <fenv.h>
2#include <setjmp.h> 3#include <setjmp.h>
3 4
4int 5int
5TEST_SETJMP(int argc, char *argv[]) 6TEST_SETJMP(void)
6{ 7{
7 JMP_BUF env; 8 JMP_BUF env;
8 int rv; 9 int rv;
9 10
10 /* Set up the FPU control word register. */ 11 /* Set up the FPU control word register. */
11 fesetround(FE_UPWARD); 12 rv = fesetround(FE_UPWARD);
13 if (rv != 0)
14 errx(1, "fesetround FE_UPWARD returned %d", rv);
12 fedisableexcept(FE_ALL_EXCEPT); 15 fedisableexcept(FE_ALL_EXCEPT);
13 feenableexcept(FE_DIVBYZERO); 16 feenableexcept(FE_DIVBYZERO);
14 17
15 rv = SETJMP(env, 0); 18 rv = SETJMP(env, 0);
16 19
17 if (rv == 0) { 20 switch(rv) {
21 case 0: {
18 fexcept_t flag = FE_OVERFLOW; 22 fexcept_t flag = FE_OVERFLOW;
19 23
20 /* Mess with the FPU control word. */ 24 /* Mess with the FPU control word. */
21 fesetround(FE_DOWNWARD); 25 rv = fesetround(FE_DOWNWARD);
26 if (rv != 0)
27 errx(1, "fesetround FE_DOWNWARD returned %d", rv);
22 fedisableexcept(FE_DIVBYZERO); 28 fedisableexcept(FE_DIVBYZERO);
23 29
24 /* Set the FPU exception flags. */ 30 /* Set the FPU exception flags. */
25 fesetexceptflag(&flag, FE_ALL_EXCEPT); 31 rv = fesetexceptflag(&flag, FE_ALL_EXCEPT);
32 if (rv != 0)
33 errx(1, "fesetexceptflag returned %d", rv);
26 34
27 LONGJMP(env, 1); 35 LONGJMP(env, 1);
28 } else if (rv == 1) { 36 errx(1, "longjmp returned");
37 }
38 case 1: {
29 fexcept_t flag = 0; 39 fexcept_t flag = 0;
30 40
31 /* Verify that the FPU control word is preserved. */ 41 /* Verify that the FPU control word is preserved. */
32 if (fegetround() != FE_UPWARD 42 rv = fegetround();
33 || fegetexcept() != FE_DIVBYZERO) 43 if (rv != FE_UPWARD)
34 return (1); 44 errx(1, "fegetround returned %d, not FE_UPWARD", rv);
45 rv = fegetexcept();
46 if (rv != FE_DIVBYZERO)
47 errx(1, "fegetexcept returned %d, not FE_DIVBYZERO",
48 rv);
35 49
36 /* Verify that the FPU exception flags weren't clobbered. */ 50 /* Verify that the FPU exception flags weren't clobbered. */
37 fegetexceptflag(&flag, FE_ALL_EXCEPT); 51 rv = fegetexceptflag(&flag, FE_ALL_EXCEPT);
52 if (rv != 0)
53 errx(1, "fegetexceptflag returned %d", rv);
38 if (flag != FE_OVERFLOW) 54 if (flag != FE_OVERFLOW)
39 return (1); 55 errx(1, "except flag is %d, no FE_OVERFLOW", rv);
40 56
41 return (0); 57 return (0);
42 } 58 }
43 59 default:
44 /* This is not supposed to happen. */ 60 errx(1, "setjmp returned %d", rv);
45 return (1); 61 }
46} 62}
diff --git a/src/regress/lib/libc/setjmp-fpu/setjmp.c b/src/regress/lib/libc/setjmp-fpu/setjmp.c
index 48d72056d0..e12731da37 100644
--- a/src/regress/lib/libc/setjmp-fpu/setjmp.c
+++ b/src/regress/lib/libc/setjmp-fpu/setjmp.c
@@ -1,4 +1,13 @@
1/* $OpenBSD: setjmp.c,v 1.3 2015/11/08 18:10:14 miod Exp $ */ 1/* $OpenBSD: setjmp.c,v 1.4 2020/01/13 14:58:38 bluhm Exp $ */
2
3int test_setjmp(void);
4
5int
6main(int argc, char *argv[])
7{
8 return test_setjmp();
9}
10
2#define SETJMP(env, savemask) setjmp(env) 11#define SETJMP(env, savemask) setjmp(env)
3#define LONGJMP(env, val) longjmp(env, val) 12#define LONGJMP(env, val) longjmp(env, val)
4#define TEST_SETJMP test_setjmp 13#define TEST_SETJMP test_setjmp
diff --git a/src/regress/lib/libc/setjmp-fpu/sigsetjmp.c b/src/regress/lib/libc/setjmp-fpu/sigsetjmp.c
index 158fd83296..8c7a22a92b 100644
--- a/src/regress/lib/libc/setjmp-fpu/sigsetjmp.c
+++ b/src/regress/lib/libc/setjmp-fpu/sigsetjmp.c
@@ -1,4 +1,13 @@
1/* $OpenBSD: sigsetjmp.c,v 1.3 2015/11/08 18:10:14 miod Exp $ */ 1/* $OpenBSD: sigsetjmp.c,v 1.4 2020/01/13 14:58:38 bluhm Exp $ */
2
3int test_sigsetjmp(void);
4
5int
6main(int argc, char *argv[])
7{
8 return test_sigsetjmp();
9}
10
2#define SETJMP(env, savemask) sigsetjmp(env, savemask) 11#define SETJMP(env, savemask) sigsetjmp(env, savemask)
3#define LONGJMP(env, val) siglongjmp(env, val) 12#define LONGJMP(env, val) siglongjmp(env, val)
4#define TEST_SETJMP test_sigsetjmp 13#define TEST_SETJMP test_sigsetjmp