diff options
-rw-r--r-- | src/regress/lib/libc/setjmp-fpu/Makefile | 12 | ||||
-rw-r--r-- | src/regress/lib/libc/setjmp-fpu/_setjmp.c | 11 | ||||
-rw-r--r-- | src/regress/lib/libc/setjmp-fpu/main.c | 12 | ||||
-rw-r--r-- | src/regress/lib/libc/setjmp-fpu/setjmp-fpu.c | 44 | ||||
-rw-r--r-- | src/regress/lib/libc/setjmp-fpu/setjmp.c | 11 | ||||
-rw-r--r-- | src/regress/lib/libc/setjmp-fpu/sigsetjmp.c | 11 |
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 | ||
3 | PROG= setjmp-fpu | 3 | PROGS= _setjmp setjmp sigsetjmp |
4 | SRCS= _setjmp.c main.c setjmp.c sigsetjmp.c | ||
5 | 4 | ||
6 | LDADD= -lm | 5 | LDADD= -lm |
7 | 6 | ||
7 | .for p in ${PROGS} | ||
8 | REGRESS_TARGETS += run-$p | ||
9 | run-$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 | |||
3 | int test__setjmp(void); | ||
4 | |||
5 | int | ||
6 | main(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 $ */ | ||
2 | int test__setjmp(void); | ||
3 | int test_setjmp(void); | ||
4 | int test_sigsetjmp(void); | ||
5 | |||
6 | int | ||
7 | main(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 | ||
4 | int | 5 | int |
5 | TEST_SETJMP(int argc, char *argv[]) | 6 | TEST_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 | |||
3 | int test_setjmp(void); | ||
4 | |||
5 | int | ||
6 | main(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 | |||
3 | int test_sigsetjmp(void); | ||
4 | |||
5 | int | ||
6 | main(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 |