Commit f3c26535 authored by Andy Polyakov's avatar Andy Polyakov
Browse files

Make some shortcuts in sparcv9cap.c. Trouble is that di_walk_node result

is inconsistent among CPU generations.
parent 23296942
Loading
Loading
Loading
Loading
+21 −1
Original line number Diff line number Diff line
@@ -41,6 +41,7 @@ unsigned long OPENSSL_rdtsc(void)

#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);
@@ -79,7 +80,7 @@ static int walk_nodename(di_node_t node, di_node_name_t di_node_name)
void OPENSSL_cpuid_setup(void)
	{
	void *h;
	char *e;
	char *e,si[256];
	static int trigger=0;

	if (trigger) return;
@@ -91,6 +92,25 @@ void OPENSSL_cpuid_setup(void)
		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;
			}
		}

	if ((h = dlopen("libdevinfo.so.1",RTLD_LAZY))) do
		{
		di_init_t	di_init;