components/openssl/openssl-1.0.1/patches/38_remove_illegal_instruction_calls.patch
author jenny.yung@oracle.com <jenny.yung@oracle.com>
Mon, 25 Aug 2014 14:20:21 -0700
branchs11u2-sru
changeset 3285 78460de60ed1
child 4006 c737cefdce54
permissions -rw-r--r--
17799549 libcrypto openssl incorrect size for libcrypto.so.1.0.0`_sparcv9_random

#
# 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: