components/openssl/openssl-1.0.1/patches/38_remove_illegal_instruction_calls.patch
#
# This patch was developed in house.
# This is Solaris-specific: not suitable for upstream.
#
--- openssl-1.0.1h/crypto/sparcv9cap.c.~1~ Tue Aug 5 14:40:03 2014
+++ openssl-1.0.1h/crypto/sparcv9cap.c Tue Aug 5 15:05:26 2014
@@ -6,6 +6,7 @@
#include <sys/time.h>
#include <unistd.h>
#include <openssl/bn.h>
+#include <sys/auxv.h>
#include "sparc_arch.h"
@@ -59,10 +60,8 @@
void _sparcv9_vis1_probe(void);
unsigned long _sparcv9_vis1_instrument(void);
void _sparcv9_vis2_probe(void);
-void _sparcv9_fmadd_probe(void);
unsigned long _sparcv9_rdcfr(void);
void _sparcv9_vis3_probe(void);
-unsigned long _sparcv9_random(void);
#ifndef _BOOT
size_t _sparcv9_vis1_instrument_bus(unsigned int *,size_t);
size_t _sparcv9_vis1_instrument_bus2(unsigned int *,size_t,size_t);
@@ -236,6 +235,7 @@
struct sigaction common_act,ill_oact,bus_oact;
sigset_t all_masked,oset;
static int trigger=0;
+ uint_t ui = 0;
if (trigger) return;
trigger=1;
@@ -250,6 +250,7 @@
/* Initial value, fits UltraSPARC-I&II... */
OPENSSL_sparcv9cap_P[0] = SPARCV9_PREFER_FPU|SPARCV9_TICK_PRIVILEGED;
+ (void) getisax(&ui, 1);
sigfillset(&all_masked);
sigdelset(&all_masked,SIGILL);
@@ -289,11 +290,8 @@
}
}
- if (sigsetjmp(common_jmp,1) == 0)
- {
- _sparcv9_fmadd_probe();
+ if (ui & AV_SPARC_FMAF)
OPENSSL_sparcv9cap_P[0] |= SPARCV9_FMADD;
- }
/*
* VIS3 flag is tested independently from VIS1, unlike VIS2 that is,
@@ -305,11 +303,9 @@
OPENSSL_sparcv9cap_P[0] |= SPARCV9_VIS3;
}
- if (sigsetjmp(common_jmp,1) == 0)
- {
- (void)_sparcv9_random();
- OPENSSL_sparcv9cap_P[0] |= SPARCV9_RANDOM;
- }
+#define AV_T4_MECHS (AV_SPARC_AES | AV_SPARC_DES | AV_SPARC_KASUMI | \
+ AV_SPARC_CAMELLIA | AV_SPARC_MD5 | AV_SPARC_SHA1 | \
+ AV_SPARC_SHA256 | AV_SPARC_SHA512 | AV_SPARC_MPMUL | AV_SPARC_CRC32C)
/*
* In wait for better solution _sparcv9_rdcfr is masked by
@@ -318,10 +314,8 @@
* different on Linux...
*/
if ((OPENSSL_sparcv9cap_P[0]&SPARCV9_VIS3) &&
- sigsetjmp(common_jmp,1) == 0)
- {
+ (ui & AV_T4_MECHS))
OPENSSL_sparcv9cap_P[1] = (unsigned int)_sparcv9_rdcfr();
- }
sigaction(SIGBUS,&bus_oact,NULL);
sigaction(SIGILL,&ill_oact,NULL);
--- openssl-1.0.1h/crypto/sparccpuid.S.~1~ Mon Aug 4 14:45:58 2014
+++ openssl-1.0.1h/crypto/sparccpuid.S Mon Aug 4 14:51:53 2014
@@ -315,16 +315,6 @@
.type _sparcv9_vis2_probe,#function
.size _sparcv9_vis2_probe,.-_sparcv9_vis2_probe
-.global _sparcv9_fmadd_probe
-.align 8
-_sparcv9_fmadd_probe:
- .word 0x81b00d80 !fxor %f0,%f0,%f0
- .word 0x85b08d82 !fxor %f2,%f2,%f2
- retl
- .word 0x81b80440 !fmaddd %f0,%f0,%f2,%f0
-.type _sparcv9_fmadd_probe,#function
-.size _sparcv9_fmadd_probe,.-_sparcv9_fmadd_probe
-
.global _sparcv9_rdcfr
.align 8
_sparcv9_rdcfr:
@@ -341,14 +331,6 @@
.type _sparcv9_vis3_probe,#function
.size _sparcv9_vis3_probe,.-_sparcv9_vis3_probe
-.global _sparcv9_random
-.align 8
-_sparcv9_random:
- retl
- .word 0x91b002a0 !random %o0
-.type _sparcv9_random,#function
-.size _sparcv9_random,.-_sparcv9_vis3_probe
-
.global OPENSSL_cleanse
.align 32
OPENSSL_cleanse: