summaryrefslogtreecommitdiff
path: root/crypto
diff options
context:
space:
mode:
authorchristos <christos@NetBSD.org>2019-01-06 22:20:50 +0000
committerchristos <christos@NetBSD.org>2019-01-06 22:20:50 +0000
commitc2c50f43beee6e5f5b29f22d630a4f17e7a6628c (patch)
treebf6a323b66e720a58dd02b19da18221a0d5cd21e /crypto
parentad970ad8929ea5c87b950a234da4d635518f3e00 (diff)
PR/53838: Scole Mail: OPENSSL_rdtsc() is reading a time counter
for randomness, and the powerpc code uses mftbu and mftb for access. The 601 is different than other powerpcs. It doesn't have a time base register (TBR), but a real time clock (RTC) so it needs to use different calls like mfrtcu/mfrtcl instead.
Diffstat (limited to 'crypto')
-rwxr-xr-xcrypto/external/bsd/openssl/dist/crypto/ppccpuid.pl11
1 files changed, 11 insertions, 0 deletions
diff --git a/crypto/external/bsd/openssl/dist/crypto/ppccpuid.pl b/crypto/external/bsd/openssl/dist/crypto/ppccpuid.pl
index 9d1cada4dc4..cd334346d26 100755
--- a/crypto/external/bsd/openssl/dist/crypto/ppccpuid.pl
+++ b/crypto/external/bsd/openssl/dist/crypto/ppccpuid.pl
@@ -132,6 +132,17 @@ $code.=<<___ if ($flavour =~ /64/);
mftb r3
___
$code.=<<___ if ($flavour !~ /64/);
+ mfspr r0,287
+ srwi r0,r0,0x10
+ cmplwi r0,0x1
+ bgt .Loop_rdtsc
+.Loop_rdtsc_601:
+ mfrtcu r5
+ mfrtcl r3
+ mfrtcu r4
+ cmplw r4,r5
+ bne .Loop_rdtsc_601
+ blr
Loop_rdtsc:
mftbu r5
mftb r3