crypto/perlasm/x86_64-xlate.pl: detect GNU as to deal with quirks
authorRichard Levitte <levitte@openssl.org>
Thu, 27 Feb 2020 05:03:52 +0000 (06:03 +0100)
committerRichard Levitte <levitte@openssl.org>
Mon, 2 Mar 2020 02:16:08 +0000 (03:16 +0100)
It turns out that GNU as and Solaris as don't have compatible ideas on
the .section syntax, so we need to check if we're using GNU as or
another assembler and adapt this .section syntax accordingly.

Fixes #11132

Reviewed-by: Tomas Mraz <tmraz@fedoraproject.org>
(Merged from https://github.com/openssl/openssl/pull/11191)

crypto/perlasm/x86_64-xlate.pl

index f87f1a5b9605813ef45a30b8099a7a656730dc39..197bc48873cabe628e54e208b3421dfbb4434d3d 100755 (executable)
@@ -83,6 +83,10 @@ my $PTR=" PTR";
 my $nasmref=2.03;
 my $nasm=0;
 
+# GNU as indicator, as opposed to $gas, which indicates acceptable
+# syntax
+my $gnuas=0;
+
 if    ($flavour eq "mingw64")  { $gas=1; $elf=0; $win64=1;
                                  $prefix=`echo __USER_LABEL_PREFIX__ | $ENV{CC} -E -P -`;
                                  $prefix =~ s|\R$||; # Better chomp
@@ -100,6 +104,12 @@ elsif (!$gas)
     $elf=0;
     $decor="\$L\$";
 }
+# Find out if we're using GNU as
+elsif (`$ENV{CC} -Wa,-v -c -o /dev/null -x assembler /dev/null 2>&1`
+               =~ /GNU assembler version ([2-9]\.[0-9]+)/)
+{
+    $gnuas=1;
+}
 
 my $cet_property;
 if ($flavour =~ /elf/) {
@@ -108,8 +118,10 @@ if ($flavour =~ /elf/) {
        # with Intel CET support in order for linker to mark output with
        # Intel CET support.
        my $p2align=3; $p2align=2 if ($flavour eq "elf32");
+       my $section='.note.gnu.property, #alloc';
+       $section='".note.gnu.property", "a"' if $gnuas;
        $cet_property = <<_____;
-       .section ".note.gnu.property", "a"
+       .section $section
        .p2align $p2align
        .long 1f - 0f
        .long 4f - 1f