property: Move global default properties to the library context.
[openssl.git] / crypto / x86_64cpuid.pl
index 6423e803b759542dcc23999a8d1c239feccec4a7..d3e2b9145ad7bb6a6235be95a33e530a197f03a1 100644 (file)
@@ -1,15 +1,16 @@
 #! /usr/bin/env perl
-# Copyright 2005-2018 The OpenSSL Project Authors. All Rights Reserved.
+# Copyright 2005-2020 The OpenSSL Project Authors. All Rights Reserved.
 #
-# Licensed under the OpenSSL license (the "License").  You may not use
+# Licensed under the Apache License 2.0 (the "License").  You may not use
 # this file except in compliance with the License.  You can obtain a copy
 # in the file LICENSE in the source distribution or at
 # https://www.openssl.org/source/license.html
 
 
-$flavour = shift;
-$output  = shift;
-if ($flavour =~ /\./) { $output = $flavour; undef $flavour; }
+# $output is the last argument if it looks like a file (it has an extension)
+# $flavour is the first argument if it doesn't look like a file
+$output = $#ARGV >= 0 && $ARGV[$#ARGV] =~ m|\.\w+$| ? pop : undef;
+$flavour = $#ARGV >= 0 && $ARGV[0] !~ m|\.| ? shift : undef;
 
 $win64=0; $win64=1 if ($flavour =~ /[nm]asm|mingw64/ || $output =~ /\.asm$/);
 
@@ -18,7 +19,8 @@ $0 =~ m/(.*[\/\\])[^\/\\]+$/; $dir=$1;
 ( $xlate="${dir}perlasm/x86_64-xlate.pl" and -f $xlate) or
 die "can't locate x86_64-xlate.pl";
 
-open OUT,"| \"$^X\" \"$xlate\" $flavour \"$output\"";
+open OUT,"| \"$^X\" \"$xlate\" $flavour \"$output\""
+     or die "can't call $xlate: $!";
 *STDOUT=*OUT;
 
 ($arg1,$arg2,$arg3,$arg4)=$win64?("%rcx","%rdx","%r8", "%r9") :        # Win64 order
@@ -39,6 +41,8 @@ print<<___;
 .type  OPENSSL_atomic_add,\@abi-omnipotent
 .align 16
 OPENSSL_atomic_add:
+.cfi_startproc
+       endbranch
        movl    ($arg1),%eax
 .Lspin:        leaq    ($arg2,%rax),%r8
        .byte   0xf0            # lock
@@ -47,16 +51,20 @@ OPENSSL_atomic_add:
        movl    %r8d,%eax
        .byte   0x48,0x98       # cltq/cdqe
        ret
+.cfi_endproc
 .size  OPENSSL_atomic_add,.-OPENSSL_atomic_add
 
 .globl OPENSSL_rdtsc
 .type  OPENSSL_rdtsc,\@abi-omnipotent
 .align 16
 OPENSSL_rdtsc:
+.cfi_startproc
+       endbranch
        rdtsc
        shl     \$32,%rdx
        or      %rdx,%rax
        ret
+.cfi_endproc
 .size  OPENSSL_rdtsc,.-OPENSSL_rdtsc
 
 .globl OPENSSL_ia32_cpuid
@@ -64,6 +72,7 @@ OPENSSL_rdtsc:
 .align 16
 OPENSSL_ia32_cpuid:
 .cfi_startproc
+       endbranch
        mov     %rbx,%r8                # save %rbx
 .cfi_register  %rbx,%r8
 
@@ -232,6 +241,8 @@ OPENSSL_ia32_cpuid:
 .type   OPENSSL_cleanse,\@abi-omnipotent
 .align  16
 OPENSSL_cleanse:
+.cfi_startproc
+       endbranch
        xor     %rax,%rax
        cmp     \$15,$arg2
        jae     .Lot
@@ -261,12 +272,15 @@ OPENSSL_cleanse:
        cmp     \$0,$arg2
        jne     .Little
        ret
+.cfi_endproc
 .size  OPENSSL_cleanse,.-OPENSSL_cleanse
 
 .globl  CRYPTO_memcmp
 .type   CRYPTO_memcmp,\@abi-omnipotent
 .align  16
 CRYPTO_memcmp:
+.cfi_startproc
+       endbranch
        xor     %rax,%rax
        xor     %r10,%r10
        cmp     \$0,$arg3
@@ -295,6 +309,7 @@ CRYPTO_memcmp:
        shr     \$63,%rax
 .Lno_data:
        ret
+.cfi_endproc
 .size  CRYPTO_memcmp,.-CRYPTO_memcmp
 ___
 
@@ -303,6 +318,8 @@ print<<___ if (!$win64);
 .type  OPENSSL_wipe_cpu,\@abi-omnipotent
 .align 16
 OPENSSL_wipe_cpu:
+.cfi_startproc
+       endbranch
        pxor    %xmm0,%xmm0
        pxor    %xmm1,%xmm1
        pxor    %xmm2,%xmm2
@@ -329,6 +346,7 @@ OPENSSL_wipe_cpu:
        xorq    %r11,%r11
        leaq    8(%rsp),%rax
        ret
+.cfi_endproc
 .size  OPENSSL_wipe_cpu,.-OPENSSL_wipe_cpu
 ___
 print<<___ if ($win64);
@@ -365,6 +383,8 @@ print<<___;
 .type  OPENSSL_instrument_bus,\@abi-omnipotent
 .align 16
 OPENSSL_instrument_bus:
+.cfi_startproc
+       endbranch
        mov     $arg1,$out      # tribute to Win64
        mov     $arg2,$cnt
        mov     $arg2,$max
@@ -391,12 +411,15 @@ OPENSSL_instrument_bus:
 
        mov     $max,%rax
        ret
+.cfi_endproc
 .size  OPENSSL_instrument_bus,.-OPENSSL_instrument_bus
 
 .globl OPENSSL_instrument_bus2
 .type  OPENSSL_instrument_bus2,\@abi-omnipotent
 .align 16
 OPENSSL_instrument_bus2:
+.cfi_startproc
+       endbranch
        mov     $arg1,$out      # tribute to Win64
        mov     $arg2,$cnt
        mov     $arg3,$max
@@ -439,6 +462,7 @@ OPENSSL_instrument_bus2:
        mov     $redzone(%rsp),%rax
        sub     $cnt,%rax
        ret
+.cfi_endproc
 .size  OPENSSL_instrument_bus2,.-OPENSSL_instrument_bus2
 ___
 }
@@ -450,6 +474,8 @@ print<<___;
 .type  OPENSSL_ia32_${rdop}_bytes,\@abi-omnipotent
 .align 16
 OPENSSL_ia32_${rdop}_bytes:
+.cfi_startproc
+       endbranch
        xor     %rax, %rax      # return value
        cmp     \$0,$arg2
        je      .Ldone_${rdop}_bytes
@@ -486,10 +512,11 @@ OPENSSL_ia32_${rdop}_bytes:
 .Ldone_${rdop}_bytes:
        xor     %r10,%r10       # Clear sensitive data from register
        ret
+.cfi_endproc
 .size  OPENSSL_ia32_${rdop}_bytes,.-OPENSSL_ia32_${rdop}_bytes
 ___
 }
 gen_random("rdrand");
 gen_random("rdseed");
 
-close STDOUT;  # flush
+close STDOUT or die "error closing STDOUT: $!";        # flush