Received: by 2002:ac0:a5a7:0:0:0:0:0 with SMTP id m36-v6csp1732105imm; Tue, 10 Jul 2018 07:03:40 -0700 (PDT) X-Google-Smtp-Source: AAOMgpet2FpYtAzEhj617HgMJBCCOzwfsF9n/I44kMwERl4/KS6TKCNhC1iIs5cWmZUmXDGHYnxB X-Received: by 2002:a62:4494:: with SMTP id m20-v6mr25697294pfi.205.1531231420146; Tue, 10 Jul 2018 07:03:40 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1531231420; cv=none; d=google.com; s=arc-20160816; b=HlTbQAlVTxcwXej7JOpqEOhmgUK63EhSMa0BSgPInzjDeRvwLGZ/yK3OT+GHbT5mcW /250Z/qrf42klcaNihe++ca49gDN43BQirdR8Sl+CaxZHy9NYSuyWp6EyufpgL4gl3qY 7A/CMYtMEwXqxoOm+hs05KPjnvv9rh6H6HFAnXFQRH5BGaCyD4e9x/uzjqGOnaslsJ4T CNvBb8frVOjT7Q25KVg54oO8MBtW4RF53+xll+aTEVnggL+/UXBw62zUkKir37OGa3eL S/gYXuK+suG7VXkiS3A6OvcbC0YdgMbjl2MxnQ+9urdvjLPwHnopENF4xcQmNHVIazf1 KOcA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-transfer-encoding:mime-version :message-id:date:subject:cc:to:from:dkim-signature :arc-authentication-results; bh=+P41hqZdZZn65l3PxiWaQyed9TWgOC00ExLR7aFXcqM=; b=UlB29PoLIu1SGz06ES8OLfPu8qWFlRs+v5E/sbdw2MjAGtq2iPJWRsDgsS7GGFlTTv HGzNr7vaWadZKYsoV0abKaso5ekRjkqZiOjb12WO7iltBaGzdcTCxMOaPdaVR2iu0ZgX PSNw8jwCGH5sboKAhZV3Pz+BZ2g3onabg5+nKrhVM5orp6jaACXPq3mc4BOL3dEO2h/t 0D0Cu4jYtJTNDE5vlHgihX+F+jTmzso2AtBCXK9+1D+FvyXGSVU68FeLSWMEQcbY30vi 2TE4fw8NRUu8AD/jpPv8/dXXyc6Phbh9Ou8Lr5Xnn55/ssA+1WJnK0FdTw2vFR/oCQ11 zBBw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@gmail.com header.s=20161025 header.b=DSinLotR; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id q2-v6si16715845plh.136.2018.07.10.07.03.24; Tue, 10 Jul 2018 07:03:40 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-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=@gmail.com header.s=20161025 header.b=DSinLotR; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S933671AbeGJOCD (ORCPT + 99 others); Tue, 10 Jul 2018 10:02:03 -0400 Received: from mail-ed1-f65.google.com ([209.85.208.65]:44476 "EHLO mail-ed1-f65.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S933375AbeGJOCA (ORCPT ); Tue, 10 Jul 2018 10:02:00 -0400 Received: by mail-ed1-f65.google.com with SMTP id d17-v6so4588529eds.11; Tue, 10 Jul 2018 07:01:59 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:mime-version :content-transfer-encoding; bh=+P41hqZdZZn65l3PxiWaQyed9TWgOC00ExLR7aFXcqM=; b=DSinLotRtj1G4ncfQCWbWiTT5bGlNkR+doA3KdVBUN4MndqyE00lLBh7HwwIhNqr+w oOmk2CfvkSi97DS9zwTcPA10ePgp5A4oXIxDbhv5N7QX4AuKlsOitmJwv1MzSho8aV7v TVBV4rai6HjjDYxav7rLgY46CplTTR2JWw8qnkZhKLueNQXwLBXy4rcjKt8UKlp3bNd7 tB5QzTVmjRh2MBhEPFbb8WZTTJGW46IeC3mYRtgbXLWp1BxLeufFkbaLpw5qhXAjVR3d 5bCIL9uAPUSeY+Jeu9vV+jLZC3jNLQh+bNNAFudLP2/KBCtaYN5ptXc4K9SCgFQevlXq Slcw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:mime-version :content-transfer-encoding; bh=+P41hqZdZZn65l3PxiWaQyed9TWgOC00ExLR7aFXcqM=; b=r6rfI1HCuwNzDWnaGK1ziHm2FL6FckiTIFH6qwY32rx1TYRZWRv6EWky6k4+gNnC3P wHuQ3DtbeMn7zRIqGliyzF7AmgFXawcKF05hzdwPHVwaz3e77PeAKHffsVqbHgocfBLV UefIQQCx7M5RW8v4HBPkez6gg6Gvfqbmj7vXaXJ2ENOYKGvJ6a3HcFTtcKud/nvBHfhc BEGj9IH69sAFmOxGwwOF4CR+ioLvA1ZmxiBM9whufP6C0xR7Dqx4zKZuqV/JIGEqsJBa PZGq4HM9odO8RzDvz0Qeojj0CS/Gnl5i+5TzKGlhyskg+52QmUMd9gEkfqk6jKDTnNIw SAFw== X-Gm-Message-State: APt69E1xPf+E0Nw4nDGe4NsWTFSwK8c8qQ2MCfw5FJ46AL6MFh6yRyCl yvMTuXAWp0XgxQEF604ttNz8BA== X-Received: by 2002:a50:c015:: with SMTP id r21-v6mr26493806edb.202.1531231318550; Tue, 10 Jul 2018 07:01:58 -0700 (PDT) Received: from freedom7.home ([2a02:121e:38ef:0:811f:2ca4:747d:afd]) by smtp.gmail.com with ESMTPSA id q22-v6sm8296148edd.69.2018.07.10.07.01.57 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Tue, 10 Jul 2018 07:01:57 -0700 (PDT) From: peter.senna@gmail.com To: linux-usb@vger.kernel.org, linux-kernel@vger.kernel.org Cc: Peter Senna Tschudin , Thomas Petazzoni Subject: [PATCH] tools: usb: ffs-test: Fix build on big endian systems Date: Tue, 10 Jul 2018 16:01:45 +0200 Message-Id: <20180710140145.24687-1-peter.senna@gmail.com> X-Mailer: git-send-email 2.17.1 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Peter Senna Tschudin The tools/usb/ffs-test.c file defines cpu_to_le16/32 by using the C library htole16/32 function calls. However, cpu_to_le16/32 are used when initializing structures, i.e in a context where a function call is not allowed. It works fine on little endian systems because htole16/32 are defined by the C library as no-ops. But on big-endian systems, they are actually doing something, which might involve calling a function, causing build failures, such as: ffs-test.c:48:25: error: initializer element is not constant #define cpu_to_le32(x) htole32(x) ^~~~~~~ ffs-test.c:128:12: note: in expansion of macro ‘cpu_to_le32’ .magic = cpu_to_le32(FUNCTIONFS_DESCRIPTORS_MAGIC_V2), ^~~~~~~~~~~ To solve this, we code cpu_to_le16/32 in a way that allows them to be used when initializing structures. This fix was imported from meta-openembedded/android-tools/fix-big-endian-build.patch written by Thomas Petazzoni . CC: Thomas Petazzoni Signed-off-by: Peter Senna Tschudin --- tools/usb/ffs-test.c | 19 ++++++++++++++++--- 1 file changed, 16 insertions(+), 3 deletions(-) diff --git a/tools/usb/ffs-test.c b/tools/usb/ffs-test.c index 95dd14648ba5..0f395dfb7774 100644 --- a/tools/usb/ffs-test.c +++ b/tools/usb/ffs-test.c @@ -44,12 +44,25 @@ /******************** Little Endian Handling ********************************/ -#define cpu_to_le16(x) htole16(x) -#define cpu_to_le32(x) htole32(x) +/* + * cpu_to_le16/32 are used when initializing structures, a context where a + * function call is not allowed. To solve this, we code cpu_to_le16/32 in a way + * that allows them to be used when initializing structures. + */ + +#if __BYTE_ORDER == __LITTLE_ENDIAN +#define cpu_to_le16(x) (x) +#define cpu_to_le32(x) (x) +#else +#define cpu_to_le16(x) ((((x) >> 8) & 0xffu) | (((x) & 0xffu) << 8)) +#define cpu_to_le32(x) \ + ((((x) & 0xff000000u) >> 24) | (((x) & 0x00ff0000u) >> 8) | \ + (((x) & 0x0000ff00u) << 8) | (((x) & 0x000000ffu) << 24)) +#endif + #define le32_to_cpu(x) le32toh(x) #define le16_to_cpu(x) le16toh(x) - /******************** Messages and Errors ***********************************/ static const char argv0[] = "ffs-test"; -- 2.17.1