Commit ddc20d4d authored by Andy Polyakov's avatar Andy Polyakov
Browse files

x86_64cpuid.pl: allow shared build to work without -Bsymbolic.

PR: 2466
parent b5084203
Loading
Loading
Loading
Loading
+22 −7
Original line number Diff line number Diff line
@@ -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;
   }
   push @opcode,($rex|0x40) if ($rex);
}

# older gas and ml64 don't handle SSE>2 instructions
+4 −0
Original line number Diff line number Diff line
@@ -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