From patchwork Wed Mar 13 18:02:38 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Nick Desaulniers X-Patchwork-Id: 160263 Delivered-To: patch@linaro.org Received: by 2002:a02:5cc1:0:0:0:0:0 with SMTP id w62csp14602412jad; Wed, 13 Mar 2019 11:02:48 -0700 (PDT) X-Google-Smtp-Source: APXvYqykPrI6Qw97qbd3y4CKuc4uhGF6PN/xQBNTEv9B4h2K6UzNcHVpLHwP+N40zEBMn126FZAd X-Received: by 2002:a17:902:2e01:: with SMTP id q1mr302251plb.253.1552500168146; Wed, 13 Mar 2019 11:02:48 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1552500168; cv=none; d=google.com; s=arc-20160816; b=nZCiNyr460UkTqSO8/gNOmxda+PW4HTqm4L+PD0N3zBalYqWyG71cqZdUbRglcEPZ8 Y9zw7W+89sPoBsTePDzwKATF4tozseaO2SpYtq6MSIJvNTV4c19RWYuEomTzwdfUZ65S 3nCOpt6FZWrHbg/fU3+ltp8hIIquBowwnU3zoDeQWFyiKfOBvuz74+Wid9UIc8ZZjDPF eIfZ15H7EhEiV0Lt60cymq9COlnpOQCPOjR7s0fl3ET5IY6KzcKrLL58+N+ck6nRPZYs 2eeqtfHrc2+q1L7xLcuvCm4L4cghgfPYrUkUZ+TpvCsYWzGoTjtITUziLV1UUOVIQ9CZ ftow== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:cc:to:from:subject:references :mime-version:message-id:in-reply-to:date:dkim-signature; bh=ir6qodWEKUGzfEu3dnv9XwT0+RGg2i7HMOiUS/XMmXo=; b=0hmWat1iUoLtzLgoMLc3X/fkqrzxra3LysodsNk8Sk7FoVGbzoqiRDkp9LcNX9nKZn qPOF0C0SKbStrFURw7n/dNJXaTsuCAry/yVWZ/GbREmMsX72eSuv64cBKg5XokUOoLzU B/DO9qVDLJmuX4jGvstKpDLIKOjBzuREZQ+UKHmvPQNS/O/BZjZS9o3P1xHuczA7orC5 dYD/OlgCUWLmYSnJ3bBudJr+M69QrNv0q5pWaMmheVGww5w9WKSFLF5EhXvjtKEOylhq KF4pHaXagH69JJaX3hdn0Nq71/nKwIDofbatDJS5Tl4JwSY+wrZevPCjoR5upC0aU2Wc u6fA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@google.com header.s=20161025 header.b=Q9n+TJNz; spf=pass (google.com: best guess record for domain of stable-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=stable-owner@vger.kernel.org; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=google.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id u17si11016144pfm.82.2019.03.13.11.02.47; Wed, 13 Mar 2019 11:02:48 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of stable-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=pass header.i=@google.com header.s=20161025 header.b=Q9n+TJNz; spf=pass (google.com: best guess record for domain of stable-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=stable-owner@vger.kernel.org; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=google.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726446AbfCMSCr (ORCPT + 14 others); Wed, 13 Mar 2019 14:02:47 -0400 Received: from mail-it1-f202.google.com ([209.85.166.202]:39761 "EHLO mail-it1-f202.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726618AbfCMSCr (ORCPT ); Wed, 13 Mar 2019 14:02:47 -0400 Received: by mail-it1-f202.google.com with SMTP id h3so2285621itb.4 for ; Wed, 13 Mar 2019 11:02:46 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20161025; h=date:in-reply-to:message-id:mime-version:references:subject:from:to :cc; bh=ir6qodWEKUGzfEu3dnv9XwT0+RGg2i7HMOiUS/XMmXo=; b=Q9n+TJNzKkNb/rSOdojaBaog4VNI8l71TA/uaacPn4jlsMLyCYMlDAgV/+yho0MDHn 2ClBTQqe40n+MYnxeJzaztxYzozoYghadvvVaQuNLP99ohDEVEuH3qshBSNmRgNX3VAV ukI70OK5p7RJoOrx4nhpbFuae2HRYll0OlP8vivK6+INJHeknbxAjf+T2Ck97LQjD++i L0UraldynMQxniAEa3PuOYAQoIO+pbQ8d4MQjSQh68sDYtFlIdn9eHXUy5R75mZB2hSx PNYlyOdefReuUtYha/hVGKaxg8my/9yer9DwZjM7GD4FR/VCJOtl8Cht0K302qHesLcG cecw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:date:in-reply-to:message-id:mime-version :references:subject:from:to:cc; bh=ir6qodWEKUGzfEu3dnv9XwT0+RGg2i7HMOiUS/XMmXo=; b=q1rH5THOE/mq+Mwbp24AkXehBq0KuObdpbqBjJhL9x0MxvJxFQbyKNiE+zw7f/x7d4 vs577mUVnOSc9xI4ufvADbLhQbqFW6ZDcxdGWDiGWWV0byXih/duTbR0//B2hH8Sxvc1 0kpFhAe7VUgHjn0n34Uk9biizqaITsjk9VtgRt6z5soE7ulPIyajf8MHAWaV21ZR6NWK 2fB0JRoaJ4NQ6gAs02gX3pn/95ykYjQHtDE+2NKPlbC896hstAMno57OYLnpP5Xa3UgD otsI23/Lsd35ESX3wgwEQo/7KJyv8a8fq9m49ZpfeWfdwdHTB0KAvHFyXItrrrXqDdRC AKVw== X-Gm-Message-State: APjAAAW6k9+99OFokNT2delCureoN4e3kENBeeBSF+ONkjhcXzunIJXm SvPo7Wt1AdEfD47FhDUsfmuWWUuqJYxWPyjwzSk= X-Received: by 2002:a24:c546:: with SMTP id f67mr2627294itg.28.1552500165874; Wed, 13 Mar 2019 11:02:45 -0700 (PDT) Date: Wed, 13 Mar 2019 11:02:38 -0700 In-Reply-To: Message-Id: <20190313180239.261938-1-ndesaulniers@google.com> Mime-Version: 1.0 References: X-Mailer: git-send-email 2.21.0.360.g471c308f928-goog Subject: [PATCH] lib/string.c: implement a basic bcmp From: Nick Desaulniers To: akpm@linux-foundation.org Cc: clang-built-linux@googlegroups.com, linux-kbuild@vger.kernel.org, Nick Desaulniers , stable@vger.kernel.org, Nathan Chancellor , Adhemerval Zanella , Arnd Bergmann , James Y Knight , Masahiro Yamada , Rasmus Villemoes , Greg Kroah-Hartman , Alexander Shishkin , Andy Shevchenko , linux-kernel@vger.kernel.org Sender: stable-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: stable@vger.kernel.org A recent optimization in Clang (r355672) lowers comparisons of the return value of memcmp against zero to comparisons of the return value of bcmp against zero. This helps some platforms that implement bcmp more efficiently than memcmp. glibc simply aliases bcmp to memcmp, but an optimized implementation is in the works. This results in linkage failures for all targets with Clang due to the undefined symbol. For now, just implement bcmp as a tailcail to memcmp to unbreak the build. This routine can be further optimized in the future. Other ideas discussed: * A weak alias was discussed, but breaks for architectures that define their own implementations of memcmp since aliases to declarations are not permitted (only definitions). Arch-specific memcmp implementations typically declare memcmp in C headers, but implement them in assembly. * -ffreestanding also is used sporadically throughout the kernel. * -fno-builtin-bcmp doesn't work when doing LTO. Link: https://bugs.llvm.org/show_bug.cgi?id=41035 Link: https://code.woboq.org/userspace/glibc/string/memcmp.c.html#bcmp Link: https://github.com/llvm/llvm-project/commit/8e16d73346f8091461319a7dfc4ddd18eedcff13 Link: https://github.com/ClangBuiltLinux/linux/issues/416 Cc: stable@vger.kernel.org Reported-by: Nathan Chancellor Reported-by: Adhemerval Zanella Suggested-by: Arnd Bergmann Suggested-by: James Y Knight Suggested-by: Masahiro Yamada Suggested-by: Nathan Chancellor Suggested-by: Rasmus Villemoes Signed-off-by: Nick Desaulniers --- lib/string.c | 15 +++++++++++++++ 1 file changed, 15 insertions(+) -- 2.21.0.360.g471c308f928-goog diff --git a/lib/string.c b/lib/string.c index 38e4ca08e757..5b2377d7143f 100644 --- a/lib/string.c +++ b/lib/string.c @@ -866,6 +866,21 @@ __visible int memcmp(const void *cs, const void *ct, size_t count) EXPORT_SYMBOL(memcmp); #endif +#ifndef __HAVE_ARCH_BCMP +/** + * bcmp - Like memcmp but the return code simply indicates a non-match. + * @cs: One area of memory. + * @ct: Another area of memory. + * @count: The size of the areas. + */ +#undef bcmp +int bcmp(const void *cs, const void *ct, size_t count) +{ + return memcmp(cs, ct, count); +} +EXPORT_SYMBOL(bcmp); +#endif + #ifndef __HAVE_ARCH_MEMSCAN /** * memscan - Find a character in an area of memory.