forked from mirrors/nixpkgs
106 lines
3.2 KiB
Diff
106 lines
3.2 KiB
Diff
|
diff --git a/crypto/cryptlib.c b/crypto/cryptlib.c
|
||
|
index 1925428..d2e42d2 100644
|
||
|
--- a/crypto/cryptlib.c
|
||
|
+++ b/crypto/cryptlib.c
|
||
|
@@ -676,10 +676,15 @@ typedef unsigned __int64 IA32CAP;
|
||
|
# else
|
||
|
typedef unsigned long long IA32CAP;
|
||
|
# endif
|
||
|
+
|
||
|
+/* Compat function for STEAM */
|
||
|
+extern IA32CAP OPENSSL_ia32_cpuid_new(unsigned int*);
|
||
|
+IA32CAP OPENSSL_ia32_cpuid(void) { return OPENSSL_ia32_cpuid_new(OPENSSL_ia32cap_P); }
|
||
|
+
|
||
|
void OPENSSL_cpuid_setup(void)
|
||
|
{
|
||
|
static int trigger = 0;
|
||
|
- IA32CAP OPENSSL_ia32_cpuid(unsigned int *);
|
||
|
+ IA32CAP OPENSSL_ia32_cpuid_new(unsigned int *);
|
||
|
IA32CAP vec;
|
||
|
char *env;
|
||
|
|
||
|
@@ -697,9 +702,9 @@ void OPENSSL_cpuid_setup(void)
|
||
|
vec = strtoul(env + off, NULL, 0);
|
||
|
# endif
|
||
|
if (off)
|
||
|
- vec = OPENSSL_ia32_cpuid(OPENSSL_ia32cap_P) & ~vec;
|
||
|
+ vec = OPENSSL_ia32_cpuid_new(OPENSSL_ia32cap_P) & ~vec;
|
||
|
else if (env[0] == ':')
|
||
|
- vec = OPENSSL_ia32_cpuid(OPENSSL_ia32cap_P);
|
||
|
+ vec = OPENSSL_ia32_cpuid_new(OPENSSL_ia32cap_P);
|
||
|
|
||
|
OPENSSL_ia32cap_P[2] = 0;
|
||
|
if ((env = strchr(env, ':'))) {
|
||
|
@@ -713,7 +718,7 @@ void OPENSSL_cpuid_setup(void)
|
||
|
OPENSSL_ia32cap_P[2] = vecx;
|
||
|
}
|
||
|
} else
|
||
|
- vec = OPENSSL_ia32_cpuid(OPENSSL_ia32cap_P);
|
||
|
+ vec = OPENSSL_ia32_cpuid_new(OPENSSL_ia32cap_P);
|
||
|
|
||
|
/*
|
||
|
* |(1<<10) sets a reserved bit to signal that variable
|
||
|
diff --git a/crypto/cryptlib.h b/crypto/cryptlib.h
|
||
|
index fba180a..b927c79 100644
|
||
|
--- a/crypto/cryptlib.h
|
||
|
+++ b/crypto/cryptlib.h
|
||
|
@@ -99,6 +99,9 @@ extern "C" {
|
||
|
# define HEX_SIZE(type) (sizeof(type)*2)
|
||
|
|
||
|
void OPENSSL_cpuid_setup(void);
|
||
|
+#pragma GCC visibility push(hidden)
|
||
|
+unsigned long long OPENSSL_ia32_cpuid(void);
|
||
|
+#pragma GCC visibility pop
|
||
|
extern unsigned int OPENSSL_ia32cap_P[];
|
||
|
void OPENSSL_showfatal(const char *fmta, ...);
|
||
|
void *OPENSSL_stderr(void);
|
||
|
diff --git a/crypto/x86_64cpuid.pl b/crypto/x86_64cpuid.pl
|
||
|
index d208d02..d4c0b24 100644
|
||
|
--- a/crypto/x86_64cpuid.pl
|
||
|
+++ b/crypto/x86_64cpuid.pl
|
||
|
@@ -52,10 +52,10 @@ OPENSSL_rdtsc:
|
||
|
ret
|
||
|
.size OPENSSL_rdtsc,.-OPENSSL_rdtsc
|
||
|
|
||
|
-.globl OPENSSL_ia32_cpuid
|
||
|
-.type OPENSSL_ia32_cpuid,\@function,1
|
||
|
+.globl OPENSSL_ia32_cpuid_new
|
||
|
+.type OPENSSL_ia32_cpuid_new,\@function,1
|
||
|
.align 16
|
||
|
-OPENSSL_ia32_cpuid:
|
||
|
+OPENSSL_ia32_cpuid_new:
|
||
|
mov %rbx,%r8 # save %rbx
|
||
|
|
||
|
xor %eax,%eax
|
||
|
@@ -181,7 +181,7 @@ OPENSSL_ia32_cpuid:
|
||
|
mov %r8,%rbx # restore %rbx
|
||
|
or %r9,%rax
|
||
|
ret
|
||
|
-.size OPENSSL_ia32_cpuid,.-OPENSSL_ia32_cpuid
|
||
|
+.size OPENSSL_ia32_cpuid_new,.-OPENSSL_ia32_cpuid_new
|
||
|
|
||
|
.globl OPENSSL_cleanse
|
||
|
.type OPENSSL_cleanse,\@abi-omnipotent
|
||
|
diff --git a/crypto/x86cpuid.pl b/crypto/x86cpuid.pl
|
||
|
index e95f627..0781010 100644
|
||
|
--- a/crypto/x86cpuid.pl
|
||
|
+++ b/crypto/x86cpuid.pl
|
||
|
@@ -8,7 +8,7 @@ require "x86asm.pl";
|
||
|
|
||
|
for (@ARGV) { $sse2=1 if (/-DOPENSSL_IA32_SSE2/); }
|
||
|
|
||
|
-&function_begin("OPENSSL_ia32_cpuid");
|
||
|
+&function_begin("OPENSSL_ia32_cpuid_new");
|
||
|
&xor ("edx","edx");
|
||
|
&pushf ();
|
||
|
&pop ("eax");
|
||
|
@@ -153,7 +153,7 @@ for (@ARGV) { $sse2=1 if (/-DOPENSSL_IA32_SSE2/); }
|
||
|
&mov ("eax","esi");
|
||
|
&mov ("edx","ebp");
|
||
|
&set_label("nocpuid");
|
||
|
-&function_end("OPENSSL_ia32_cpuid");
|
||
|
+&function_end("OPENSSL_ia32_cpuid_new");
|
||
|
|
||
|
&external_label("OPENSSL_ia32cap_P");
|
||
|
|