fix memory leak
[openssl.git] / crypto / perlasm / x86_64-xlate.pl
index dd600be7b8ccf5646e411d4d41df160b8270e9f8..784f45871415e4d3096de87ae7644282158e96f1 100755 (executable)
@@ -250,13 +250,14 @@ my %globals;
        $self->{index} =~ s/^[er](.?[0-9xpi])[d]?$/r\1/;
        $self->{base}  =~ s/^[er](.?[0-9xpi])[d]?$/r\1/;
 
+       # Solaris /usr/ccs/bin/as can't handle multiplications
+       # in $self->{label}, new gas requires sign extension...
+       use integer;
+       $self->{label} =~ s/(?<![\w\$\.])(0x?[0-9a-f]+)/oct($1)/egi;
+       $self->{label} =~ s/([0-9]+\s*[\*\/\%]\s*[0-9]+)/eval($1)/eg;
+       $self->{label} =~ s/([0-9]+)/$1<<32>>32/eg;
+
        if ($gas) {
-           # Solaris /usr/ccs/bin/as can't handle multiplications
-           # in $self->{label}, new gas requires sign extension...
-           use integer;
-           $self->{label} =~ s/(?<![\w\$\.])(0x?[0-9a-f]+)/oct($1)/egi;
-           $self->{label} =~ s/([0-9]+\s*[\*\/\%]\s*[0-9]+)/eval($1)/eg;
-           $self->{label} =~ s/([0-9]+)/$1<<32>>32/eg;
            $self->{label} =~ s/^___imp_/__imp__/   if ($flavour eq "mingw64");
 
            if (defined($self->{index})) {
@@ -274,7 +275,7 @@ my %globals;
            $self->{label} =~ s/\./\$/g;
            $self->{label} =~ s/(?<![\w\$\.])0x([0-9a-f]+)/0$1h/ig;
            $self->{label} = "($self->{label})" if ($self->{label} =~ /[\*\+\-\/]/);
-           $sz="q" if ($self->{asterisk});
+           $sz="q" if ($self->{asterisk} || opcode->mnemonic() eq "movq");
 
            if (defined($self->{index})) {
                sprintf "%s[%s%s*%d%s]",$szmap{$sz},
@@ -630,7 +631,7 @@ my %globals;
                                        $v.="common     $prefix@str[0] @str[1]";
                                    } else {
                                        $v="$current_segment\tENDS\n" if ($current_segment);
-                                       $current_segment = ".data";
+                                       $current_segment = "_DATA";
                                        $v.="$current_segment\tSEGMENT\n";
                                        $v.="COMM       @str[0]:DWORD:".@str[1]/4;
                                    }