summaryrefslogtreecommitdiffstats
path: root/ms/uplink.pl
diff options
context:
space:
mode:
authorAndy Polyakov <appro@openssl.org>2005-05-17 00:08:28 +0000
committerAndy Polyakov <appro@openssl.org>2005-05-17 00:08:28 +0000
commitea1b02db6ab4864befde88ed03099f075cf7db76 (patch)
tree6aa77dcf5934d6197d9fafa59d3ce55f4eb019f4 /ms/uplink.pl
parent2c4b354d32b1f34314f1a3ebeee0d0fcfb7505a0 (diff)
OPENSSL_Applink update.
Diffstat (limited to 'ms/uplink.pl')
-rwxr-xr-xms/uplink.pl31
1 files changed, 29 insertions, 2 deletions
diff --git a/ms/uplink.pl b/ms/uplink.pl
index 801f6e01fa..cd9d37f56f 100755
--- a/ms/uplink.pl
+++ b/ms/uplink.pl
@@ -29,10 +29,37 @@ $arg = shift;
if ($arg =~ /win32n/) { ia32nasm(); }
elsif ($arg =~ /win32/) { ia32masm(); }
-elsif ($arg =~ /ia64/) { ia64ias(); }
-elsif ($arg =~ /amd64/) { amd64masm(); }
+elsif ($arg =~ /coff/) { ia32gas(); }
+elsif ($arg =~ /win64i/ or $arg =~ /ia64/) { ia64ias(); }
+elsif ($arg =~ /win64a/ or $arg =~ /amd64/) { amd64masm(); }
else { die "nonsense $arg"; }
+sub ia32gas() {
+print <<___;
+.text
+___
+for ($i=1;$i<=$N;$i++) {
+print <<___;
+.def .Lazy$i; .scl 3; .type 32; .endef
+.align 4
+.Lazy$i:
+ pushl \$$i
+ pushl _OPENSSL_UplinkTable
+ call _OPENSSL_Uplink
+ addl \$8,%esp
+ jmp *(_OPENSSL_UplinkTable+4*$i)
+___
+}
+print <<___;
+.data
+.align 4
+.globl _OPENSSL_UplinkTable
+_OPENSSL_UplinkTable:
+ .long $N
+___
+for ($i=1;$i<=$N;$i++) { print " .long .Lazy$i\n"; }
+}
+
sub ia32masm() {
print <<___;
.386P