diff options
Diffstat (limited to 'src/lib/libcrypto/cryptlib.c')
| -rw-r--r-- | src/lib/libcrypto/cryptlib.c | 27 |
1 files changed, 5 insertions, 22 deletions
diff --git a/src/lib/libcrypto/cryptlib.c b/src/lib/libcrypto/cryptlib.c index fa091fbaea..8dec9caa93 100644 --- a/src/lib/libcrypto/cryptlib.c +++ b/src/lib/libcrypto/cryptlib.c | |||
| @@ -1,4 +1,4 @@ | |||
| 1 | /* $OpenBSD: cryptlib.c,v 1.38 2016/11/04 13:56:04 miod Exp $ */ | 1 | /* $OpenBSD: cryptlib.c,v 1.39 2016/11/04 17:30:30 miod Exp $ */ |
| 2 | /* ==================================================================== | 2 | /* ==================================================================== |
| 3 | * Copyright (c) 1998-2006 The OpenSSL Project. All rights reserved. | 3 | * Copyright (c) 1998-2006 The OpenSSL Project. All rights reserved. |
| 4 | * | 4 | * |
| @@ -627,47 +627,30 @@ CRYPTO_get_lock_name(int type) | |||
| 627 | defined(__INTEL__) || \ | 627 | defined(__INTEL__) || \ |
| 628 | defined(__x86_64) || defined(__x86_64__) || defined(_M_AMD64) || defined(_M_X64) | 628 | defined(__x86_64) || defined(__x86_64__) || defined(_M_AMD64) || defined(_M_X64) |
| 629 | 629 | ||
| 630 | unsigned int OPENSSL_ia32cap_P[2]; | 630 | uint64_t OPENSSL_ia32cap_P; |
| 631 | 631 | ||
| 632 | uint64_t | 632 | uint64_t |
| 633 | OPENSSL_cpu_caps(void) | 633 | OPENSSL_cpu_caps(void) |
| 634 | { | 634 | { |
| 635 | return *(uint64_t *)OPENSSL_ia32cap_P; | 635 | return OPENSSL_ia32cap_P; |
| 636 | } | 636 | } |
| 637 | 637 | ||
| 638 | #if defined(OPENSSL_CPUID_OBJ) && !defined(OPENSSL_NO_ASM) | 638 | #if defined(OPENSSL_CPUID_OBJ) && !defined(OPENSSL_NO_ASM) |
| 639 | #define OPENSSL_CPUID_SETUP | 639 | #define OPENSSL_CPUID_SETUP |
| 640 | typedef unsigned long long IA32CAP; | ||
| 641 | void | 640 | void |
| 642 | OPENSSL_cpuid_setup(void) | 641 | OPENSSL_cpuid_setup(void) |
| 643 | { | 642 | { |
| 644 | static int trigger = 0; | 643 | static int trigger = 0; |
| 645 | IA32CAP OPENSSL_ia32_cpuid(void); | 644 | uint64_t OPENSSL_ia32_cpuid(void); |
| 646 | IA32CAP vec; | ||
| 647 | 645 | ||
| 648 | if (trigger) | 646 | if (trigger) |
| 649 | return; | 647 | return; |
| 650 | trigger = 1; | 648 | trigger = 1; |
| 651 | 649 | OPENSSL_ia32cap_P = OPENSSL_ia32_cpuid(); | |
| 652 | vec = OPENSSL_ia32_cpuid(); | ||
| 653 | |||
| 654 | /* | ||
| 655 | * |(1<<10) sets a reserved bit to signal that variable | ||
| 656 | * was initialized already... This is to avoid interference | ||
| 657 | * with cpuid snippets in ELF .init segment. | ||
| 658 | */ | ||
| 659 | OPENSSL_ia32cap_P[0] = (unsigned int)vec | (1 << 10); | ||
| 660 | OPENSSL_ia32cap_P[1] = (unsigned int)(vec >> 32); | ||
| 661 | } | 650 | } |
| 662 | #endif | 651 | #endif |
| 663 | 652 | ||
| 664 | #else | 653 | #else |
| 665 | unsigned long * | ||
| 666 | OPENSSL_ia32cap_loc(void) | ||
| 667 | { | ||
| 668 | return NULL; | ||
| 669 | } | ||
| 670 | |||
| 671 | uint64_t | 654 | uint64_t |
| 672 | OPENSSL_cpu_caps(void) | 655 | OPENSSL_cpu_caps(void) |
| 673 | { | 656 | { |
