Loading Configure +1 −1 Original line number Diff line number Diff line Loading @@ -133,7 +133,7 @@ my $sparcv9_asm="sparcv9cap.o sparccpuid.o:bn-sparcv9.o sparcv9-mont.o sparcv9a- my $sparcv8_asm=":sparcv8.o:des_enc-sparc.o fcrypt_b.o:::::::::::void"; my $alpha_asm="alphacpuid.o:bn_asm.o alpha-mont.o::::::::::::void"; my $mips3_asm=":bn-mips3.o::::::::::::void"; my $s390x_asm="s390xcpuid.o:bn-s390x.o s390x-mont.o::aes-s390x.o:::sha1-s390x.o sha256-s390x.o sha512-s390x.o::rc4-s390x.o:::::void"; my $s390x_asm="s390xcap.o s390xcpuid.o:bn-s390x.o s390x-mont.o::aes-s390x.o:::sha1-s390x.o sha256-s390x.o sha512-s390x.o::rc4-s390x.o:::::void"; my $armv4_asm=":bn_asm.o armv4-mont.o::aes_cbc.o aes-armv4.o:::sha1-armv4-large.o sha256-armv4.o sha512-armv4.o:::::::void"; my $ppc32_asm="ppccpuid.o ppccap.o:bn-ppc.o ppc-mont.o ppc64-mont.o::aes_core.o aes_cbc.o aes-ppc.o:::sha1-ppc.o sha256-ppc.o::::::"; my $ppc64_asm="ppccpuid.o ppccap.o:bn-ppc.o ppc-mont.o ppc64-mont.o::aes_core.o aes_cbc.o aes-ppc.o:::sha1-ppc.o sha256-ppc.o sha512-ppc.o::::::"; Loading TABLE +1 −1 Original line number Diff line number Diff line Loading @@ -3728,7 +3728,7 @@ $thread_cflag = -D_REENTRANT $sys_id = $lflags = -ldl $bn_ops = SIXTY_FOUR_BIT_LONG RC4_CHAR RC4_CHUNK DES_INT DES_UNROLL $cpuid_obj = s390xcpuid.o $cpuid_obj = s390xcap.o s390xcpuid.o $bn_obj = bn-s390x.o s390x-mont.o $des_obj = $aes_obj = aes-s390x.o Loading crypto/aes/asm/aes-s390x.pl +6 −0 Original line number Diff line number Diff line Loading @@ -765,6 +765,11 @@ $code.=<<___ if (!$softonly); srl %r5,6 ar %r5,%r0 larl %r1,OPENSSL_s390xcap_P lg %r0,0(%r1) tmhl %r0,0x4000 # check for message-security assist jz .Lekey_internal lghi %r0,0 # query capability vector la %r1,16($sp) .long 0xb92f0042 # kmc %r4,%r2 Loading Loading @@ -1323,6 +1328,7 @@ $code.=<<___; 4: ex $len,0($s1) j .Lcbc_dec_exit .size AES_cbc_encrypt,.-AES_cbc_encrypt .comm OPENSSL_s390xcap_P,8,8 ___ } $code.=<<___; Loading crypto/s390xcap.c 0 → 100644 +37 −0 Original line number Diff line number Diff line #include <stdio.h> #include <stdlib.h> #include <string.h> #include <setjmp.h> #include <signal.h> extern unsigned long OPENSSL_s390xcap_P; static sigjmp_buf ill_jmp; static void ill_handler (int sig) { siglongjmp(ill_jmp,sig); } unsigned long OPENSSL_s390x_facilities(void); void OPENSSL_cpuid_setup(void) { sigset_t oset; struct sigaction ill_act,oact; if (OPENSSL_s390xcap_P) return; memset(&ill_act,0,sizeof(ill_act)); ill_act.sa_handler = ill_handler; sigfillset(&ill_act.sa_mask); sigdelset(&ill_act.sa_mask,SIGILL); sigdelset(&ill_act.sa_mask,SIGTRAP); sigprocmask(SIG_SETMASK,&ill_act.sa_mask,&oset); sigaction (SIGILL,&ill_act,&oact); /* protection against missing store-facility-list-extended */ if (sigsetjmp(ill_jmp,0) == 0) OPENSSL_s390xcap_P = OPENSSL_s390x_facilities(); else OPENSSL_s390xcap_P = 1UL<<63; sigaction (SIGILL,&oact,NULL); sigprocmask(SIG_SETMASK,&oset,NULL); } crypto/s390xcpuid.S +7 −7 Original line number Diff line number Diff line .text .globl OPENSSL_cpuid_setup .type OPENSSL_cpuid_setup,@function .align 16 OPENSSL_cpuid_setup: br %r14 # reserved for future .size OPENSSL_cpuid_setup,.-OPENSSL_cpuid_setup .globl OPENSSL_s390x_facilities .type OPENSSL_s390x_facilities,@function .align 16 Loading @@ -14,6 +7,8 @@ OPENSSL_s390x_facilities: lghi %r0,0 .long 0xb2b0f010 # stfle 16(%r15) lg %r2,16(%r15) larl %r1,OPENSSL_s390xcap_P stg %r2,0(%r1) br %r14 .size OPENSSL_s390x_facilities,.-OPENSSL_s390x_facilities Loading Loading @@ -88,3 +83,8 @@ OPENSSL_cleanse: jnz .Little br %r14 .size OPENSSL_cleanse,.-OPENSSL_cleanse .section .init brasl %r14,OPENSSL_cpuid_setup .comm OPENSSL_s390xcap_P,8,8 Loading
Configure +1 −1 Original line number Diff line number Diff line Loading @@ -133,7 +133,7 @@ my $sparcv9_asm="sparcv9cap.o sparccpuid.o:bn-sparcv9.o sparcv9-mont.o sparcv9a- my $sparcv8_asm=":sparcv8.o:des_enc-sparc.o fcrypt_b.o:::::::::::void"; my $alpha_asm="alphacpuid.o:bn_asm.o alpha-mont.o::::::::::::void"; my $mips3_asm=":bn-mips3.o::::::::::::void"; my $s390x_asm="s390xcpuid.o:bn-s390x.o s390x-mont.o::aes-s390x.o:::sha1-s390x.o sha256-s390x.o sha512-s390x.o::rc4-s390x.o:::::void"; my $s390x_asm="s390xcap.o s390xcpuid.o:bn-s390x.o s390x-mont.o::aes-s390x.o:::sha1-s390x.o sha256-s390x.o sha512-s390x.o::rc4-s390x.o:::::void"; my $armv4_asm=":bn_asm.o armv4-mont.o::aes_cbc.o aes-armv4.o:::sha1-armv4-large.o sha256-armv4.o sha512-armv4.o:::::::void"; my $ppc32_asm="ppccpuid.o ppccap.o:bn-ppc.o ppc-mont.o ppc64-mont.o::aes_core.o aes_cbc.o aes-ppc.o:::sha1-ppc.o sha256-ppc.o::::::"; my $ppc64_asm="ppccpuid.o ppccap.o:bn-ppc.o ppc-mont.o ppc64-mont.o::aes_core.o aes_cbc.o aes-ppc.o:::sha1-ppc.o sha256-ppc.o sha512-ppc.o::::::"; Loading
TABLE +1 −1 Original line number Diff line number Diff line Loading @@ -3728,7 +3728,7 @@ $thread_cflag = -D_REENTRANT $sys_id = $lflags = -ldl $bn_ops = SIXTY_FOUR_BIT_LONG RC4_CHAR RC4_CHUNK DES_INT DES_UNROLL $cpuid_obj = s390xcpuid.o $cpuid_obj = s390xcap.o s390xcpuid.o $bn_obj = bn-s390x.o s390x-mont.o $des_obj = $aes_obj = aes-s390x.o Loading
crypto/aes/asm/aes-s390x.pl +6 −0 Original line number Diff line number Diff line Loading @@ -765,6 +765,11 @@ $code.=<<___ if (!$softonly); srl %r5,6 ar %r5,%r0 larl %r1,OPENSSL_s390xcap_P lg %r0,0(%r1) tmhl %r0,0x4000 # check for message-security assist jz .Lekey_internal lghi %r0,0 # query capability vector la %r1,16($sp) .long 0xb92f0042 # kmc %r4,%r2 Loading Loading @@ -1323,6 +1328,7 @@ $code.=<<___; 4: ex $len,0($s1) j .Lcbc_dec_exit .size AES_cbc_encrypt,.-AES_cbc_encrypt .comm OPENSSL_s390xcap_P,8,8 ___ } $code.=<<___; Loading
crypto/s390xcap.c 0 → 100644 +37 −0 Original line number Diff line number Diff line #include <stdio.h> #include <stdlib.h> #include <string.h> #include <setjmp.h> #include <signal.h> extern unsigned long OPENSSL_s390xcap_P; static sigjmp_buf ill_jmp; static void ill_handler (int sig) { siglongjmp(ill_jmp,sig); } unsigned long OPENSSL_s390x_facilities(void); void OPENSSL_cpuid_setup(void) { sigset_t oset; struct sigaction ill_act,oact; if (OPENSSL_s390xcap_P) return; memset(&ill_act,0,sizeof(ill_act)); ill_act.sa_handler = ill_handler; sigfillset(&ill_act.sa_mask); sigdelset(&ill_act.sa_mask,SIGILL); sigdelset(&ill_act.sa_mask,SIGTRAP); sigprocmask(SIG_SETMASK,&ill_act.sa_mask,&oset); sigaction (SIGILL,&ill_act,&oact); /* protection against missing store-facility-list-extended */ if (sigsetjmp(ill_jmp,0) == 0) OPENSSL_s390xcap_P = OPENSSL_s390x_facilities(); else OPENSSL_s390xcap_P = 1UL<<63; sigaction (SIGILL,&oact,NULL); sigprocmask(SIG_SETMASK,&oset,NULL); }
crypto/s390xcpuid.S +7 −7 Original line number Diff line number Diff line .text .globl OPENSSL_cpuid_setup .type OPENSSL_cpuid_setup,@function .align 16 OPENSSL_cpuid_setup: br %r14 # reserved for future .size OPENSSL_cpuid_setup,.-OPENSSL_cpuid_setup .globl OPENSSL_s390x_facilities .type OPENSSL_s390x_facilities,@function .align 16 Loading @@ -14,6 +7,8 @@ OPENSSL_s390x_facilities: lghi %r0,0 .long 0xb2b0f010 # stfle 16(%r15) lg %r2,16(%r15) larl %r1,OPENSSL_s390xcap_P stg %r2,0(%r1) br %r14 .size OPENSSL_s390x_facilities,.-OPENSSL_s390x_facilities Loading Loading @@ -88,3 +83,8 @@ OPENSSL_cleanse: jnz .Little br %r14 .size OPENSSL_cleanse,.-OPENSSL_cleanse .section .init brasl %r14,OPENSSL_cpuid_setup .comm OPENSSL_s390xcap_P,8,8