1 Index: openssl-1.0.1c/crypto/des/asm/desboth.pl
2 ===================================================================
3 --- openssl-1.0.1c.orig/crypto/des/asm/desboth.pl 2001-10-24 23:20:56.000000000 +0200
4 +++ openssl-1.0.1c/crypto/des/asm/desboth.pl 2012-07-29 14:15:26.000000000 +0200
9 + &call (&label("pic_point0"));
10 + &set_label("pic_point0");
12 + &add ("ebp", "\$_GLOBAL_OFFSET_TABLE_+[.-" . &label("pic_point0") . "]");
15 &comment("Load the data words");
16 &mov($L,&DWP(0,"ebx","",0));
18 &mov(&swtmp(2), (DWC(($enc)?"1":"0")));
19 &mov(&swtmp(1), "eax");
20 &mov(&swtmp(0), "ebx");
21 - &call("DES_encrypt2");
22 + &exch("ebx", "ebp");
23 + &call("DES_encrypt2\@PLT");
24 + &exch("ebx", "ebp");
25 &mov(&swtmp(2), (DWC(($enc)?"0":"1")));
26 &mov(&swtmp(1), "edi");
27 &mov(&swtmp(0), "ebx");
28 - &call("DES_encrypt2");
29 + &exch("ebx", "ebp");
30 + &call("DES_encrypt2\@PLT");
31 + &exch("ebx", "ebp");
32 &mov(&swtmp(2), (DWC(($enc)?"1":"0")));
33 &mov(&swtmp(1), "esi");
34 &mov(&swtmp(0), "ebx");
35 - &call("DES_encrypt2");
36 + &exch("ebx", "ebp");
37 + &call("DES_encrypt2\@PLT");
38 + &exch("ebx", "ebp");
41 &mov($L,&DWP(0,"ebx","",0));
42 Index: openssl-1.0.1c/crypto/perlasm/cbc.pl
43 ===================================================================
44 --- openssl-1.0.1c.orig/crypto/perlasm/cbc.pl 2011-07-13 08:22:46.000000000 +0200
45 +++ openssl-1.0.1c/crypto/perlasm/cbc.pl 2012-07-29 14:15:26.000000000 +0200
47 &mov(&DWP($data_off,"esp","",0), "eax"); # put in array for call
48 &mov(&DWP($data_off+4,"esp","",0), "ebx"); #
51 + &call (&label("pic_point0"));
52 + &set_label("pic_point0");
54 + &add ("ebx", "\$_GLOBAL_OFFSET_TABLE_+[.-" . &label("pic_point0") . "]");
55 + &call("$enc_func\@PLT");
57 &mov("eax", &DWP($data_off,"esp","",0));
58 &mov("ebx", &DWP($data_off+4,"esp","",0));
60 &mov(&DWP($data_off,"esp","",0), "eax"); # put in array for call
61 &mov(&DWP($data_off+4,"esp","",0), "ebx"); #
64 + &call (&label("pic_point1"));
65 + &set_label("pic_point1");
67 + &add ("ebx", "\$_GLOBAL_OFFSET_TABLE_+[.-" . &label("pic_point1") . "]");
68 + &call("$enc_func\@PLT");
70 &mov("eax", &DWP($data_off,"esp","",0));
71 &mov("ebx", &DWP($data_off+4,"esp","",0));
73 &mov(&DWP($data_off,"esp","",0), "eax"); # put back
74 &mov(&DWP($data_off+4,"esp","",0), "ebx"); #
77 + &call (&label("pic_point2"));
78 + &set_label("pic_point2");
80 + &add ("ebx", "\$_GLOBAL_OFFSET_TABLE_+[.-" . &label("pic_point2") . "]");
81 + &call("$dec_func\@PLT");
83 &mov("eax", &DWP($data_off,"esp","",0)); # get return
84 &mov("ebx", &DWP($data_off+4,"esp","",0)); #
86 &mov(&DWP($data_off,"esp","",0), "eax"); # put back
87 &mov(&DWP($data_off+4,"esp","",0), "ebx"); #
90 + &call (&label("pic_point3"));
91 + &set_label("pic_point3");
93 + &add ("ebx", "\$_GLOBAL_OFFSET_TABLE_+[.-" . &label("pic_point3") . "]");
94 + &call("$dec_func\@PLT");
96 &mov("eax", &DWP($data_off,"esp","",0)); # get return
97 &mov("ebx", &DWP($data_off+4,"esp","",0)); #
98 Index: openssl-1.0.1c/crypto/perlasm/x86gas.pl
99 ===================================================================
100 --- openssl-1.0.1c.orig/crypto/perlasm/x86gas.pl 2011-12-09 20:16:35.000000000 +0100
101 +++ openssl-1.0.1c/crypto/perlasm/x86gas.pl 2012-07-29 14:15:26.000000000 +0200
103 if ($::macosx) { push (@out,"$tmp,2\n"); }
104 elsif ($::elf) { push (@out,"$tmp,4\n"); }
105 else { push (@out,"$tmp\n"); }
106 + if ($::elf) { push (@out,".hidden\tOPENSSL_ia32cap_P\n"); }
108 push(@out,$initseg) if ($initseg);
121 + addl \$_GLOBAL_OFFSET_TABLE_+[.-.pic_point0],%ebx
133 { $initseg.=<<___; # applies to both Cygwin and Mingw
134 Index: openssl-1.0.1c/crypto/x86cpuid.pl
135 ===================================================================
136 --- openssl-1.0.1c.orig/crypto/x86cpuid.pl 2012-02-28 15:20:34.000000000 +0100
137 +++ openssl-1.0.1c/crypto/x86cpuid.pl 2012-07-29 14:15:26.000000000 +0200
140 for (@ARGV) { $sse2=1 if (/-DOPENSSL_IA32_SSE2/); }
142 +push(@out, ".hidden OPENSSL_ia32cap_P\n");
144 &function_begin("OPENSSL_ia32_cpuid");
148 &set_label("nocpuid");
149 &function_end("OPENSSL_ia32_cpuid");
151 -&external_label("OPENSSL_ia32cap_P");
153 -&function_begin_B("OPENSSL_rdtsc","EXTRN\t_OPENSSL_ia32cap_P:DWORD");
154 +&function_begin_B("OPENSSL_rdtsc");
157 &picmeup("ecx","OPENSSL_ia32cap_P");
159 # This works in Ring 0 only [read DJGPP+MS-DOS+privileged DPMI host],
160 # but it's safe to call it on any [supported] 32-bit platform...
161 # Just check for [non-]zero return value...
162 -&function_begin_B("OPENSSL_instrument_halt","EXTRN\t_OPENSSL_ia32cap_P:DWORD");
163 +&function_begin_B("OPENSSL_instrument_halt");
164 &picmeup("ecx","OPENSSL_ia32cap_P");
165 &bt (&DWP(0,"ecx"),4);
166 &jnc (&label("nohalt")); # no TSC
169 &function_end_B("OPENSSL_far_spin");
171 -&function_begin_B("OPENSSL_wipe_cpu","EXTRN\t_OPENSSL_ia32cap_P:DWORD");
172 +&function_begin_B("OPENSSL_wipe_cpu");
175 &picmeup("ecx","OPENSSL_ia32cap_P");