From patchwork Thu Oct 13 08:37:55 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: =?utf-8?b?TWljaGFsIFByw612b3puw61r?= X-Patchwork-Id: 13005743 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id 5E45BC4332F for ; Thu, 13 Oct 2022 08:44:26 +0000 (UTC) Received: from localhost ([::1]:47804 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1oitpJ-0007JE-C2 for qemu-devel@archiver.kernel.org; Thu, 13 Oct 2022 04:44:25 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:37828) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1oitjG-0003V6-00 for qemu-devel@nongnu.org; Thu, 13 Oct 2022 04:38:11 -0400 Received: from us-smtp-delivery-124.mimecast.com ([170.10.129.124]:26272) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1oitjC-0005sF-Nw for qemu-devel@nongnu.org; Thu, 13 Oct 2022 04:38:08 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1665650282; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version: content-transfer-encoding:content-transfer-encoding; bh=oYOKYuU7BAZmBdUsqHi/HMRW7MrW3YyzPAZXc2wqAy0=; b=Cy1hTmWuB9SktsuQFkHnzEMcB+o3Sl+F7YQqgTlAIqlKrZW3o4YCmlt8gIiylvVGSBfr/X 8/YJe3u7v70+ycHWrO3vaFDZ7zaaRus/H5e0s5bNwqGKOhmafSVvCN9ke6hXX/ZlqYlYjO GZcItBOOI2ta1yqndXNsvQpjxjW8RN0= Received: from mimecast-mx02.redhat.com (mimecast-mx02.redhat.com [66.187.233.88]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id us-mta-659-4TS6AK1dMZaJ8MN5cxj3ug-1; Thu, 13 Oct 2022 04:38:01 -0400 X-MC-Unique: 4TS6AK1dMZaJ8MN5cxj3ug-1 Received: from smtp.corp.redhat.com (int-mx01.intmail.prod.int.rdu2.redhat.com [10.11.54.1]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx02.redhat.com (Postfix) with ESMTPS id 44E7C101A58E for ; Thu, 13 Oct 2022 08:38:01 +0000 (UTC) Received: from maggie.redhat.com (unknown [10.43.2.39]) by smtp.corp.redhat.com (Postfix) with ESMTP id E279540C2064 for ; Thu, 13 Oct 2022 08:38:00 +0000 (UTC) From: Michal Privoznik To: qemu-devel@nongnu.org Subject: [PATCH] configure: Avoid using strings binary Date: Thu, 13 Oct 2022 10:37:55 +0200 Message-Id: <83824abdddf124d76f9f265f77808e859dc094a8.1665650275.git.mprivozn@redhat.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 3.1 on 10.11.54.1 Received-SPF: pass client-ip=170.10.129.124; envelope-from=mprivozn@redhat.com; helo=us-smtp-delivery-124.mimecast.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-0.001, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+qemu-devel=archiver.kernel.org@nongnu.org Sender: "Qemu-devel" When determining the endiandness of the target architecture we're building for a small program is compiled, which in an obfuscated way declares two strings. Then, we look which string is in correct order (using strings binary) and deduct the endiandness. But using the strings binary is problematic, because it's part of toolchain (strings is just a symlink to x86_64-pc-linux-gnu-strings or llvm-strings). And when (cross-)compiling, it requires users to set the symlink to the correct toolchain. Fortunately, we have a better alternative anyways. Since we require either clang or gcc we can rely on macros they declare. Bug: https://bugs.gentoo.org/876933 Signed-off-by: Michal Privoznik --- configure | 33 ++++++++++++++++++--------------- 1 file changed, 18 insertions(+), 15 deletions(-) diff --git a/configure b/configure index 45ee6f4eb3..91e04635cb 100755 --- a/configure +++ b/configure @@ -1426,27 +1426,30 @@ fi # --- # big/little endian test cat > $TMPC << EOF -#include -short big_endian[] = { 0x4269, 0x4765, 0x4e64, 0x4961, 0x4e00, 0, }; -short little_endian[] = { 0x694c, 0x7454, 0x654c, 0x6e45, 0x6944, 0x6e41, 0, }; -int main(int argc, char *argv[]) -{ - return printf("%s %s\n", (char *)big_endian, (char *)little_endian); -} +#if defined(__BYTE_ORDER) && __BYTE_ORDER == __BIG_ENDIAN || \ + defined(__BIG_ENDIAN__) +# error BIG +#endif +int main(void) { return 0; } EOF if compile_prog ; then - if strings -a $TMPE | grep -q BiGeNdIaN ; then - bigendian="yes" - elif strings -a $TMPE | grep -q LiTtLeEnDiAn ; then - bigendian="no" - else - echo big/little test failed - exit 1 - fi + bigendian="yes" else + cat > $TMPC << EOF +#if defined(__BYTE_ORDER) && __BYTE_ORDER == __LITTLE_ENDIAN || \ + defined(__LITTLE_ENDIAN__) +# error LITTLE +#endif +int main(void) { return 0; } +EOF + + if compile_prog ; then + bigendian="no" + else echo big/little test failed exit 1 + fi fi ##########################################