From patchwork Thu Jun 17 03:40:47 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Matt Whitlock X-Patchwork-Id: 43858 Return-Path: X-Original-To: patchwork@sourceware.org Delivered-To: patchwork@sourceware.org Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id 2AA10383981C for ; Thu, 17 Jun 2021 03:42:31 +0000 (GMT) X-Original-To: libc-alpha@sourceware.org Delivered-To: libc-alpha@sourceware.org Received: from resqmta-ch2-03v.sys.comcast.net (resqmta-ch2-03v.sys.comcast.net [IPv6:2001:558:fe21:29:69:252:207:35]) by sourceware.org (Postfix) with ESMTPS id EAF23383B43B for ; Thu, 17 Jun 2021 03:40:54 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org EAF23383B43B Authentication-Results: sourceware.org; dmarc=none (p=none dis=none) header.from=mattwhitlock.name Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=mattwhitlock.name Received: from resomta-ch2-13v.sys.comcast.net ([69.252.207.109]) by resqmta-ch2-03v.sys.comcast.net with ESMTP id tihHluncQzQhptitilZOoi; Thu, 17 Jun 2021 03:40:54 +0000 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=comcastmailservice.net; s=20180828_2048; t=1623901254; bh=KnjWJa6mzGd4RRBbOjJEfyY3rUbHjEFy0LTehjnIZG4=; h=Received:Received:From:To:Subject:Date:Message-Id:MIME-Version; b=Y3vEwtYrRptN7a+B4IMy+irDtQAtin3KTDl7rBOM3tQ0n9u2XMO7rxSGlZxg2O/Jf R+xXwPu/DXNvKskyzPhUemraDTGoAREJjMf1V3MKCeT+XYw/jGnWn2pNPoo+/x6KMN MAElfxoPQSD8xTcYy6fuB1i0357IA7NfFDcW9rN9sT59f8G0k6Sq+GJoYxfvaV0lN8 v6RKZNAO1X/peoF5HQhmPdiMoQqMhxyHK00/OQKcEh9MM46+LOhm+lexyyNR/WiwjG WEVoW/Bb7i9eFsQxaLq4KkuG0ogLgQWGlnj02mOQyvxz3b4vutZmbikX21sFBd9eVH 0Qmkf1uqCKexw== Received: from Crushinator.home.mattwhitlock.com ([IPv6:2601:18d:8900:cc0:219:d1ff:fe75:dc2f]) by resomta-ch2-13v.sys.comcast.net with ESMTPSA id titgldIYYAtJTtithlRilS; Thu, 17 Jun 2021 03:40:53 +0000 X-Xfinity-VMeta: sc=0.00;st=legit From: Matt Whitlock To: libc-alpha@sourceware.org Subject: [PATCH] x86: fix Autoconf caching of instruction support checks [BZ #27991] Date: Wed, 16 Jun 2021 23:40:47 -0400 Message-Id: <20210617034047.25355-1-sourceware@mattwhitlock.name> X-Mailer: git-send-email 2.32.0 MIME-Version: 1.0 X-Spam-Status: No, score=-13.8 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, GIT_PATCH_0, RCVD_IN_DNSWL_LOW, SPF_HELO_NONE, SPF_PASS, TXREP autolearn=ham autolearn_force=no version=3.4.2 X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) 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: , Cc: Matt Whitlock Errors-To: libc-alpha-bounces+patchwork=sourceware.org@sourceware.org Sender: "Libc-alpha" 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. Reviewed-by: Adhemerval Zanella Signed-off-by: Matt Whitlock --- 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 <&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 <&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 < conftest.c <