diff options
Diffstat (limited to 'crypto/sparcv9cap.c')
-rw-r--r-- | crypto/sparcv9cap.c | 131 |
1 files changed, 0 insertions, 131 deletions
diff --git a/crypto/sparcv9cap.c b/crypto/sparcv9cap.c index 8bf2846929..1731ef65f1 100644 --- a/crypto/sparcv9cap.c +++ b/crypto/sparcv9cap.c @@ -109,128 +109,6 @@ size_t OPENSSL_instrument_bus2(unsigned int *out, size_t cnt, size_t max) return 0; } -#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") || - /* covers II,III,IV */ - !strncmp(name, "SUNW,UltraSPARC-I", 17)) { - OPENSSL_sparcv9cap_P[0] |= 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[0] &= ~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[0] &= ~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[0] = 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[0] |= SPARCV9_PREFER_FPU; - } - - if (sysinfo(SI_ISALIST, si, sizeof(si)) > 0) { - if (strstr(si, "+vis")) - OPENSSL_sparcv9cap_P[0] |= SPARCV9_VIS1 | SPARCV9_BLK; - if (strstr(si, "+vis2")) { - OPENSSL_sparcv9cap_P[0] |= SPARCV9_VIS2; - OPENSSL_sparcv9cap_P[0] &= ~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) { @@ -307,13 +185,6 @@ void OPENSSL_cpuid_setup(void) _sparcv9_vis3_probe(); OPENSSL_sparcv9cap_P[0] |= SPARCV9_VIS3; } -# if 0 /* was planned at some point but never - * implemented in hardware */ - if (sigsetjmp(common_jmp, 1) == 0) { - (void)_sparcv9_random(); - OPENSSL_sparcv9cap_P[0] |= SPARCV9_RANDOM; - } -# endif /* * In wait for better solution _sparcv9_rdcfr is masked by @@ -342,5 +213,3 @@ void OPENSSL_cpuid_setup(void) } # endif } - -#endif |