summaryrefslogtreecommitdiffstats
path: root/crypto/perlasm
diff options
context:
space:
mode:
authorAndy Polyakov <appro@openssl.org>2004-08-29 21:36:37 +0000
committerAndy Polyakov <appro@openssl.org>2004-08-29 21:36:37 +0000
commit16760a3089da372d5cf181f127542f0082dc2aa9 (patch)
treee53453a3de608bc0dc4ec477a8d5494f33e5c80f /crypto/perlasm
parent2b247cf81fbc320a313f952e2ea39cf63aa21010 (diff)
Proper support for OpenBSD-i386 shared build, including assember modules!
"Proper" means "compiles and passes test." Versioning is broken (I think).
Diffstat (limited to 'crypto/perlasm')
-rw-r--r--crypto/perlasm/x86unix.pl14
1 files changed, 8 insertions, 6 deletions
diff --git a/crypto/perlasm/x86unix.pl b/crypto/perlasm/x86unix.pl
index 0fea7c827d..c34cd74b7a 100644
--- a/crypto/perlasm/x86unix.pl
+++ b/crypto/perlasm/x86unix.pl
@@ -347,7 +347,7 @@ EOF
{ $tmp=push(@out,"TYPE($func,\@function)\n"); }
elsif ($main'coff)
{ $tmp=push(@out,".def\t$func;\t.scl\t2;\t.type\t32;\t.endef\n"); }
- elsif ($main'aout)
+ elsif ($main'aout and !$main'pic)
{ }
else { $tmp=push(@out,".type\t$func,\@function\n"); }
push(@out,".align\t$align\n");
@@ -379,7 +379,7 @@ EOF
{ push(@out,"TYPE($func,\@function)\n"); }
elsif ($main'coff)
{ $tmp=push(@out,".def\t$func;\t.scl\t2;\t.type\t32;\t.endef\n"); }
- elsif ($main'aout)
+ elsif ($main'aout and !$main'pic)
{ }
else { push(@out,".type $func,\@function\n"); }
push(@out,".align\t$align\n");
@@ -717,11 +717,13 @@ ___
}
elsif ($main'aout)
{
- $tmp=<<___; # OpenBSD way...
-.text
-.globl ${under}_GLOBAL_\$I\$$f
+ local($ctor)="${under}_GLOBAL_\$I\$$f";
+ $tmp=".text\n";
+ $tmp.=".type $ctor,\@function\n" if ($main'pic);
+ $tmp.=<<___; # OpenBSD way...
+.globl $ctor
.align 2
-${under}_GLOBAL_\$I\$$f
+$ctor:
jmp $under$f
___
}