arm: use auxv to figure out armcap.c instead of using signals (#1006474)
This commit is contained in:
parent
850ca72b9a
commit
f6aa3c2ddd
93
openssl-1.0.1e-arm-use-elf-auxv-caps.patch
Normal file
93
openssl-1.0.1e-arm-use-elf-auxv-caps.patch
Normal file
@ -0,0 +1,93 @@
|
|||||||
|
diff --git a/crypto/armcap.c b/crypto/armcap.c
|
||||||
|
index 5258d2f..efb4009 100644
|
||||||
|
--- a/crypto/armcap.c
|
||||||
|
+++ b/crypto/armcap.c
|
||||||
|
@@ -9,11 +9,6 @@
|
||||||
|
|
||||||
|
unsigned int OPENSSL_armcap_P;
|
||||||
|
|
||||||
|
-static sigset_t all_masked;
|
||||||
|
-
|
||||||
|
-static sigjmp_buf ill_jmp;
|
||||||
|
-static void ill_handler (int sig) { siglongjmp(ill_jmp,sig); }
|
||||||
|
-
|
||||||
|
/*
|
||||||
|
* Following subroutines could have been inlined, but it's not all
|
||||||
|
* ARM compilers support inline assembler...
|
||||||
|
@@ -29,24 +24,26 @@ unsigned int OPENSSL_rdtsc(void)
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
-#if defined(__GNUC__) && __GNUC__>=2
|
||||||
|
-void OPENSSL_cpuid_setup(void) __attribute__((constructor));
|
||||||
|
-#endif
|
||||||
|
-void OPENSSL_cpuid_setup(void)
|
||||||
|
+#if defined(__GLIBC__) && __GLIBC__>=2 && __GLIBC_MINOR__>=16
|
||||||
|
+#include <sys/auxv.h>
|
||||||
|
+
|
||||||
|
+void OPENSSL_cpuid_find(void)
|
||||||
|
+ {
|
||||||
|
+ unsigned long hwcap = getauxval(AT_HWCAP);
|
||||||
|
+ char *plat = (char *)getauxval(AT_PLATFORM);
|
||||||
|
+
|
||||||
|
+ OPENSSL_armcap_P |= hwcap & HWCAP_ARM_NEON ? ARMV7_NEON : 0;
|
||||||
|
+ OPENSSL_armcap_P |= plat ? (plat[1] == '7' ? ARMV7_TICK : 0) : 0;
|
||||||
|
+ }
|
||||||
|
+#else
|
||||||
|
+static sigset_t all_masked;
|
||||||
|
+static sigjmp_buf ill_jmp;
|
||||||
|
+static void ill_handler (int sig) { siglongjmp(ill_jmp,sig); }
|
||||||
|
+
|
||||||
|
+void OPENSSL_cpuid_find(void)
|
||||||
|
{
|
||||||
|
- char *e;
|
||||||
|
struct sigaction ill_oact,ill_act;
|
||||||
|
sigset_t oset;
|
||||||
|
- static int trigger=0;
|
||||||
|
-
|
||||||
|
- if (trigger) return;
|
||||||
|
- trigger=1;
|
||||||
|
-
|
||||||
|
- if ((e=getenv("OPENSSL_armcap")))
|
||||||
|
- {
|
||||||
|
- OPENSSL_armcap_P=strtoul(e,NULL,0);
|
||||||
|
- return;
|
||||||
|
- }
|
||||||
|
|
||||||
|
sigfillset(&all_masked);
|
||||||
|
sigdelset(&all_masked,SIGILL);
|
||||||
|
@@ -55,8 +52,6 @@ void OPENSSL_cpuid_setup(void)
|
||||||
|
sigdelset(&all_masked,SIGBUS);
|
||||||
|
sigdelset(&all_masked,SIGSEGV);
|
||||||
|
|
||||||
|
- OPENSSL_armcap_P = 0;
|
||||||
|
-
|
||||||
|
memset(&ill_act,0,sizeof(ill_act));
|
||||||
|
ill_act.sa_handler = ill_handler;
|
||||||
|
ill_act.sa_mask = all_masked;
|
||||||
|
@@ -78,3 +73,25 @@ void OPENSSL_cpuid_setup(void)
|
||||||
|
sigaction (SIGILL,&ill_oact,NULL);
|
||||||
|
sigprocmask(SIG_SETMASK,&oset,NULL);
|
||||||
|
}
|
||||||
|
+#endif
|
||||||
|
+
|
||||||
|
+#if defined(__GNUC__) && __GNUC__>=2
|
||||||
|
+void OPENSSL_cpuid_setup(void) __attribute__((constructor));
|
||||||
|
+#endif
|
||||||
|
+void OPENSSL_cpuid_setup(void)
|
||||||
|
+ {
|
||||||
|
+ char *e;
|
||||||
|
+ static int trigger=0;
|
||||||
|
+
|
||||||
|
+ if (trigger) return;
|
||||||
|
+ trigger=1;
|
||||||
|
+
|
||||||
|
+ if ((e=getenv("OPENSSL_armcap")))
|
||||||
|
+ {
|
||||||
|
+ OPENSSL_armcap_P=strtoul(e,NULL,0);
|
||||||
|
+ return;
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ OPENSSL_armcap_P = 0;
|
||||||
|
+ OPENSSL_cpuid_find();
|
||||||
|
+ }
|
@ -21,7 +21,7 @@
|
|||||||
Summary: Utilities from the general purpose cryptography library with TLS implementation
|
Summary: Utilities from the general purpose cryptography library with TLS implementation
|
||||||
Name: openssl
|
Name: openssl
|
||||||
Version: 1.0.1e
|
Version: 1.0.1e
|
||||||
Release: 19%{?dist}
|
Release: 20%{?dist}
|
||||||
Epoch: 1
|
Epoch: 1
|
||||||
# We have to remove certain patented algorithms from the openssl source
|
# We have to remove certain patented algorithms from the openssl source
|
||||||
# tarball with the hobble-openssl script which is included below.
|
# tarball with the hobble-openssl script which is included below.
|
||||||
@ -76,6 +76,7 @@ Patch81: openssl-1.0.1-beta2-padlock64.patch
|
|||||||
Patch82: openssl-1.0.1e-backports.patch
|
Patch82: openssl-1.0.1e-backports.patch
|
||||||
Patch83: openssl-1.0.1e-bad-mac.patch
|
Patch83: openssl-1.0.1e-bad-mac.patch
|
||||||
Patch84: openssl-1.0.1e-trusted-first.patch
|
Patch84: openssl-1.0.1e-trusted-first.patch
|
||||||
|
Patch85: openssl-1.0.1e-arm-use-elf-auxv-caps.patch
|
||||||
|
|
||||||
License: OpenSSL
|
License: OpenSSL
|
||||||
Group: System Environment/Libraries
|
Group: System Environment/Libraries
|
||||||
@ -193,6 +194,7 @@ OpenSSL FIPS module.
|
|||||||
%patch72 -p1 -b .fips-ctor
|
%patch72 -p1 -b .fips-ctor
|
||||||
%patch83 -p1 -b .bad-mac
|
%patch83 -p1 -b .bad-mac
|
||||||
%patch84 -p1 -b .trusted-first
|
%patch84 -p1 -b .trusted-first
|
||||||
|
%patch85 -p1 -b .armcap
|
||||||
|
|
||||||
sed -i 's/SHLIB_VERSION_NUMBER "1.0.0"/SHLIB_VERSION_NUMBER "%{version}"/' crypto/opensslv.h
|
sed -i 's/SHLIB_VERSION_NUMBER "1.0.0"/SHLIB_VERSION_NUMBER "%{version}"/' crypto/opensslv.h
|
||||||
|
|
||||||
@ -468,6 +470,10 @@ rm -rf $RPM_BUILD_ROOT/%{_libdir}/fipscanister.*
|
|||||||
prelink -u %{_libdir}/libcrypto.so.%{version} %{_libdir}/libssl.so.%{version} 2>/dev/null || :
|
prelink -u %{_libdir}/libcrypto.so.%{version} %{_libdir}/libssl.so.%{version} 2>/dev/null || :
|
||||||
|
|
||||||
%changelog
|
%changelog
|
||||||
|
* Tue Sep 10 2013 Kyle McMartin <kyle@redhat.com> 1.0.1e-20
|
||||||
|
- [arm] use elf auxv to figure out armcap.c instead of playing silly
|
||||||
|
games with SIGILL handlers. (#1006474)
|
||||||
|
|
||||||
* Mon Sep 2 2013 Tomas Mraz <tmraz@redhat.com> 1.0.1e-19
|
* Mon Sep 2 2013 Tomas Mraz <tmraz@redhat.com> 1.0.1e-19
|
||||||
- use version-release in .hmac suffix to avoid overwrite
|
- use version-release in .hmac suffix to avoid overwrite
|
||||||
during upgrade
|
during upgrade
|
||||||
|
Loading…
Reference in New Issue
Block a user