x86_64: Always generate .note.gnu.property section for ELF outputs
[openssl.git] / crypto / perlasm / x86_64-xlate.pl
index e5644014abfb0338cfff18211c6bd19e5487a324..7a282109ef62270fb7698e542ee7b3f21e48fff3 100755 (executable)
@@ -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);