From ddc20d4da9d770afeace2b4111d5d39d00e6c6b4 Mon Sep 17 00:00:00 2001 From: Andy Polyakov Date: Wed, 18 May 2011 16:24:19 +0000 Subject: [PATCH] x86_64cpuid.pl: allow shared build to work without -Bsymbolic. PR: 2466 --- crypto/perlasm/x86_64-xlate.pl | 29 ++++++++++++++++++++++------- crypto/x86_64cpuid.pl | 4 ++++ 2 files changed, 26 insertions(+), 7 deletions(-) diff --git a/crypto/perlasm/x86_64-xlate.pl b/crypto/perlasm/x86_64-xlate.pl index 61d77d941e..6749783e29 100755 --- a/crypto/perlasm/x86_64-xlate.pl +++ b/crypto/perlasm/x86_64-xlate.pl @@ -508,6 +508,11 @@ my %globals; } } elsif ($dir =~ /\.(text|data)/) { $current_segment=".$1"; + } elsif ($dir =~ /\.hidden/) { + if ($flavour eq "macosx") { $self->{value} = ".private_extern\t$prefix$line"; } + elsif ($flavour eq "mingw64") { $self->{value} = ""; } + } elsif ($dir =~ /\.comm/) { + $self->{value} = "$dir\t$prefix$line"; } $line = ""; return $self; @@ -615,6 +620,19 @@ my %globals; .join(",",@str) if (@str); last; }; + /\.comm/ && do { my @str=split(/,\s*/,$line); + my $v=undef; + if ($nasm) { + $v.="common $prefix@str[0] @str[1]:near"; + } else { + $v="$current_segment\tENDS\n" if ($current_segment); + $current_segment = ".data"; + $v.="$current_segment\tSEGMENT\n"; + $v.="COMM @str[0]:DWORD:".@str[1]/4; + } + $self->{value} = $v; + last; + }; } $line = ""; } @@ -629,14 +647,11 @@ my %globals; sub rex { local *opcode=shift; - my ($dst,$src)=@_; + my ($dst,$src,$rex)=@_; - if ($dst>=8 || $src>=8) { - $rex=0x40; - $rex|=0x04 if($dst>=8); - $rex|=0x01 if($src>=8); - push @opcode,$rex; - } + $rex|=0x04 if($dst>=8); + $rex|=0x01 if($src>=8); + push @opcode,($rex|0x40) if ($rex); } # older gas and ml64 don't handle SSE>2 instructions diff --git a/crypto/x86_64cpuid.pl b/crypto/x86_64cpuid.pl index ba95f0b229..40d42135bb 100644 --- a/crypto/x86_64cpuid.pl +++ b/crypto/x86_64cpuid.pl @@ -14,9 +14,13 @@ open STDOUT,"| $^X ${dir}perlasm/x86_64-xlate.pl $flavour $output"; print<<___; .extern OPENSSL_cpuid_setup +.hidden OPENSSL_cpuid_setup .section .init call OPENSSL_cpuid_setup +.hidden OPENSSL_ia32cap_P +.comm OPENSSL_ia32cap_P,8 + .text .globl OPENSSL_atomic_add -- 2.25.1