From 9f3c2d2afb228715c20193c6a3d1dcf4076161e2 Mon Sep 17 00:00:00 2001
From: miod <>
Date: Thu, 17 Apr 2014 18:49:35 +0000
Subject: Remove oh-so-important-from-a-security-pov OpenSSL_rtdsc() function.

---
 src/lib/libcrypto/alphacpuid.pl          |   9 --
 src/lib/libcrypto/arm_arch.h             |   1 -
 src/lib/libcrypto/armcap.c               |  14 ---
 src/lib/libcrypto/armv4cpuid.S           |   7 --
 src/lib/libcrypto/ia64cpuid.S            |   7 --
 src/lib/libcrypto/pariscid.pl            |  12 ---
 src/lib/libcrypto/ppccpuid.pl            |   9 --
 src/lib/libcrypto/s390xcpuid.S           |   9 --
 src/lib/libcrypto/sparccpuid.S           |  17 ----
 src/lib/libcrypto/sparcv9cap.c           | 147 +------------------------------
 src/lib/libcrypto/x86_64cpuid.pl         |  10 ---
 src/lib/libcrypto/x86cpuid.pl            |  11 ---
 src/lib/libssl/src/crypto/alphacpuid.pl  |   9 --
 src/lib/libssl/src/crypto/arm_arch.h     |   1 -
 src/lib/libssl/src/crypto/armcap.c       |  14 ---
 src/lib/libssl/src/crypto/armv4cpuid.S   |   7 --
 src/lib/libssl/src/crypto/ia64cpuid.S    |   7 --
 src/lib/libssl/src/crypto/pariscid.pl    |  12 ---
 src/lib/libssl/src/crypto/ppccpuid.pl    |   9 --
 src/lib/libssl/src/crypto/s390xcpuid.S   |   9 --
 src/lib/libssl/src/crypto/sparccpuid.S   |  17 ----
 src/lib/libssl/src/crypto/sparcv9cap.c   | 147 +------------------------------
 src/lib/libssl/src/crypto/x86_64cpuid.pl |  10 ---
 src/lib/libssl/src/crypto/x86cpuid.pl    |  11 ---
 24 files changed, 4 insertions(+), 502 deletions(-)

(limited to 'src/lib')

diff --git a/src/lib/libcrypto/alphacpuid.pl b/src/lib/libcrypto/alphacpuid.pl
index f6aea6a766..0ff4ae22e3 100644
--- a/src/lib/libcrypto/alphacpuid.pl
+++ b/src/lib/libcrypto/alphacpuid.pl
@@ -77,13 +77,4 @@ OPENSSL_atomic_add:
 	addl	$0,$17,$0
 	ret	($26)
 .end	OPENSSL_atomic_add
-
-.globl	OPENSSL_rdtsc
-.ent	OPENSSL_rdtsc
-OPENSSL_rdtsc:
-	.frame	$30,0,$26
-	.prologue 0
-	rpcc	$0
-	ret	($26)
-.end	OPENSSL_rdtsc
 ___
diff --git a/src/lib/libcrypto/arm_arch.h b/src/lib/libcrypto/arm_arch.h
index 0ccafb2215..01797eb4e3 100644
--- a/src/lib/libcrypto/arm_arch.h
+++ b/src/lib/libcrypto/arm_arch.h
@@ -45,7 +45,6 @@
 extern unsigned int OPENSSL_armcap_P;
 
 #define ARMV7_NEON      (1<<0)
-#define ARMV7_TICK      (1<<1)
 #endif
 
 #endif
diff --git a/src/lib/libcrypto/armcap.c b/src/lib/libcrypto/armcap.c
index 0625587bdd..f40993c1d5 100644
--- a/src/lib/libcrypto/armcap.c
+++ b/src/lib/libcrypto/armcap.c
@@ -20,16 +20,6 @@ static sigjmp_buf ill_jmp;
  * ARM compilers support inline assembler...
  */
 void _armv7_neon_probe(void);
-unsigned int _armv7_tick(void);
-
-unsigned int
-OPENSSL_rdtsc(void)
-{
-	if (OPENSSL_armcap_P & ARMV7_TICK)
-		return _armv7_tick();
-	else
-		return 0;
-}
 
 #if defined(__GNUC__) && __GNUC__>=2
 void OPENSSL_cpuid_setup(void) __attribute__((constructor));
@@ -72,10 +62,6 @@ OPENSSL_cpuid_setup(void)
 		_armv7_neon_probe();
 		OPENSSL_armcap_P |= ARMV7_NEON;
 	}
-	if (sigsetjmp(ill_jmp, 1) == 0) {
-		_armv7_tick();
-		OPENSSL_armcap_P |= ARMV7_TICK;
-	}
 
 	sigaction (SIGILL, &ill_oact, NULL);
 	sigprocmask(SIG_SETMASK, &oset, NULL);
diff --git a/src/lib/libcrypto/armv4cpuid.S b/src/lib/libcrypto/armv4cpuid.S
index bdfde19c1f..ba86c9709a 100644
--- a/src/lib/libcrypto/armv4cpuid.S
+++ b/src/lib/libcrypto/armv4cpuid.S
@@ -11,13 +11,6 @@ _armv7_neon_probe:
 	.word	0xe12fff1e	@ bx	lr
 .size	_armv7_neon_probe,.-_armv7_neon_probe
 
-.global	_armv7_tick
-.type	_armv7_tick,%function
-_armv7_tick:
-	mrc	p15,0,r0,c9,c13,0
-	.word	0xe12fff1e	@ bx	lr
-.size	_armv7_tick,.-_armv7_tick
-
 .global	OPENSSL_atomic_add
 .type	OPENSSL_atomic_add,%function
 OPENSSL_atomic_add:
diff --git a/src/lib/libcrypto/ia64cpuid.S b/src/lib/libcrypto/ia64cpuid.S
index 517d938888..39e8093c6c 100644
--- a/src/lib/libcrypto/ia64cpuid.S
+++ b/src/lib/libcrypto/ia64cpuid.S
@@ -8,13 +8,6 @@ OPENSSL_cpuid_setup:
 { .mib;	br.ret.sptk.many	b0		};;
 .endp	OPENSSL_cpuid_setup#
 
-.global	OPENSSL_rdtsc#
-.proc	OPENSSL_rdtsc#
-OPENSSL_rdtsc:
-{ .mib;	mov			r8=ar.itc
-	br.ret.sptk.many	b0		};;
-.endp   OPENSSL_rdtsc#
-
 .global	OPENSSL_atomic_add#
 .proc	OPENSSL_atomic_add#
 .align	32
diff --git a/src/lib/libcrypto/pariscid.pl b/src/lib/libcrypto/pariscid.pl
index 38985afbac..cd86b90704 100644
--- a/src/lib/libcrypto/pariscid.pl
+++ b/src/lib/libcrypto/pariscid.pl
@@ -34,18 +34,6 @@ OPENSSL_cpuid_setup
 	nop
 	.PROCEND
 
-	.EXPORT	OPENSSL_rdtsc,ENTRY
-	.ALIGN	8
-OPENSSL_rdtsc
-	.PROC
-	.CALLINFO	NO_CALLS
-	.ENTRY
-	mfctl	%cr16,$rv
-	bv	($rp)
-	.EXIT
-	nop
-	.PROCEND
-
 	.EXPORT	OPENSSL_wipe_cpu,ENTRY
 	.ALIGN	8
 OPENSSL_wipe_cpu
diff --git a/src/lib/libcrypto/ppccpuid.pl b/src/lib/libcrypto/ppccpuid.pl
index cf48714e33..37c33c051a 100755
--- a/src/lib/libcrypto/ppccpuid.pl
+++ b/src/lib/libcrypto/ppccpuid.pl
@@ -84,15 +84,6 @@ Ladd:	lwarx	r5,0,r3
 	.long	0
 	.byte	0,12,0x14,0,0,0,2,0
 	.long	0
-
-.globl	.OPENSSL_rdtsc
-.align	4
-.OPENSSL_rdtsc:
-	mftb	r3
-	mftbu	r4
-	blr
-	.long	0
-	.byte	0,12,0x14,0,0,0,0,0
 ___
 
 $code =~ s/\`([^\`]*)\`/eval $1/gem;
diff --git a/src/lib/libcrypto/s390xcpuid.S b/src/lib/libcrypto/s390xcpuid.S
index 89bf6be82f..25adb646c4 100644
--- a/src/lib/libcrypto/s390xcpuid.S
+++ b/src/lib/libcrypto/s390xcpuid.S
@@ -16,15 +16,6 @@ OPENSSL_s390x_facilities:
 	br	%r14
 .size	OPENSSL_s390x_facilities,.-OPENSSL_s390x_facilities
 
-.globl	OPENSSL_rdtsc
-.type	OPENSSL_rdtsc,@function
-.align	16
-OPENSSL_rdtsc:
-	stck	16(%r15)
-	lg	%r2,16(%r15)
-	br	%r14
-.size	OPENSSL_rdtsc,.-OPENSSL_rdtsc
-
 .globl	OPENSSL_atomic_add
 .type	OPENSSL_atomic_add,@function
 .align	16
diff --git a/src/lib/libcrypto/sparccpuid.S b/src/lib/libcrypto/sparccpuid.S
index d8b44af2f0..b913e3dddb 100644
--- a/src/lib/libcrypto/sparccpuid.S
+++ b/src/lib/libcrypto/sparccpuid.S
@@ -215,23 +215,6 @@ OPENSSL_atomic_add:
 	sra	%o0,%g0,%o0	! we return signed int, remember?
 .size	OPENSSL_atomic_add,.-OPENSSL_atomic_add
 
-.global	_sparcv9_rdtick
-.align	32
-_sparcv9_rdtick:
-	subcc	%g0,1,%o0
-	.word	0x91408000	!rd	%ccr,%o0
-	cmp	%o0,0x99
-	bne	.notick
-	xor	%o0,%o0,%o0
-	.word	0x91410000	!rd	%tick,%o0
-	retl
-	.word	0x93323020	!srlx	%o0,32,%o1
-.notick:
-	retl
-	xor	%o1,%o1,%o1
-.type	_sparcv9_rdtick,#function
-.size	_sparcv9_rdtick,.-_sparcv9_rdtick
-
 .global	_sparcv9_vis1_probe
 .align	8
 _sparcv9_vis1_probe:
diff --git a/src/lib/libcrypto/sparcv9cap.c b/src/lib/libcrypto/sparcv9cap.c
index 05c084807a..f49e71ec93 100644
--- a/src/lib/libcrypto/sparcv9cap.c
+++ b/src/lib/libcrypto/sparcv9cap.c
@@ -6,13 +6,12 @@
 #include <sys/time.h>
 #include <openssl/bn.h>
 
-#define SPARCV9_TICK_PRIVILEGED	(1<<0)
 #define SPARCV9_PREFER_FPU	(1<<1)
 #define SPARCV9_VIS1		(1<<2)
 #define SPARCV9_VIS2		(1<<3)	/* reserved */
 #define SPARCV9_FMADD		(1<<4)	/* reserved for SPARC64 V */
 
-static int OPENSSL_sparcv9cap_P = SPARCV9_TICK_PRIVILEGED;
+static int OPENSSL_sparcv9cap_P = 0;
 
 int
 bn_mul_mont(BN_ULONG *rp, const BN_ULONG *ap, const BN_ULONG *bp,
@@ -29,146 +28,11 @@ bn_mul_mont(BN_ULONG *rp, const BN_ULONG *ap, const BN_ULONG *bp,
 		return bn_mul_mont_int(rp, ap, bp, np, n0, num);
 }
 
-unsigned long	_sparcv9_rdtick(void);
 void		_sparcv9_vis1_probe(void);
 unsigned long	_sparcv9_vis1_instrument(void);
 void		_sparcv9_vis2_probe(void);
 void		_sparcv9_fmadd_probe(void);
 
-unsigned long
-OPENSSL_rdtsc(void)
-{
-	if (OPENSSL_sparcv9cap_P&SPARCV9_TICK_PRIVILEGED)
-#if defined(__sun) && defined(__SVR4)
-		return gethrtime();
-#else
-		return 0;
-#endif
-	else
-		return _sparcv9_rdtick();
-}
-
-#if 0 && defined(__sun) && defined(__SVR4)
-/* This code path is disabled, because of incompatibility of
- * libdevinfo.so.1 and libmalloc.so.1 (see below for details)
- */
-#include <malloc.h>
-#include <dlfcn.h>
-#include <libdevinfo.h>
-#include <sys/systeminfo.h>
-
-typedef di_node_t (*di_init_t)(const char *, uint_t);
-typedef void      (*di_fini_t)(di_node_t);
-typedef char *    (*di_node_name_t)(di_node_t);
-typedef int       (*di_walk_node_t)(di_node_t, uint_t, di_node_name_t, int (*)(di_node_t, di_node_name_t));
-
-#define DLLINK(h,name) (name=(name##_t)dlsym((h),#name))
-
-static int
-walk_nodename(di_node_t node, di_node_name_t di_node_name)
-{
-	char *name = (*di_node_name)(node);
-
-	/* This is expected to catch all UltraSPARC flavors prior T1 */
-	if (!strcmp (name, "SUNW,UltraSPARC") ||
-	    !strncmp(name,"SUNW,UltraSPARC-I",17))  /* covers II,III,IV */
-	{
-		OPENSSL_sparcv9cap_P |= SPARCV9_PREFER_FPU|SPARCV9_VIS1;
-
-		/* %tick is privileged only on UltraSPARC-I/II, but not IIe */
-		if (name[14]!='\0' && name[17]!='\0' && name[18]!='\0')
-			OPENSSL_sparcv9cap_P &= ~SPARCV9_TICK_PRIVILEGED;
-
-		return DI_WALK_TERMINATE;
-	}
-	/* This is expected to catch remaining UltraSPARCs, such as T1 */
-	else if (!strncmp(name, "SUNW,UltraSPARC", 15)) {
-		OPENSSL_sparcv9cap_P &= ~SPARCV9_TICK_PRIVILEGED;
-
-		return DI_WALK_TERMINATE;
-	}
-
-	return DI_WALK_CONTINUE;
-}
-
-void
-OPENSSL_cpuid_setup(void)
-{
-	void *h;
-	char *e, si[256];
-	static int trigger = 0;
-
-	if (trigger)
-		return;
-	trigger = 1;
-
-	if ((e = getenv("OPENSSL_sparcv9cap"))) {
-		OPENSSL_sparcv9cap_P = strtoul(e, NULL, 0);
-		return;
-	}
-
-	if (sysinfo(SI_MACHINE, si, sizeof(si)) > 0) {
-		if (strcmp(si, "sun4v"))
-			/* FPU is preferred for all CPUs, but US-T1/2 */
-			OPENSSL_sparcv9cap_P |= SPARCV9_PREFER_FPU;
-	}
-
-	if (sysinfo(SI_ISALIST, si, sizeof(si)) > 0) {
-		if (strstr(si, "+vis"))
-			OPENSSL_sparcv9cap_P |= SPARCV9_VIS1;
-		if (strstr(si, "+vis2")) {
-			OPENSSL_sparcv9cap_P |= SPARCV9_VIS2;
-			OPENSSL_sparcv9cap_P &= ~SPARCV9_TICK_PRIVILEGED;
-			return;
-		}
-	}
-#ifdef M_KEEP
-	/*
-	 * Solaris libdevinfo.so.1 is effectively incomatible with
-	 * libmalloc.so.1. Specifically, if application is linked with
-	 * -lmalloc, it crashes upon startup with SIGSEGV in
-	 * free(3LIBMALLOC) called by di_fini. Prior call to
-	 * mallopt(M_KEEP,0) somehow helps... But not always...
-	 */
-	if ((h = dlopen(NULL, RTLD_LAZY))) {
-			union { void *p;
-			int (*f)(int, int);
-		} sym;
-		if ((sym.p = dlsym(h, "mallopt"))) (*sym.f)(M_KEEP, 0);
-			dlclose(h);
-	}
-#endif
-	if ((h = dlopen("libdevinfo.so.1", RTLD_LAZY)))
-		do {
-			di_init_t	di_init;
-			di_fini_t	di_fini;
-			di_walk_node_t	di_walk_node;
-			di_node_name_t	di_node_name;
-			di_node_t	root_node;
-
-			if (!DLLINK(h, di_init))
-				break;
-			if (!DLLINK(h, di_fini))
-				break;
-			if (!DLLINK(h, di_walk_node))
-				break;
-			if (!DLLINK(h, di_node_name))
-				break;
-
-			if ((root_node = (*di_init)("/", DINFOSUBTREE)) !=
-			    DI_NODE_NIL) {
-				(*di_walk_node)(root_node, DI_WALK_SIBFIRST,
-				   di_node_name, walk_nodename);
-				(*di_fini)(root_node);
-			}
-		} while (0);
-
-	if (h)
-		dlclose(h);
-}
-
-#else
-
 static sigjmp_buf common_jmp;
 static void common_handler(int sig)
 {
@@ -193,7 +57,7 @@ OPENSSL_cpuid_setup(void)
 	}
 
 	/* Initial value, fits UltraSPARC-I&II... */
-	OPENSSL_sparcv9cap_P = SPARCV9_PREFER_FPU|SPARCV9_TICK_PRIVILEGED;
+	OPENSSL_sparcv9cap_P = SPARCV9_PREFER_FPU;
 
 	sigfillset(&all_masked);
 	sigdelset(&all_masked, SIGILL);
@@ -213,11 +77,6 @@ OPENSSL_cpuid_setup(void)
 	sigaction(SIGILL, &common_act, &ill_oact);
 	sigaction(SIGBUS,&common_act,&bus_oact);/* T1 fails 16-bit ldda [on Linux] */
 
-	if (sigsetjmp(common_jmp, 1) == 0) {
-		_sparcv9_rdtick();
-		OPENSSL_sparcv9cap_P &= ~SPARCV9_TICK_PRIVILEGED;
-	}
-
 	if (sigsetjmp(common_jmp, 1) == 0) {
 		_sparcv9_vis1_probe();
 		OPENSSL_sparcv9cap_P |= SPARCV9_VIS1;
@@ -240,5 +99,3 @@ OPENSSL_cpuid_setup(void)
 
 	sigprocmask(SIG_SETMASK, &oset, NULL);
 }
-
-#endif
diff --git a/src/lib/libcrypto/x86_64cpuid.pl b/src/lib/libcrypto/x86_64cpuid.pl
index 8422e91342..3fe9a2d566 100644
--- a/src/lib/libcrypto/x86_64cpuid.pl
+++ b/src/lib/libcrypto/x86_64cpuid.pl
@@ -42,16 +42,6 @@ OPENSSL_atomic_add:
 	ret
 .size	OPENSSL_atomic_add,.-OPENSSL_atomic_add
 
-.globl	OPENSSL_rdtsc
-.type	OPENSSL_rdtsc,\@abi-omnipotent
-.align	16
-OPENSSL_rdtsc:
-	rdtsc
-	shl	\$32,%rdx
-	or	%rdx,%rax
-	ret
-.size	OPENSSL_rdtsc,.-OPENSSL_rdtsc
-
 .globl	OPENSSL_ia32_cpuid
 .type	OPENSSL_ia32_cpuid,\@abi-omnipotent
 .align	16
diff --git a/src/lib/libcrypto/x86cpuid.pl b/src/lib/libcrypto/x86cpuid.pl
index 0da613f697..c7a57a3465 100644
--- a/src/lib/libcrypto/x86cpuid.pl
+++ b/src/lib/libcrypto/x86cpuid.pl
@@ -143,17 +143,6 @@ for (@ARGV) { $sse2=1 if (/-DOPENSSL_IA32_SSE2/); }
 
 &external_label("OPENSSL_ia32cap_P");
 
-&function_begin_B("OPENSSL_rdtsc","EXTRN\t_OPENSSL_ia32cap_P:DWORD");
-	&xor	("eax","eax");
-	&xor	("edx","edx");
-	&picmeup("ecx","OPENSSL_ia32cap_P");
-	&bt	(&DWP(0,"ecx"),4);
-	&jnc	(&label("notsc"));
-	&rdtsc	();
-&set_label("notsc");
-	&ret	();
-&function_end_B("OPENSSL_rdtsc");
-
 # This works in Ring 0 only [read DJGPP+MS-DOS+privileged DPMI host],
 # but it's safe to call it on any [supported] 32-bit platform...
 # Just check for [non-]zero return value...
diff --git a/src/lib/libssl/src/crypto/alphacpuid.pl b/src/lib/libssl/src/crypto/alphacpuid.pl
index f6aea6a766..0ff4ae22e3 100644
--- a/src/lib/libssl/src/crypto/alphacpuid.pl
+++ b/src/lib/libssl/src/crypto/alphacpuid.pl
@@ -77,13 +77,4 @@ OPENSSL_atomic_add:
 	addl	$0,$17,$0
 	ret	($26)
 .end	OPENSSL_atomic_add
-
-.globl	OPENSSL_rdtsc
-.ent	OPENSSL_rdtsc
-OPENSSL_rdtsc:
-	.frame	$30,0,$26
-	.prologue 0
-	rpcc	$0
-	ret	($26)
-.end	OPENSSL_rdtsc
 ___
diff --git a/src/lib/libssl/src/crypto/arm_arch.h b/src/lib/libssl/src/crypto/arm_arch.h
index 0ccafb2215..01797eb4e3 100644
--- a/src/lib/libssl/src/crypto/arm_arch.h
+++ b/src/lib/libssl/src/crypto/arm_arch.h
@@ -45,7 +45,6 @@
 extern unsigned int OPENSSL_armcap_P;
 
 #define ARMV7_NEON      (1<<0)
-#define ARMV7_TICK      (1<<1)
 #endif
 
 #endif
diff --git a/src/lib/libssl/src/crypto/armcap.c b/src/lib/libssl/src/crypto/armcap.c
index 0625587bdd..f40993c1d5 100644
--- a/src/lib/libssl/src/crypto/armcap.c
+++ b/src/lib/libssl/src/crypto/armcap.c
@@ -20,16 +20,6 @@ static sigjmp_buf ill_jmp;
  * ARM compilers support inline assembler...
  */
 void _armv7_neon_probe(void);
-unsigned int _armv7_tick(void);
-
-unsigned int
-OPENSSL_rdtsc(void)
-{
-	if (OPENSSL_armcap_P & ARMV7_TICK)
-		return _armv7_tick();
-	else
-		return 0;
-}
 
 #if defined(__GNUC__) && __GNUC__>=2
 void OPENSSL_cpuid_setup(void) __attribute__((constructor));
@@ -72,10 +62,6 @@ OPENSSL_cpuid_setup(void)
 		_armv7_neon_probe();
 		OPENSSL_armcap_P |= ARMV7_NEON;
 	}
-	if (sigsetjmp(ill_jmp, 1) == 0) {
-		_armv7_tick();
-		OPENSSL_armcap_P |= ARMV7_TICK;
-	}
 
 	sigaction (SIGILL, &ill_oact, NULL);
 	sigprocmask(SIG_SETMASK, &oset, NULL);
diff --git a/src/lib/libssl/src/crypto/armv4cpuid.S b/src/lib/libssl/src/crypto/armv4cpuid.S
index bdfde19c1f..ba86c9709a 100644
--- a/src/lib/libssl/src/crypto/armv4cpuid.S
+++ b/src/lib/libssl/src/crypto/armv4cpuid.S
@@ -11,13 +11,6 @@ _armv7_neon_probe:
 	.word	0xe12fff1e	@ bx	lr
 .size	_armv7_neon_probe,.-_armv7_neon_probe
 
-.global	_armv7_tick
-.type	_armv7_tick,%function
-_armv7_tick:
-	mrc	p15,0,r0,c9,c13,0
-	.word	0xe12fff1e	@ bx	lr
-.size	_armv7_tick,.-_armv7_tick
-
 .global	OPENSSL_atomic_add
 .type	OPENSSL_atomic_add,%function
 OPENSSL_atomic_add:
diff --git a/src/lib/libssl/src/crypto/ia64cpuid.S b/src/lib/libssl/src/crypto/ia64cpuid.S
index 517d938888..39e8093c6c 100644
--- a/src/lib/libssl/src/crypto/ia64cpuid.S
+++ b/src/lib/libssl/src/crypto/ia64cpuid.S
@@ -8,13 +8,6 @@ OPENSSL_cpuid_setup:
 { .mib;	br.ret.sptk.many	b0		};;
 .endp	OPENSSL_cpuid_setup#
 
-.global	OPENSSL_rdtsc#
-.proc	OPENSSL_rdtsc#
-OPENSSL_rdtsc:
-{ .mib;	mov			r8=ar.itc
-	br.ret.sptk.many	b0		};;
-.endp   OPENSSL_rdtsc#
-
 .global	OPENSSL_atomic_add#
 .proc	OPENSSL_atomic_add#
 .align	32
diff --git a/src/lib/libssl/src/crypto/pariscid.pl b/src/lib/libssl/src/crypto/pariscid.pl
index 38985afbac..cd86b90704 100644
--- a/src/lib/libssl/src/crypto/pariscid.pl
+++ b/src/lib/libssl/src/crypto/pariscid.pl
@@ -34,18 +34,6 @@ OPENSSL_cpuid_setup
 	nop
 	.PROCEND
 
-	.EXPORT	OPENSSL_rdtsc,ENTRY
-	.ALIGN	8
-OPENSSL_rdtsc
-	.PROC
-	.CALLINFO	NO_CALLS
-	.ENTRY
-	mfctl	%cr16,$rv
-	bv	($rp)
-	.EXIT
-	nop
-	.PROCEND
-
 	.EXPORT	OPENSSL_wipe_cpu,ENTRY
 	.ALIGN	8
 OPENSSL_wipe_cpu
diff --git a/src/lib/libssl/src/crypto/ppccpuid.pl b/src/lib/libssl/src/crypto/ppccpuid.pl
index cf48714e33..37c33c051a 100755
--- a/src/lib/libssl/src/crypto/ppccpuid.pl
+++ b/src/lib/libssl/src/crypto/ppccpuid.pl
@@ -84,15 +84,6 @@ Ladd:	lwarx	r5,0,r3
 	.long	0
 	.byte	0,12,0x14,0,0,0,2,0
 	.long	0
-
-.globl	.OPENSSL_rdtsc
-.align	4
-.OPENSSL_rdtsc:
-	mftb	r3
-	mftbu	r4
-	blr
-	.long	0
-	.byte	0,12,0x14,0,0,0,0,0
 ___
 
 $code =~ s/\`([^\`]*)\`/eval $1/gem;
diff --git a/src/lib/libssl/src/crypto/s390xcpuid.S b/src/lib/libssl/src/crypto/s390xcpuid.S
index 89bf6be82f..25adb646c4 100644
--- a/src/lib/libssl/src/crypto/s390xcpuid.S
+++ b/src/lib/libssl/src/crypto/s390xcpuid.S
@@ -16,15 +16,6 @@ OPENSSL_s390x_facilities:
 	br	%r14
 .size	OPENSSL_s390x_facilities,.-OPENSSL_s390x_facilities
 
-.globl	OPENSSL_rdtsc
-.type	OPENSSL_rdtsc,@function
-.align	16
-OPENSSL_rdtsc:
-	stck	16(%r15)
-	lg	%r2,16(%r15)
-	br	%r14
-.size	OPENSSL_rdtsc,.-OPENSSL_rdtsc
-
 .globl	OPENSSL_atomic_add
 .type	OPENSSL_atomic_add,@function
 .align	16
diff --git a/src/lib/libssl/src/crypto/sparccpuid.S b/src/lib/libssl/src/crypto/sparccpuid.S
index d8b44af2f0..b913e3dddb 100644
--- a/src/lib/libssl/src/crypto/sparccpuid.S
+++ b/src/lib/libssl/src/crypto/sparccpuid.S
@@ -215,23 +215,6 @@ OPENSSL_atomic_add:
 	sra	%o0,%g0,%o0	! we return signed int, remember?
 .size	OPENSSL_atomic_add,.-OPENSSL_atomic_add
 
-.global	_sparcv9_rdtick
-.align	32
-_sparcv9_rdtick:
-	subcc	%g0,1,%o0
-	.word	0x91408000	!rd	%ccr,%o0
-	cmp	%o0,0x99
-	bne	.notick
-	xor	%o0,%o0,%o0
-	.word	0x91410000	!rd	%tick,%o0
-	retl
-	.word	0x93323020	!srlx	%o0,32,%o1
-.notick:
-	retl
-	xor	%o1,%o1,%o1
-.type	_sparcv9_rdtick,#function
-.size	_sparcv9_rdtick,.-_sparcv9_rdtick
-
 .global	_sparcv9_vis1_probe
 .align	8
 _sparcv9_vis1_probe:
diff --git a/src/lib/libssl/src/crypto/sparcv9cap.c b/src/lib/libssl/src/crypto/sparcv9cap.c
index 05c084807a..f49e71ec93 100644
--- a/src/lib/libssl/src/crypto/sparcv9cap.c
+++ b/src/lib/libssl/src/crypto/sparcv9cap.c
@@ -6,13 +6,12 @@
 #include <sys/time.h>
 #include <openssl/bn.h>
 
-#define SPARCV9_TICK_PRIVILEGED	(1<<0)
 #define SPARCV9_PREFER_FPU	(1<<1)
 #define SPARCV9_VIS1		(1<<2)
 #define SPARCV9_VIS2		(1<<3)	/* reserved */
 #define SPARCV9_FMADD		(1<<4)	/* reserved for SPARC64 V */
 
-static int OPENSSL_sparcv9cap_P = SPARCV9_TICK_PRIVILEGED;
+static int OPENSSL_sparcv9cap_P = 0;
 
 int
 bn_mul_mont(BN_ULONG *rp, const BN_ULONG *ap, const BN_ULONG *bp,
@@ -29,146 +28,11 @@ bn_mul_mont(BN_ULONG *rp, const BN_ULONG *ap, const BN_ULONG *bp,
 		return bn_mul_mont_int(rp, ap, bp, np, n0, num);
 }
 
-unsigned long	_sparcv9_rdtick(void);
 void		_sparcv9_vis1_probe(void);
 unsigned long	_sparcv9_vis1_instrument(void);
 void		_sparcv9_vis2_probe(void);
 void		_sparcv9_fmadd_probe(void);
 
-unsigned long
-OPENSSL_rdtsc(void)
-{
-	if (OPENSSL_sparcv9cap_P&SPARCV9_TICK_PRIVILEGED)
-#if defined(__sun) && defined(__SVR4)
-		return gethrtime();
-#else
-		return 0;
-#endif
-	else
-		return _sparcv9_rdtick();
-}
-
-#if 0 && defined(__sun) && defined(__SVR4)
-/* This code path is disabled, because of incompatibility of
- * libdevinfo.so.1 and libmalloc.so.1 (see below for details)
- */
-#include <malloc.h>
-#include <dlfcn.h>
-#include <libdevinfo.h>
-#include <sys/systeminfo.h>
-
-typedef di_node_t (*di_init_t)(const char *, uint_t);
-typedef void      (*di_fini_t)(di_node_t);
-typedef char *    (*di_node_name_t)(di_node_t);
-typedef int       (*di_walk_node_t)(di_node_t, uint_t, di_node_name_t, int (*)(di_node_t, di_node_name_t));
-
-#define DLLINK(h,name) (name=(name##_t)dlsym((h),#name))
-
-static int
-walk_nodename(di_node_t node, di_node_name_t di_node_name)
-{
-	char *name = (*di_node_name)(node);
-
-	/* This is expected to catch all UltraSPARC flavors prior T1 */
-	if (!strcmp (name, "SUNW,UltraSPARC") ||
-	    !strncmp(name,"SUNW,UltraSPARC-I",17))  /* covers II,III,IV */
-	{
-		OPENSSL_sparcv9cap_P |= SPARCV9_PREFER_FPU|SPARCV9_VIS1;
-
-		/* %tick is privileged only on UltraSPARC-I/II, but not IIe */
-		if (name[14]!='\0' && name[17]!='\0' && name[18]!='\0')
-			OPENSSL_sparcv9cap_P &= ~SPARCV9_TICK_PRIVILEGED;
-
-		return DI_WALK_TERMINATE;
-	}
-	/* This is expected to catch remaining UltraSPARCs, such as T1 */
-	else if (!strncmp(name, "SUNW,UltraSPARC", 15)) {
-		OPENSSL_sparcv9cap_P &= ~SPARCV9_TICK_PRIVILEGED;
-
-		return DI_WALK_TERMINATE;
-	}
-
-	return DI_WALK_CONTINUE;
-}
-
-void
-OPENSSL_cpuid_setup(void)
-{
-	void *h;
-	char *e, si[256];
-	static int trigger = 0;
-
-	if (trigger)
-		return;
-	trigger = 1;
-
-	if ((e = getenv("OPENSSL_sparcv9cap"))) {
-		OPENSSL_sparcv9cap_P = strtoul(e, NULL, 0);
-		return;
-	}
-
-	if (sysinfo(SI_MACHINE, si, sizeof(si)) > 0) {
-		if (strcmp(si, "sun4v"))
-			/* FPU is preferred for all CPUs, but US-T1/2 */
-			OPENSSL_sparcv9cap_P |= SPARCV9_PREFER_FPU;
-	}
-
-	if (sysinfo(SI_ISALIST, si, sizeof(si)) > 0) {
-		if (strstr(si, "+vis"))
-			OPENSSL_sparcv9cap_P |= SPARCV9_VIS1;
-		if (strstr(si, "+vis2")) {
-			OPENSSL_sparcv9cap_P |= SPARCV9_VIS2;
-			OPENSSL_sparcv9cap_P &= ~SPARCV9_TICK_PRIVILEGED;
-			return;
-		}
-	}
-#ifdef M_KEEP
-	/*
-	 * Solaris libdevinfo.so.1 is effectively incomatible with
-	 * libmalloc.so.1. Specifically, if application is linked with
-	 * -lmalloc, it crashes upon startup with SIGSEGV in
-	 * free(3LIBMALLOC) called by di_fini. Prior call to
-	 * mallopt(M_KEEP,0) somehow helps... But not always...
-	 */
-	if ((h = dlopen(NULL, RTLD_LAZY))) {
-			union { void *p;
-			int (*f)(int, int);
-		} sym;
-		if ((sym.p = dlsym(h, "mallopt"))) (*sym.f)(M_KEEP, 0);
-			dlclose(h);
-	}
-#endif
-	if ((h = dlopen("libdevinfo.so.1", RTLD_LAZY)))
-		do {
-			di_init_t	di_init;
-			di_fini_t	di_fini;
-			di_walk_node_t	di_walk_node;
-			di_node_name_t	di_node_name;
-			di_node_t	root_node;
-
-			if (!DLLINK(h, di_init))
-				break;
-			if (!DLLINK(h, di_fini))
-				break;
-			if (!DLLINK(h, di_walk_node))
-				break;
-			if (!DLLINK(h, di_node_name))
-				break;
-
-			if ((root_node = (*di_init)("/", DINFOSUBTREE)) !=
-			    DI_NODE_NIL) {
-				(*di_walk_node)(root_node, DI_WALK_SIBFIRST,
-				   di_node_name, walk_nodename);
-				(*di_fini)(root_node);
-			}
-		} while (0);
-
-	if (h)
-		dlclose(h);
-}
-
-#else
-
 static sigjmp_buf common_jmp;
 static void common_handler(int sig)
 {
@@ -193,7 +57,7 @@ OPENSSL_cpuid_setup(void)
 	}
 
 	/* Initial value, fits UltraSPARC-I&II... */
-	OPENSSL_sparcv9cap_P = SPARCV9_PREFER_FPU|SPARCV9_TICK_PRIVILEGED;
+	OPENSSL_sparcv9cap_P = SPARCV9_PREFER_FPU;
 
 	sigfillset(&all_masked);
 	sigdelset(&all_masked, SIGILL);
@@ -213,11 +77,6 @@ OPENSSL_cpuid_setup(void)
 	sigaction(SIGILL, &common_act, &ill_oact);
 	sigaction(SIGBUS,&common_act,&bus_oact);/* T1 fails 16-bit ldda [on Linux] */
 
-	if (sigsetjmp(common_jmp, 1) == 0) {
-		_sparcv9_rdtick();
-		OPENSSL_sparcv9cap_P &= ~SPARCV9_TICK_PRIVILEGED;
-	}
-
 	if (sigsetjmp(common_jmp, 1) == 0) {
 		_sparcv9_vis1_probe();
 		OPENSSL_sparcv9cap_P |= SPARCV9_VIS1;
@@ -240,5 +99,3 @@ OPENSSL_cpuid_setup(void)
 
 	sigprocmask(SIG_SETMASK, &oset, NULL);
 }
-
-#endif
diff --git a/src/lib/libssl/src/crypto/x86_64cpuid.pl b/src/lib/libssl/src/crypto/x86_64cpuid.pl
index 8422e91342..3fe9a2d566 100644
--- a/src/lib/libssl/src/crypto/x86_64cpuid.pl
+++ b/src/lib/libssl/src/crypto/x86_64cpuid.pl
@@ -42,16 +42,6 @@ OPENSSL_atomic_add:
 	ret
 .size	OPENSSL_atomic_add,.-OPENSSL_atomic_add
 
-.globl	OPENSSL_rdtsc
-.type	OPENSSL_rdtsc,\@abi-omnipotent
-.align	16
-OPENSSL_rdtsc:
-	rdtsc
-	shl	\$32,%rdx
-	or	%rdx,%rax
-	ret
-.size	OPENSSL_rdtsc,.-OPENSSL_rdtsc
-
 .globl	OPENSSL_ia32_cpuid
 .type	OPENSSL_ia32_cpuid,\@abi-omnipotent
 .align	16
diff --git a/src/lib/libssl/src/crypto/x86cpuid.pl b/src/lib/libssl/src/crypto/x86cpuid.pl
index 0da613f697..c7a57a3465 100644
--- a/src/lib/libssl/src/crypto/x86cpuid.pl
+++ b/src/lib/libssl/src/crypto/x86cpuid.pl
@@ -143,17 +143,6 @@ for (@ARGV) { $sse2=1 if (/-DOPENSSL_IA32_SSE2/); }
 
 &external_label("OPENSSL_ia32cap_P");
 
-&function_begin_B("OPENSSL_rdtsc","EXTRN\t_OPENSSL_ia32cap_P:DWORD");
-	&xor	("eax","eax");
-	&xor	("edx","edx");
-	&picmeup("ecx","OPENSSL_ia32cap_P");
-	&bt	(&DWP(0,"ecx"),4);
-	&jnc	(&label("notsc"));
-	&rdtsc	();
-&set_label("notsc");
-	&ret	();
-&function_end_B("OPENSSL_rdtsc");
-
 # This works in Ring 0 only [read DJGPP+MS-DOS+privileged DPMI host],
 # but it's safe to call it on any [supported] 32-bit platform...
 # Just check for [non-]zero return value...
-- 
cgit v1.2.3-55-g6feb