diff options
Diffstat (limited to 'src')
| -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 |
