178 lines
5.5 KiB
Diff
178 lines
5.5 KiB
Diff
|
Upstream-Status: Backport [debian]
|
||
|
|
||
|
Index: openssl-1.0.1c/crypto/des/asm/desboth.pl
|
||
|
===================================================================
|
||
|
--- openssl-1.0.1c.orig/crypto/des/asm/desboth.pl 2001-10-24 23:20:56.000000000 +0200
|
||
|
+++ openssl-1.0.1c/crypto/des/asm/desboth.pl 2012-07-29 14:15:26.000000000 +0200
|
||
|
@@ -16,6 +16,11 @@
|
||
|
|
||
|
&push("edi");
|
||
|
|
||
|
+ &call (&label("pic_point0"));
|
||
|
+ &set_label("pic_point0");
|
||
|
+ &blindpop("ebp");
|
||
|
+ &add ("ebp", "\$_GLOBAL_OFFSET_TABLE_+[.-" . &label("pic_point0") . "]");
|
||
|
+
|
||
|
&comment("");
|
||
|
&comment("Load the data words");
|
||
|
&mov($L,&DWP(0,"ebx","",0));
|
||
|
@@ -47,15 +52,21 @@
|
||
|
&mov(&swtmp(2), (DWC(($enc)?"1":"0")));
|
||
|
&mov(&swtmp(1), "eax");
|
||
|
&mov(&swtmp(0), "ebx");
|
||
|
- &call("DES_encrypt2");
|
||
|
+ &exch("ebx", "ebp");
|
||
|
+ &call("DES_encrypt2\@PLT");
|
||
|
+ &exch("ebx", "ebp");
|
||
|
&mov(&swtmp(2), (DWC(($enc)?"0":"1")));
|
||
|
&mov(&swtmp(1), "edi");
|
||
|
&mov(&swtmp(0), "ebx");
|
||
|
- &call("DES_encrypt2");
|
||
|
+ &exch("ebx", "ebp");
|
||
|
+ &call("DES_encrypt2\@PLT");
|
||
|
+ &exch("ebx", "ebp");
|
||
|
&mov(&swtmp(2), (DWC(($enc)?"1":"0")));
|
||
|
&mov(&swtmp(1), "esi");
|
||
|
&mov(&swtmp(0), "ebx");
|
||
|
- &call("DES_encrypt2");
|
||
|
+ &exch("ebx", "ebp");
|
||
|
+ &call("DES_encrypt2\@PLT");
|
||
|
+ &exch("ebx", "ebp");
|
||
|
|
||
|
&stack_pop(3);
|
||
|
&mov($L,&DWP(0,"ebx","",0));
|
||
|
Index: openssl-1.0.1c/crypto/perlasm/cbc.pl
|
||
|
===================================================================
|
||
|
--- openssl-1.0.1c.orig/crypto/perlasm/cbc.pl 2011-07-13 08:22:46.000000000 +0200
|
||
|
+++ openssl-1.0.1c/crypto/perlasm/cbc.pl 2012-07-29 14:15:26.000000000 +0200
|
||
|
@@ -122,7 +122,11 @@
|
||
|
&mov(&DWP($data_off,"esp","",0), "eax"); # put in array for call
|
||
|
&mov(&DWP($data_off+4,"esp","",0), "ebx"); #
|
||
|
|
||
|
- &call($enc_func);
|
||
|
+ &call (&label("pic_point0"));
|
||
|
+ &set_label("pic_point0");
|
||
|
+ &blindpop("ebx");
|
||
|
+ &add ("ebx", "\$_GLOBAL_OFFSET_TABLE_+[.-" . &label("pic_point0") . "]");
|
||
|
+ &call("$enc_func\@PLT");
|
||
|
|
||
|
&mov("eax", &DWP($data_off,"esp","",0));
|
||
|
&mov("ebx", &DWP($data_off+4,"esp","",0));
|
||
|
@@ -185,7 +189,11 @@
|
||
|
&mov(&DWP($data_off,"esp","",0), "eax"); # put in array for call
|
||
|
&mov(&DWP($data_off+4,"esp","",0), "ebx"); #
|
||
|
|
||
|
- &call($enc_func);
|
||
|
+ &call (&label("pic_point1"));
|
||
|
+ &set_label("pic_point1");
|
||
|
+ &blindpop("ebx");
|
||
|
+ &add ("ebx", "\$_GLOBAL_OFFSET_TABLE_+[.-" . &label("pic_point1") . "]");
|
||
|
+ &call("$enc_func\@PLT");
|
||
|
|
||
|
&mov("eax", &DWP($data_off,"esp","",0));
|
||
|
&mov("ebx", &DWP($data_off+4,"esp","",0));
|
||
|
@@ -218,7 +226,11 @@
|
||
|
&mov(&DWP($data_off,"esp","",0), "eax"); # put back
|
||
|
&mov(&DWP($data_off+4,"esp","",0), "ebx"); #
|
||
|
|
||
|
- &call($dec_func);
|
||
|
+ &call (&label("pic_point2"));
|
||
|
+ &set_label("pic_point2");
|
||
|
+ &blindpop("ebx");
|
||
|
+ &add ("ebx", "\$_GLOBAL_OFFSET_TABLE_+[.-" . &label("pic_point2") . "]");
|
||
|
+ &call("$dec_func\@PLT");
|
||
|
|
||
|
&mov("eax", &DWP($data_off,"esp","",0)); # get return
|
||
|
&mov("ebx", &DWP($data_off+4,"esp","",0)); #
|
||
|
@@ -261,7 +273,11 @@
|
||
|
&mov(&DWP($data_off,"esp","",0), "eax"); # put back
|
||
|
&mov(&DWP($data_off+4,"esp","",0), "ebx"); #
|
||
|
|
||
|
- &call($dec_func);
|
||
|
+ &call (&label("pic_point3"));
|
||
|
+ &set_label("pic_point3");
|
||
|
+ &blindpop("ebx");
|
||
|
+ &add ("ebx", "\$_GLOBAL_OFFSET_TABLE_+[.-" . &label("pic_point3") . "]");
|
||
|
+ &call("$dec_func\@PLT");
|
||
|
|
||
|
&mov("eax", &DWP($data_off,"esp","",0)); # get return
|
||
|
&mov("ebx", &DWP($data_off+4,"esp","",0)); #
|
||
|
Index: openssl-1.0.1c/crypto/perlasm/x86gas.pl
|
||
|
===================================================================
|
||
|
--- openssl-1.0.1c.orig/crypto/perlasm/x86gas.pl 2011-12-09 20:16:35.000000000 +0100
|
||
|
+++ openssl-1.0.1c/crypto/perlasm/x86gas.pl 2012-07-29 14:15:26.000000000 +0200
|
||
|
@@ -161,6 +161,7 @@
|
||
|
if ($::macosx) { push (@out,"$tmp,2\n"); }
|
||
|
elsif ($::elf) { push (@out,"$tmp,4\n"); }
|
||
|
else { push (@out,"$tmp\n"); }
|
||
|
+ if ($::elf) { push (@out,".hidden\tOPENSSL_ia32cap_P\n"); }
|
||
|
}
|
||
|
push(@out,$initseg) if ($initseg);
|
||
|
}
|
||
|
@@ -218,8 +219,23 @@
|
||
|
elsif ($::elf)
|
||
|
{ $initseg.=<<___;
|
||
|
.section .init
|
||
|
+___
|
||
|
+ if ($::pic)
|
||
|
+ { $initseg.=<<___;
|
||
|
+ pushl %ebx
|
||
|
+ call .pic_point0
|
||
|
+.pic_point0:
|
||
|
+ popl %ebx
|
||
|
+ addl \$_GLOBAL_OFFSET_TABLE_+[.-.pic_point0],%ebx
|
||
|
+ call $f\@PLT
|
||
|
+ popl %ebx
|
||
|
+___
|
||
|
+ }
|
||
|
+ else
|
||
|
+ { $initseg.=<<___;
|
||
|
call $f
|
||
|
___
|
||
|
+ }
|
||
|
}
|
||
|
elsif ($::coff)
|
||
|
{ $initseg.=<<___; # applies to both Cygwin and Mingw
|
||
|
Index: openssl-1.0.1c/crypto/x86cpuid.pl
|
||
|
===================================================================
|
||
|
--- openssl-1.0.1c.orig/crypto/x86cpuid.pl 2012-02-28 15:20:34.000000000 +0100
|
||
|
+++ openssl-1.0.1c/crypto/x86cpuid.pl 2012-07-29 14:15:26.000000000 +0200
|
||
|
@@ -8,6 +8,8 @@
|
||
|
|
||
|
for (@ARGV) { $sse2=1 if (/-DOPENSSL_IA32_SSE2/); }
|
||
|
|
||
|
+push(@out, ".hidden OPENSSL_ia32cap_P\n");
|
||
|
+
|
||
|
&function_begin("OPENSSL_ia32_cpuid");
|
||
|
&xor ("edx","edx");
|
||
|
&pushf ();
|
||
|
@@ -139,9 +141,7 @@
|
||
|
&set_label("nocpuid");
|
||
|
&function_end("OPENSSL_ia32_cpuid");
|
||
|
|
||
|
-&external_label("OPENSSL_ia32cap_P");
|
||
|
-
|
||
|
-&function_begin_B("OPENSSL_rdtsc","EXTRN\t_OPENSSL_ia32cap_P:DWORD");
|
||
|
+&function_begin_B("OPENSSL_rdtsc");
|
||
|
&xor ("eax","eax");
|
||
|
&xor ("edx","edx");
|
||
|
&picmeup("ecx","OPENSSL_ia32cap_P");
|
||
|
@@ -155,7 +155,7 @@
|
||
|
# This works in Ring 0 only [read DJGPP+MS-DOS+privileged DPMI host],
|
||
|
# but it's safe to call it on any [supported] 32-bit platform...
|
||
|
# Just check for [non-]zero return value...
|
||
|
-&function_begin_B("OPENSSL_instrument_halt","EXTRN\t_OPENSSL_ia32cap_P:DWORD");
|
||
|
+&function_begin_B("OPENSSL_instrument_halt");
|
||
|
&picmeup("ecx","OPENSSL_ia32cap_P");
|
||
|
&bt (&DWP(0,"ecx"),4);
|
||
|
&jnc (&label("nohalt")); # no TSC
|
||
|
@@ -222,7 +222,7 @@
|
||
|
&ret ();
|
||
|
&function_end_B("OPENSSL_far_spin");
|
||
|
|
||
|
-&function_begin_B("OPENSSL_wipe_cpu","EXTRN\t_OPENSSL_ia32cap_P:DWORD");
|
||
|
+&function_begin_B("OPENSSL_wipe_cpu");
|
||
|
&xor ("eax","eax");
|
||
|
&xor ("edx","edx");
|
||
|
&picmeup("ecx","OPENSSL_ia32cap_P");
|