From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-pj1-x102b.google.com (mail-pj1-x102b.google.com [IPv6:2607:f8b0:4864:20::102b]) by sourceware.org (Postfix) with ESMTPS id A7D1C385702D for ; Wed, 11 Aug 2021 16:44:12 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org A7D1C385702D Received: by mail-pj1-x102b.google.com with SMTP id oa17so4440935pjb.1 for ; Wed, 11 Aug 2021 09:44:12 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:subject:to:references:from:message-id:date :user-agent:mime-version:in-reply-to:content-language :content-transfer-encoding; bh=q6IdbH/b+jAYN2e0Vuo6OukmrksTC7tyPieEF3MLVOg=; b=Ed/Izt3UrMlMv5kTgFwXiJ+2NrbeewiOisyqNyrl4LyCr3/pmCrx0qYaF74nfFkFV5 B4ixTlHLJC2kuZF5S0EhpnpyRetJtY/duOJ6SAkDd9SCkJQQJelIYP9TtgjldoAEnmEL zxzk+whksXJy6ZsNryRLrl+ExuPmllaUoVUX4vF7WgG8PF1NLwgN+hE1g9Wzm+7ueIvd B47zGnRfJ76nj/KZE/TRIHdToJ3ZNjmKF7tW7oj63vzcMgJpqMFeYMRvirtL7PN3TqXx 6Pe+mKiWR0jyOtxQq33JTO7ykQ872F+4tRQEBZpQqqIqbgjpxOYqhjXQ7283EV9sZ73t zvTg== X-Gm-Message-State: AOAM532yoGLM/5bUcl5j5lBXrNP0iptuC6YXiQB5Wmc4DotmUKxXiea8 5cgQ7u7B3C123g7ZaJADVQDZ/KqfUujKxg== X-Google-Smtp-Source: ABdhPJwcEvcbyBWTgGCYaPCSIN2OXZ2WOvNTX6T/BKSv7JK7/i5nite8WYjSN6d9EDEkHvzhAzrtXg== X-Received: by 2002:a17:90a:1108:: with SMTP id d8mr11550298pja.190.1628700251483; Wed, 11 Aug 2021 09:44:11 -0700 (PDT) Received: from ?IPv6:2804:431:c7cb:9dce:70f4:4f7a:652c:7fb? ([2804:431:c7cb:9dce:70f4:4f7a:652c:7fb]) by smtp.gmail.com with ESMTPSA id f4sm34715909pgi.68.2021.08.11.09.44.10 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Wed, 11 Aug 2021 09:44:11 -0700 (PDT) Subject: Re: [PATCH] x86: fix Autoconf caching of instruction support checks [BZ #27991] To: Matt Whitlock , libc-alpha@sourceware.org References: <20210617034047.25355-1-sourceware@mattwhitlock.name> From: Adhemerval Zanella Message-ID: Date: Wed, 11 Aug 2021 13:44:09 -0300 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:78.0) Gecko/20100101 Thunderbird/78.11.0 MIME-Version: 1.0 In-Reply-To: <20210617034047.25355-1-sourceware@mattwhitlock.name> Content-Type: text/plain; charset=utf-8 Content-Language: en-US Content-Transfer-Encoding: 7bit X-Spam-Status: No, score=-12.9 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, GIT_PATCH_0, NICE_REPLY_A, RCVD_IN_DNSWL_NONE, SPF_HELO_NONE, SPF_PASS, TXREP autolearn=ham autolearn_force=no version=3.4.4 X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on server2.sourceware.org X-BeenThere: libc-alpha@sourceware.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Libc-alpha mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 11 Aug 2021 16:44:23 -0000 On 17/06/2021 00:40, Matt Whitlock wrote: > The Autoconf documentation for the AC_CACHE_CHECK macro states: > > The commands-to-set-it must have no side effects except for setting > the variable cache-id, see below. > > However, the tests for support of -msahf and -mmovbe were embedded in > the commands-to-set-it for lib_cv_include_x86_isa_level. This had the > consequence that libc_cv_have_x86_lahf_sahf and libc_cv_have_x86_movbe > were not defined whenever lib_cv_include_x86_isa_level was read from > cache. These variables' being undefined meant that their unquoted use > in later test expressions led to the 'test' built-in's misparsing its > arguments and emitting errors like "test: =: unexpected operator" or > "test: =: unary operator expected", depending on the particular shell. > > This commit refactors the tests for LAHF/SAHF and MOVBE instruction > support into their own AC_CACHE_CHECK macro invocations to obey the > rule that the commands-to-set-it must have no side effects other than > setting the variable named by cache-id. LGTM, thanks. Also, please confirm that you're the original author and are authorized to contribute this patch by adding either a DCO, i.e. add a Signed-off-by to indicate that; or by copyright assignment to the FSF (check 2.1 and 2.2 on the Contribution Checklist [1]) Reviewed-by: Adhemerval Zanella [1] https://sourceware.org/glibc/wiki/Contribution%20checklist > --- > sysdeps/x86/configure | 62 ++++++++++++++++++++++++---------------- > sysdeps/x86/configure.ac | 34 +++++++++++----------- > 2 files changed, 56 insertions(+), 40 deletions(-) > > diff --git a/sysdeps/x86/configure b/sysdeps/x86/configure > index ead1295c38..62676bb686 100644 > --- a/sysdeps/x86/configure > +++ b/sysdeps/x86/configure > @@ -126,8 +126,6 @@ cat > conftest2.S < 4: > EOF > libc_cv_include_x86_isa_level=no > -libc_cv_have_x86_lahf_sahf=no > -libc_cv_have_x86_movbe=no > if { ac_try='${CC-cc} $CFLAGS $CPPFLAGS -nostartfiles -nostdlib -r -o conftest conftest1.S conftest2.S' > { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 > (eval $ac_try) 2>&5 > @@ -137,24 +135,6 @@ if { ac_try='${CC-cc} $CFLAGS $CPPFLAGS -nostartfiles -nostdlib -r -o conftest c > count=`LC_ALL=C $READELF -n conftest | grep NT_GNU_PROPERTY_TYPE_0 | wc -l` > if test "$count" = 1; then > libc_cv_include_x86_isa_level=yes > - cat > conftest.c < -EOF > - if { ac_try='${CC-cc} $CFLAGS $CPPFLAGS -fverbose-asm -S -o - conftest.c' > - { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 > - (eval $ac_try) 2>&5 > - ac_status=$? > - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 > - test $ac_status = 0; }; } | grep -q "\-msahf"; then > - libc_cv_have_x86_lahf_sahf=yes > - fi > - if { ac_try='${CC-cc} $CFLAGS $CPPFLAGS -fverbose-asm -S -o - conftest.c' > - { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 > - (eval $ac_try) 2>&5 > - ac_status=$? > - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 > - test $ac_status = 0; }; } | grep -q "\-mmovbe"; then > - libc_cv_have_x86_movbe=yes > - fi > fi > fi > rm -f conftest* > @@ -164,14 +144,48 @@ $as_echo "$libc_cv_include_x86_isa_level" >&6; } > if test $libc_cv_include_x86_isa_level = yes; then > $as_echo "#define INCLUDE_X86_ISA_LEVEL 1" >>confdefs.h > > + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for LAHF/SAHF instruction support" >&5 > +$as_echo_n "checking for LAHF/SAHF instruction support... " >&6; } > +if ${libc_cv_have_x86_lahf_sahf+:} false; then : > + $as_echo_n "(cached) " >&6 > +else > + libc_cv_have_x86_lahf_sahf=no > + if { ac_try='${CC-cc} $CFLAGS $CPPFLAGS -fverbose-asm -S -o - -x c /dev/null' > + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 > + (eval $ac_try) 2>&5 > + ac_status=$? > + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 > + test $ac_status = 0; }; } | grep -q "\-msahf"; then > + libc_cv_have_x86_lahf_sahf=yes > + fi > fi > -if test $libc_cv_have_x86_lahf_sahf = yes; then > - $as_echo "#define HAVE_X86_LAHF_SAHF 1" >>confdefs.h > +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $libc_cv_have_x86_lahf_sahf" >&5 > +$as_echo "$libc_cv_have_x86_lahf_sahf" >&6; } > + if test $libc_cv_have_x86_lahf_sahf = yes; then > + $as_echo "#define HAVE_X86_LAHF_SAHF 1" >>confdefs.h > > + fi > + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for MOVBE instruction support" >&5 > +$as_echo_n "checking for MOVBE instruction support... " >&6; } > +if ${libc_cv_have_x86_movbe+:} false; then : > + $as_echo_n "(cached) " >&6 > +else > + libc_cv_have_x86_movbe=no > + if { ac_try='${CC-cc} $CFLAGS $CPPFLAGS -fverbose-asm -S -o - -x c /dev/null' > + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 > + (eval $ac_try) 2>&5 > + ac_status=$? > + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 > + test $ac_status = 0; }; } | grep -q "\-mmovbe"; then > + libc_cv_have_x86_movbe=yes > + fi > fi > -if test $libc_cv_have_x86_movbe = yes; then > - $as_echo "#define HAVE_X86_MOVBE 1" >>confdefs.h > +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $libc_cv_have_x86_movbe" >&5 > +$as_echo "$libc_cv_have_x86_movbe" >&6; } > + if test $libc_cv_have_x86_movbe = yes; then > + $as_echo "#define HAVE_X86_MOVBE 1" >>confdefs.h > > + fi > fi > config_vars="$config_vars > enable-x86-isa-level = $libc_cv_include_x86_isa_level" > diff --git a/sysdeps/x86/configure.ac b/sysdeps/x86/configure.ac > index bca97fdc2f..04a12ab680 100644 > --- a/sysdeps/x86/configure.ac > +++ b/sysdeps/x86/configure.ac > @@ -98,30 +98,32 @@ cat > conftest2.S < 4: > EOF > libc_cv_include_x86_isa_level=no > -libc_cv_have_x86_lahf_sahf=no > -libc_cv_have_x86_movbe=no > if AC_TRY_COMMAND(${CC-cc} $CFLAGS $CPPFLAGS -nostartfiles -nostdlib -r -o conftest conftest1.S conftest2.S); then > count=`LC_ALL=C $READELF -n conftest | grep NT_GNU_PROPERTY_TYPE_0 | wc -l` > if test "$count" = 1; then > libc_cv_include_x86_isa_level=yes > - cat > conftest.c < -EOF > - if AC_TRY_COMMAND(${CC-cc} $CFLAGS $CPPFLAGS -fverbose-asm -S -o - conftest.c) | grep -q "\-msahf"; then > - libc_cv_have_x86_lahf_sahf=yes > - fi > - if AC_TRY_COMMAND(${CC-cc} $CFLAGS $CPPFLAGS -fverbose-asm -S -o - conftest.c) | grep -q "\-mmovbe"; then > - libc_cv_have_x86_movbe=yes > - fi > fi > fi > rm -f conftest*]) > if test $libc_cv_include_x86_isa_level = yes; then > AC_DEFINE(INCLUDE_X86_ISA_LEVEL) > -fi > -if test $libc_cv_have_x86_lahf_sahf = yes; then > - AC_DEFINE(HAVE_X86_LAHF_SAHF) > -fi > -if test $libc_cv_have_x86_movbe = yes; then > - AC_DEFINE(HAVE_X86_MOVBE) > + AC_CACHE_CHECK([for LAHF/SAHF instruction support], > + libc_cv_have_x86_lahf_sahf, [dnl > + libc_cv_have_x86_lahf_sahf=no > + if AC_TRY_COMMAND(${CC-cc} $CFLAGS $CPPFLAGS -fverbose-asm -S -o - -x c /dev/null) | grep -q "\-msahf"; then > + libc_cv_have_x86_lahf_sahf=yes > + fi]) > + if test $libc_cv_have_x86_lahf_sahf = yes; then > + AC_DEFINE(HAVE_X86_LAHF_SAHF) > + fi > + AC_CACHE_CHECK([for MOVBE instruction support], > + libc_cv_have_x86_movbe, [dnl > + libc_cv_have_x86_movbe=no > + if AC_TRY_COMMAND(${CC-cc} $CFLAGS $CPPFLAGS -fverbose-asm -S -o - -x c /dev/null) | grep -q "\-mmovbe"; then > + libc_cv_have_x86_movbe=yes > + fi]) > + if test $libc_cv_have_x86_movbe = yes; then > + AC_DEFINE(HAVE_X86_MOVBE) > + fi > fi > LIBC_CONFIG_VAR([enable-x86-isa-level], [$libc_cv_include_x86_isa_level]) >