| 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"); |