diff options
| author | miod <> | 2015-09-11 14:57:29 +0000 |
|---|---|---|
| committer | miod <> | 2015-09-11 14:57:29 +0000 |
| commit | 1e96b158b233731c4fcc4561d29354dfa0b7799a (patch) | |
| tree | 690535d57046faa98c31f6e44079f382e1cc83d4 /src | |
| parent | 3b074f2713c35cff8731567c2f0859e34c056c10 (diff) | |
| download | openbsd-1e96b158b233731c4fcc4561d29354dfa0b7799a.tar.gz openbsd-1e96b158b233731c4fcc4561d29354dfa0b7799a.tar.bz2 openbsd-1e96b158b233731c4fcc4561d29354dfa0b7799a.zip | |
Bring back the expansion-into-.byte-sequences routines removed in r1.9, but
only define them if not building for the "openbsd" flavour.
This way, non-obfuscated output can still be generated for analysis, by using
the "openbsd" flavour (which OpenBSD HEAD will do), and obfuscated output,
compatible with older as(1), will be generated for other platforms.
The portable version of LibreSSL can then use "openbsd-portable" as the
flavour for OpenBSD/amd64 so that generated files can be compiled with
OpenBSD 5.7 and other older versions stuck with as(1) 2.15.
Diffstat (limited to 'src')
| -rwxr-xr-x | src/lib/libcrypto/perlasm/x86_64-xlate.pl | 79 | ||||
| -rwxr-xr-x | src/lib/libssl/src/crypto/perlasm/x86_64-xlate.pl | 79 |
2 files changed, 134 insertions, 24 deletions
diff --git a/src/lib/libcrypto/perlasm/x86_64-xlate.pl b/src/lib/libcrypto/perlasm/x86_64-xlate.pl index 82992f41e5..4bd53da33d 100755 --- a/src/lib/libcrypto/perlasm/x86_64-xlate.pl +++ b/src/lib/libcrypto/perlasm/x86_64-xlate.pl | |||
| @@ -662,6 +662,32 @@ sub rex { | |||
| 662 | my %regrm = ( "%eax"=>0, "%ecx"=>1, "%edx"=>2, "%ebx"=>3, | 662 | my %regrm = ( "%eax"=>0, "%ecx"=>1, "%edx"=>2, "%ebx"=>3, |
| 663 | "%esp"=>4, "%ebp"=>5, "%esi"=>6, "%edi"=>7 ); | 663 | "%esp"=>4, "%ebp"=>5, "%esi"=>6, "%edi"=>7 ); |
| 664 | 664 | ||
| 665 | if ($flavour ne "openbsd") { | ||
| 666 | |||
| 667 | $movq = sub { # elderly gas can't handle inter-register movq | ||
| 668 | my $arg = shift; | ||
| 669 | my @opcode=(0x66); | ||
| 670 | if ($arg =~ /%xmm([0-9]+),\s*%r(\w+)/) { | ||
| 671 | my ($src,$dst)=($1,$2); | ||
| 672 | if ($dst !~ /[0-9]+/) { $dst = $regrm{"%e$dst"}; } | ||
| 673 | rex(\@opcode,$src,$dst,0x8); | ||
| 674 | push @opcode,0x0f,0x7e; | ||
| 675 | push @opcode,0xc0|(($src&7)<<3)|($dst&7); # ModR/M | ||
| 676 | @opcode; | ||
| 677 | } elsif ($arg =~ /%r(\w+),\s*%xmm([0-9]+)/) { | ||
| 678 | my ($src,$dst)=($2,$1); | ||
| 679 | if ($dst !~ /[0-9]+/) { $dst = $regrm{"%e$dst"}; } | ||
| 680 | rex(\@opcode,$src,$dst,0x8); | ||
| 681 | push @opcode,0x0f,0x6e; | ||
| 682 | push @opcode,0xc0|(($src&7)<<3)|($dst&7); # ModR/M | ||
| 683 | @opcode; | ||
| 684 | } else { | ||
| 685 | (); | ||
| 686 | } | ||
| 687 | }; | ||
| 688 | |||
| 689 | } | ||
| 690 | |||
| 665 | my $pextrd = sub { | 691 | my $pextrd = sub { |
| 666 | if (shift =~ /\$([0-9]+),\s*%xmm([0-9]+),\s*(%\w+)/) { | 692 | if (shift =~ /\$([0-9]+),\s*%xmm([0-9]+),\s*(%\w+)/) { |
| 667 | my @opcode=(0x66); | 693 | my @opcode=(0x66); |
| @@ -698,20 +724,49 @@ my $pinsrd = sub { | |||
| 698 | } | 724 | } |
| 699 | }; | 725 | }; |
| 700 | 726 | ||
| 701 | my $pclmulqdq = sub { | 727 | if ($flavour ne "openbsd") { |
| 702 | if (shift =~ /\$([x0-9a-f]+),\s*%xmm([0-9]+),\s*%xmm([0-9]+)/) { | 728 | |
| 703 | my @opcode=(0x66); | 729 | $pshufb = sub { |
| 704 | rex(\@opcode,$3,$2); | 730 | if (shift =~ /%xmm([0-9]+),\s*%xmm([0-9]+)/) { |
| 705 | push @opcode,0x0f,0x3a,0x44; | 731 | my @opcode=(0x66); |
| 706 | push @opcode,0xc0|($2&7)|(($3&7)<<3); # ModR/M | 732 | rex(\@opcode,$2,$1); |
| 707 | my $c=$1; | 733 | push @opcode,0x0f,0x38,0x00; |
| 708 | push @opcode,$c=~/^0/?oct($c):$c; | 734 | push @opcode,0xc0|($1&7)|(($2&7)<<3); # ModR/M |
| 709 | @opcode; | 735 | @opcode; |
| 710 | } else { | 736 | } else { |
| 711 | (); | 737 | (); |
| 712 | } | 738 | } |
| 739 | }; | ||
| 740 | |||
| 741 | $palignr = sub { | ||
| 742 | if (shift =~ /\$([0-9]+),\s*%xmm([0-9]+),\s*%xmm([0-9]+)/) { | ||
| 743 | my @opcode=(0x66); | ||
| 744 | rex(\@opcode,$3,$2); | ||
| 745 | push @opcode,0x0f,0x3a,0x0f; | ||
| 746 | push @opcode,0xc0|($2&7)|(($3&7)<<3); # ModR/M | ||
| 747 | push @opcode,$1; | ||
| 748 | @opcode; | ||
| 749 | } else { | ||
| 750 | (); | ||
| 751 | } | ||
| 713 | }; | 752 | }; |
| 714 | 753 | ||
| 754 | $pclmulqdq = sub { | ||
| 755 | if (shift =~ /\$([x0-9a-f]+),\s*%xmm([0-9]+),\s*%xmm([0-9]+)/) { | ||
| 756 | my @opcode=(0x66); | ||
| 757 | rex(\@opcode,$3,$2); | ||
| 758 | push @opcode,0x0f,0x3a,0x44; | ||
| 759 | push @opcode,0xc0|($2&7)|(($3&7)<<3); # ModR/M | ||
| 760 | my $c=$1; | ||
| 761 | push @opcode,$c=~/^0/?oct($c):$c; | ||
| 762 | @opcode; | ||
| 763 | } else { | ||
| 764 | (); | ||
| 765 | } | ||
| 766 | }; | ||
| 767 | |||
| 768 | } | ||
| 769 | |||
| 715 | if ($nasm) { | 770 | if ($nasm) { |
| 716 | print <<___; | 771 | print <<___; |
| 717 | default rel | 772 | default rel |
diff --git a/src/lib/libssl/src/crypto/perlasm/x86_64-xlate.pl b/src/lib/libssl/src/crypto/perlasm/x86_64-xlate.pl index 82992f41e5..4bd53da33d 100755 --- a/src/lib/libssl/src/crypto/perlasm/x86_64-xlate.pl +++ b/src/lib/libssl/src/crypto/perlasm/x86_64-xlate.pl | |||
| @@ -662,6 +662,32 @@ sub rex { | |||
| 662 | my %regrm = ( "%eax"=>0, "%ecx"=>1, "%edx"=>2, "%ebx"=>3, | 662 | my %regrm = ( "%eax"=>0, "%ecx"=>1, "%edx"=>2, "%ebx"=>3, |
| 663 | "%esp"=>4, "%ebp"=>5, "%esi"=>6, "%edi"=>7 ); | 663 | "%esp"=>4, "%ebp"=>5, "%esi"=>6, "%edi"=>7 ); |
| 664 | 664 | ||
| 665 | if ($flavour ne "openbsd") { | ||
| 666 | |||
| 667 | $movq = sub { # elderly gas can't handle inter-register movq | ||
| 668 | my $arg = shift; | ||
| 669 | my @opcode=(0x66); | ||
| 670 | if ($arg =~ /%xmm([0-9]+),\s*%r(\w+)/) { | ||
| 671 | my ($src,$dst)=($1,$2); | ||
| 672 | if ($dst !~ /[0-9]+/) { $dst = $regrm{"%e$dst"}; } | ||
| 673 | rex(\@opcode,$src,$dst,0x8); | ||
| 674 | push @opcode,0x0f,0x7e; | ||
| 675 | push @opcode,0xc0|(($src&7)<<3)|($dst&7); # ModR/M | ||
| 676 | @opcode; | ||
| 677 | } elsif ($arg =~ /%r(\w+),\s*%xmm([0-9]+)/) { | ||
| 678 | my ($src,$dst)=($2,$1); | ||
| 679 | if ($dst !~ /[0-9]+/) { $dst = $regrm{"%e$dst"}; } | ||
| 680 | rex(\@opcode,$src,$dst,0x8); | ||
| 681 | push @opcode,0x0f,0x6e; | ||
| 682 | push @opcode,0xc0|(($src&7)<<3)|($dst&7); # ModR/M | ||
| 683 | @opcode; | ||
| 684 | } else { | ||
| 685 | (); | ||
| 686 | } | ||
| 687 | }; | ||
| 688 | |||
| 689 | } | ||
| 690 | |||
| 665 | my $pextrd = sub { | 691 | my $pextrd = sub { |
| 666 | if (shift =~ /\$([0-9]+),\s*%xmm([0-9]+),\s*(%\w+)/) { | 692 | if (shift =~ /\$([0-9]+),\s*%xmm([0-9]+),\s*(%\w+)/) { |
| 667 | my @opcode=(0x66); | 693 | my @opcode=(0x66); |
| @@ -698,20 +724,49 @@ my $pinsrd = sub { | |||
| 698 | } | 724 | } |
| 699 | }; | 725 | }; |
| 700 | 726 | ||
| 701 | my $pclmulqdq = sub { | 727 | if ($flavour ne "openbsd") { |
| 702 | if (shift =~ /\$([x0-9a-f]+),\s*%xmm([0-9]+),\s*%xmm([0-9]+)/) { | 728 | |
| 703 | my @opcode=(0x66); | 729 | $pshufb = sub { |
| 704 | rex(\@opcode,$3,$2); | 730 | if (shift =~ /%xmm([0-9]+),\s*%xmm([0-9]+)/) { |
| 705 | push @opcode,0x0f,0x3a,0x44; | 731 | my @opcode=(0x66); |
| 706 | push @opcode,0xc0|($2&7)|(($3&7)<<3); # ModR/M | 732 | rex(\@opcode,$2,$1); |
| 707 | my $c=$1; | 733 | push @opcode,0x0f,0x38,0x00; |
| 708 | push @opcode,$c=~/^0/?oct($c):$c; | 734 | push @opcode,0xc0|($1&7)|(($2&7)<<3); # ModR/M |
| 709 | @opcode; | 735 | @opcode; |
| 710 | } else { | 736 | } else { |
| 711 | (); | 737 | (); |
| 712 | } | 738 | } |
| 739 | }; | ||
| 740 | |||
| 741 | $palignr = sub { | ||
| 742 | if (shift =~ /\$([0-9]+),\s*%xmm([0-9]+),\s*%xmm([0-9]+)/) { | ||
| 743 | my @opcode=(0x66); | ||
| 744 | rex(\@opcode,$3,$2); | ||
| 745 | push @opcode,0x0f,0x3a,0x0f; | ||
| 746 | push @opcode,0xc0|($2&7)|(($3&7)<<3); # ModR/M | ||
| 747 | push @opcode,$1; | ||
| 748 | @opcode; | ||
| 749 | } else { | ||
| 750 | (); | ||
| 751 | } | ||
| 713 | }; | 752 | }; |
| 714 | 753 | ||
| 754 | $pclmulqdq = sub { | ||
| 755 | if (shift =~ /\$([x0-9a-f]+),\s*%xmm([0-9]+),\s*%xmm([0-9]+)/) { | ||
| 756 | my @opcode=(0x66); | ||
| 757 | rex(\@opcode,$3,$2); | ||
| 758 | push @opcode,0x0f,0x3a,0x44; | ||
| 759 | push @opcode,0xc0|($2&7)|(($3&7)<<3); # ModR/M | ||
| 760 | my $c=$1; | ||
| 761 | push @opcode,$c=~/^0/?oct($c):$c; | ||
| 762 | @opcode; | ||
| 763 | } else { | ||
| 764 | (); | ||
| 765 | } | ||
| 766 | }; | ||
| 767 | |||
| 768 | } | ||
| 769 | |||
| 715 | if ($nasm) { | 770 | if ($nasm) { |
| 716 | print <<___; | 771 | print <<___; |
| 717 | default rel | 772 | default rel |
