summaryrefslogtreecommitdiff
path: root/src/lib/libssl/src/crypto/s390xcap.c
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--src/lib/libssl/src/crypto/s390xcap.c12
1 files changed, 6 insertions, 6 deletions
diff --git a/src/lib/libssl/src/crypto/s390xcap.c b/src/lib/libssl/src/crypto/s390xcap.c
index ffbe0235f9..f2e94ef47e 100644
--- a/src/lib/libssl/src/crypto/s390xcap.c
+++ b/src/lib/libssl/src/crypto/s390xcap.c
@@ -4,7 +4,7 @@
4#include <setjmp.h> 4#include <setjmp.h>
5#include <signal.h> 5#include <signal.h>
6 6
7extern unsigned long OPENSSL_s390xcap_P; 7extern unsigned long OPENSSL_s390xcap_P[];
8 8
9static sigjmp_buf ill_jmp; 9static sigjmp_buf ill_jmp;
10static void ill_handler (int sig) { siglongjmp(ill_jmp,sig); } 10static void ill_handler (int sig) { siglongjmp(ill_jmp,sig); }
@@ -16,7 +16,9 @@ void OPENSSL_cpuid_setup(void)
16 sigset_t oset; 16 sigset_t oset;
17 struct sigaction ill_act,oact; 17 struct sigaction ill_act,oact;
18 18
19 if (OPENSSL_s390xcap_P) return; 19 if (OPENSSL_s390xcap_P[0]) return;
20
21 OPENSSL_s390xcap_P[0] = 1UL<<(8*sizeof(unsigned long)-1);
20 22
21 memset(&ill_act,0,sizeof(ill_act)); 23 memset(&ill_act,0,sizeof(ill_act));
22 ill_act.sa_handler = ill_handler; 24 ill_act.sa_handler = ill_handler;
@@ -27,10 +29,8 @@ void OPENSSL_cpuid_setup(void)
27 sigaction (SIGILL,&ill_act,&oact); 29 sigaction (SIGILL,&ill_act,&oact);
28 30
29 /* protection against missing store-facility-list-extended */ 31 /* protection against missing store-facility-list-extended */
30 if (sigsetjmp(ill_jmp,0) == 0) 32 if (sigsetjmp(ill_jmp,1) == 0)
31 OPENSSL_s390xcap_P = OPENSSL_s390x_facilities(); 33 OPENSSL_s390x_facilities();
32 else
33 OPENSSL_s390xcap_P = 1UL<<63;
34 34
35 sigaction (SIGILL,&oact,NULL); 35 sigaction (SIGILL,&oact,NULL);
36 sigprocmask(SIG_SETMASK,&oset,NULL); 36 sigprocmask(SIG_SETMASK,&oset,NULL);