diff options
Diffstat (limited to 'crypto/perlasm')
-rwxr-xr-x | crypto/perlasm/x86_64-xlate.pl | 21 |
1 files changed, 14 insertions, 7 deletions
diff --git a/crypto/perlasm/x86_64-xlate.pl b/crypto/perlasm/x86_64-xlate.pl index e5644014ab..7a282109ef 100755 --- a/crypto/perlasm/x86_64-xlate.pl +++ b/crypto/perlasm/x86_64-xlate.pl @@ -101,24 +101,33 @@ elsif (!$gas) $decor="\$L\$"; } -my $cet_property = <<'_____'; +my $cet_property; +if ($flavour =~ /elf/) { + # Always generate .note.gnu.property section for ELF outputs to + # mark Intel CET support since all input files must be marked + # with Intel CET support in order for linker to mark output with + # Intel CET support. + my $p2align=3; $p2align=2 if ($flavour eq "elf32"); + $cet_property = <<_____; .section ".note.gnu.property", "a" - .align 8 + .p2align $p2align .long 1f - 0f .long 4f - 1f .long 5 0: .asciz "GNU" 1: - .align 8 + .p2align $p2align .long 0xc0000002 .long 3f - 2f 2: .long 3 3: - .p2align 3 + .p2align $p2align 4: _____ +} + my $current_segment; my $current_function; my %globals; @@ -1145,9 +1154,7 @@ my $vprotq = sub { # Intel Control-flow Enforcement Technology extension. All functions and # indirect branch targets will have to start with this instruction... -my $used_cet = 0; my $endbranch = sub { - $used_cet = 1; (0xf3,0x0f,0x1e,0xfa); }; @@ -1233,7 +1240,7 @@ while(defined(my $line=<>)) { print $line,"\n"; } -print "$cet_property" if ($gas && $used_cet); +print "$cet_property" if ($cet_property); print "\n$current_segment\tENDS\n" if ($current_segment && $masm); print "END\n" if ($masm); |