/src/nss-nspr/nss/lib/freebl/blname.c
Line | Count | Source (jump to first uncovered line) |
1 | | /* |
2 | | * blname.c - determine the freebl library name. |
3 | | * This Source Code Form is subject to the terms of the Mozilla Public |
4 | | * License, v. 2.0. If a copy of the MPL was not distributed with this |
5 | | * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ |
6 | | |
7 | | #if defined(FREEBL_LOWHASH) |
8 | | static const char* default_name = |
9 | | SHLIB_PREFIX "freeblpriv" SHLIB_VERSION "." SHLIB_SUFFIX; |
10 | | #else |
11 | | static const char* default_name = |
12 | | SHLIB_PREFIX "freebl" SHLIB_VERSION "." SHLIB_SUFFIX; |
13 | | #endif |
14 | | |
15 | | /* getLibName() returns the name of the library to load. */ |
16 | | |
17 | | #if defined(SOLARIS) && defined(__sparc) |
18 | | #include <stddef.h> |
19 | | #include <strings.h> |
20 | | #include <sys/systeminfo.h> |
21 | | |
22 | | #if defined(NSS_USE_64) |
23 | | |
24 | | const static char fpu_hybrid_shared_lib[] = "libfreebl_64fpu_3.so"; |
25 | | const static char int_hybrid_shared_lib[] = "libfreebl_64int_3.so"; |
26 | | const static char non_hybrid_shared_lib[] = "libfreebl_64fpu_3.so"; |
27 | | |
28 | | const static char int_hybrid_isa[] = "sparcv9"; |
29 | | const static char fpu_hybrid_isa[] = "sparcv9+vis"; |
30 | | |
31 | | #else |
32 | | |
33 | | const static char fpu_hybrid_shared_lib[] = "libfreebl_32fpu_3.so"; |
34 | | const static char int_hybrid_shared_lib[] = "libfreebl_32int64_3.so"; |
35 | | /* This was for SPARC V8, now obsolete. */ |
36 | | const static char* const non_hybrid_shared_lib = NULL; |
37 | | |
38 | | const static char int_hybrid_isa[] = "sparcv8plus"; |
39 | | const static char fpu_hybrid_isa[] = "sparcv8plus+vis"; |
40 | | |
41 | | #endif |
42 | | |
43 | | static const char* |
44 | | getLibName(void) |
45 | | { |
46 | | char* found_int_hybrid; |
47 | | char* found_fpu_hybrid; |
48 | | long buflen; |
49 | | char buf[256]; |
50 | | |
51 | | buflen = sysinfo(SI_ISALIST, buf, sizeof buf); |
52 | | if (buflen <= 0) |
53 | | return NULL; |
54 | | /* sysinfo output is always supposed to be NUL terminated, but ... */ |
55 | | if (buflen < sizeof buf) |
56 | | buf[buflen] = '\0'; |
57 | | else |
58 | | buf[(sizeof buf) - 1] = '\0'; |
59 | | /* The ISA list is a space separated string of names of ISAs and |
60 | | * ISA extensions, in order of decreasing performance. |
61 | | * There are two different ISAs with which NSS's crypto code can be |
62 | | * accelerated. If both are in the list, we take the first one. |
63 | | * If one is in the list, we use it, and if neither then we use |
64 | | * the base unaccelerated code. |
65 | | */ |
66 | | found_int_hybrid = strstr(buf, int_hybrid_isa); |
67 | | found_fpu_hybrid = strstr(buf, fpu_hybrid_isa); |
68 | | if (found_fpu_hybrid && |
69 | | (!found_int_hybrid || |
70 | | (found_int_hybrid - found_fpu_hybrid) >= 0)) { |
71 | | return fpu_hybrid_shared_lib; |
72 | | } |
73 | | if (found_int_hybrid) { |
74 | | return int_hybrid_shared_lib; |
75 | | } |
76 | | return non_hybrid_shared_lib; |
77 | | } |
78 | | |
79 | | #elif defined(HPUX) && !defined(NSS_USE_64) && !defined(__ia64) |
80 | | #include <unistd.h> |
81 | | |
82 | | /* This code tests to see if we're running on a PA2.x CPU. |
83 | | ** It returns true (1) if so, and false (0) otherwise. |
84 | | */ |
85 | | static const char* |
86 | | getLibName(void) |
87 | | { |
88 | | long cpu = sysconf(_SC_CPU_VERSION); |
89 | | return (cpu == CPU_PA_RISC2_0) |
90 | | ? "libfreebl_32fpu_3.sl" |
91 | | : "libfreebl_32int_3.sl"; |
92 | | } |
93 | | #else |
94 | | /* default case, for platforms/ABIs that have only one freebl shared lib. */ |
95 | | static const char* |
96 | | getLibName(void) |
97 | 0 | { |
98 | 0 | return default_name; |
99 | 0 | } |
100 | | #endif |