| /* |
| * blname.c - determine the freebl library name. |
| * This Source Code Form is subject to the terms of the Mozilla Public |
| * License, v. 2.0. If a copy of the MPL was not distributed with this |
| * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ |
| |
| #if defined(FREEBL_LOWHASH) |
| static const char* default_name = |
| SHLIB_PREFIX "freeblpriv" SHLIB_VERSION "." SHLIB_SUFFIX; |
| #else |
| static const char* default_name = |
| SHLIB_PREFIX "freebl" SHLIB_VERSION "." SHLIB_SUFFIX; |
| #endif |
| |
| /* getLibName() returns the name of the library to load. */ |
| |
| #if defined(SOLARIS) && defined(__sparc) |
| #include <stddef.h> |
| #include <strings.h> |
| #include <sys/systeminfo.h> |
| |
| #if defined(NSS_USE_64) |
| |
| const static char fpu_hybrid_shared_lib[] = "libfreebl_64fpu_3.so"; |
| const static char int_hybrid_shared_lib[] = "libfreebl_64int_3.so"; |
| const static char non_hybrid_shared_lib[] = "libfreebl_64fpu_3.so"; |
| |
| const static char int_hybrid_isa[] = "sparcv9"; |
| const static char fpu_hybrid_isa[] = "sparcv9+vis"; |
| |
| #else |
| |
| const static char fpu_hybrid_shared_lib[] = "libfreebl_32fpu_3.so"; |
| const static char int_hybrid_shared_lib[] = "libfreebl_32int64_3.so"; |
| /* This was for SPARC V8, now obsolete. */ |
| const static char* const non_hybrid_shared_lib = NULL; |
| |
| const static char int_hybrid_isa[] = "sparcv8plus"; |
| const static char fpu_hybrid_isa[] = "sparcv8plus+vis"; |
| |
| #endif |
| |
| static const char* |
| getLibName(void) |
| { |
| char* found_int_hybrid; |
| char* found_fpu_hybrid; |
| long buflen; |
| char buf[256]; |
| |
| buflen = sysinfo(SI_ISALIST, buf, sizeof buf); |
| if (buflen <= 0) |
| return NULL; |
| /* sysinfo output is always supposed to be NUL terminated, but ... */ |
| if (buflen < sizeof buf) |
| buf[buflen] = '\0'; |
| else |
| buf[(sizeof buf) - 1] = '\0'; |
| /* The ISA list is a space separated string of names of ISAs and |
| * ISA extensions, in order of decreasing performance. |
| * There are two different ISAs with which NSS's crypto code can be |
| * accelerated. If both are in the list, we take the first one. |
| * If one is in the list, we use it, and if neither then we use |
| * the base unaccelerated code. |
| */ |
| found_int_hybrid = strstr(buf, int_hybrid_isa); |
| found_fpu_hybrid = strstr(buf, fpu_hybrid_isa); |
| if (found_fpu_hybrid && |
| (!found_int_hybrid || |
| (found_int_hybrid - found_fpu_hybrid) >= 0)) { |
| return fpu_hybrid_shared_lib; |
| } |
| if (found_int_hybrid) { |
| return int_hybrid_shared_lib; |
| } |
| return non_hybrid_shared_lib; |
| } |
| |
| #elif defined(HPUX) && !defined(NSS_USE_64) && !defined(__ia64) |
| #include <unistd.h> |
| |
| /* This code tests to see if we're running on a PA2.x CPU. |
| ** It returns true (1) if so, and false (0) otherwise. |
| */ |
| static const char* |
| getLibName(void) |
| { |
| long cpu = sysconf(_SC_CPU_VERSION); |
| return (cpu == CPU_PA_RISC2_0) |
| ? "libfreebl_32fpu_3.sl" |
| : "libfreebl_32int_3.sl"; |
| } |
| #else |
| /* default case, for platforms/ABIs that have only one freebl shared lib. */ |
| static const char* |
| getLibName(void) |
| { |
| return default_name; |
| } |
| #endif |