From patchwork Wed May 30 12:19:21 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Nicholas Piggin X-Patchwork-Id: 10438873 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork.web.codeaurora.org (Postfix) with ESMTP id 884D9601D3 for ; Wed, 30 May 2018 12:19:45 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 6E276289C9 for ; Wed, 30 May 2018 12:19:45 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 626E6289DD; Wed, 30 May 2018 12:19:45 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-7.8 required=2.0 tests=BAYES_00, DKIM_ADSP_CUSTOM_MED, DKIM_SIGNED, FREEMAIL_FROM, MAILING_LIST_MULTI, RCVD_IN_DNSWL_HI, T_DKIM_INVALID autolearn=ham version=3.3.1 Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id D6671289C9 for ; Wed, 30 May 2018 12:19:44 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1753169AbeE3MTo (ORCPT ); Wed, 30 May 2018 08:19:44 -0400 Received: from mail-pf0-f196.google.com ([209.85.192.196]:37393 "EHLO mail-pf0-f196.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1753044AbeE3MTn (ORCPT ); Wed, 30 May 2018 08:19:43 -0400 Received: by mail-pf0-f196.google.com with SMTP id e9-v6so8947690pfi.4 for ; Wed, 30 May 2018 05:19:43 -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:in-reply-to:references; bh=DHMFh3boMLo2ej/ACP+q3eQa2kGUTFgQ1kZwm/5ceww=; b=tH0v5Rg1MTjl4w/6xrSjMhK/2FNEnpMNAzkm0Z5sxdTnUjlLhG/19VaNqW4Pm7Ne5X N3HAmiWJ2I2Q3fmIO84kV0E/5fKNQEdrFsn/Xn44X1AjU6TeCrx1kBQmjZRKRqO4czYN dNsCq344b5+KhNwjkBz6nCBoEnqalfBmAkUYJ1cXYYpq0HJtc+lY0xeOJfU6ext47H+P QzsMiFfhWJD8g8EX6JWZRBRhpOFaiCOJK4r52cMGeD4OR3E6/ujETX+oxx+hrqIendds zE9ZvcEKfIwZtQXde3cUGyrxZCPnwIrvf4+oxyznxuBUgDDj0l1GZFqaH2Uy1yQCgplu f9lQ== 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:in-reply-to :references; bh=DHMFh3boMLo2ej/ACP+q3eQa2kGUTFgQ1kZwm/5ceww=; b=qmkF15XehR8SOEWJOeY2oSbfrNHiwkvx8xQAq7jDA0Sw8nTCc0f0Bk9t/HHGX2Jvce fOr8/7wZNR+ICZ0ZnvwReayZX5bC57yQB9VuyZ43xT6X623fU3aR3k/43/nAOPgedSqO sbz+fadABxiBs5w7p0RQcLroTWWwVtGwXInswjwrj51rb/8Yd4OOALJQdIFMj+koTsJL /kR4Dqc3i7JGM10KVjHqguc/3i5sgtK2sokD5jhJhSZuKab3YNsNBjsAnh0IOmDJQ/83 FRq+VGRToBwUbklO6ttW/pgN/HDznMExPstsepAGdRuvi3Q7G4ngsuD3zfY9xg6pYvqX x7QQ== X-Gm-Message-State: ALKqPwf/hzzgk1PXk9IJ+uYXj+g5A5nqjbrZS/cUfiLCqEyAdcrJqQ4B JuLidwzWBh5DcZ7UDASJLRSaWw== X-Google-Smtp-Source: ADUXVKIfbZ1w9dioeGNG2Dk02JxQ1OFhQWzPkVsnOdqqk4QYx/jubaS5TjL9AZDIWgnuk1Rr9ujrHQ== X-Received: by 2002:a65:5cc5:: with SMTP id b5-v6mr2070758pgt.85.1527682782965; Wed, 30 May 2018 05:19:42 -0700 (PDT) Received: from roar.au.ibm.com (59-102-70-78.tpgi.com.au. [59.102.70.78]) by smtp.gmail.com with ESMTPSA id g13-v6sm61518085pfm.67.2018.05.30.05.19.39 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Wed, 30 May 2018 05:19:42 -0700 (PDT) From: Nicholas Piggin To: linux-kbuild@vger.kernel.org Cc: Nicholas Piggin , linuxppc-dev@lists.ozlabs.org, Masahiro Yamada , Segher Boessenkool Subject: [PATCH v5 3/4] powerpc/kbuild: Use flags variables rather than overriding LD/CC/AS Date: Wed, 30 May 2018 22:19:21 +1000 Message-Id: <20180530121922.22122-4-npiggin@gmail.com> X-Mailer: git-send-email 2.17.0 In-Reply-To: <20180530121922.22122-1-npiggin@gmail.com> References: <20180530121922.22122-1-npiggin@gmail.com> Sender: linux-kbuild-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kbuild@vger.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP The powerpc toolchain can compile combinations of 32/64 bit and big/little endian, so it's convenient to consider, e.g., `CC -m64 -mbig-endian` To be the C compiler for the purpose of invoking it to build target artifacts. So overriding the the CC variable to include thse flags works for this purpose. Unfortunately that is not compatible with the way the proposed new Kconfig macro language will work. After previous patches in this series, these flags can be carefully passed in using flags instead. Signed-off-by: Nicholas Piggin Since v1: removed extra -EB in the recordmcount script (thanks mpe) --- arch/powerpc/Makefile | 16 +++++++++------- .../powerpc/tools/gcc-check-mprofile-kernel.sh | 12 ++++++++---- scripts/recordmcount.pl | 18 +++++++++++++++++- 3 files changed, 34 insertions(+), 12 deletions(-) diff --git a/arch/powerpc/Makefile b/arch/powerpc/Makefile index 167b26a0780c..6faf1d6ad9dd 100644 --- a/arch/powerpc/Makefile +++ b/arch/powerpc/Makefile @@ -75,13 +75,15 @@ endif endif ifeq ($(CONFIG_CPU_LITTLE_ENDIAN),y) -override LD += -EL +KBUILD_CFLAGS += -mlittle-endian +LDFLAGS += -EL LDEMULATION := lppc GNUTARGET := powerpcle MULTIPLEWORD := -mno-multiple KBUILD_CFLAGS_MODULE += $(call cc-option,-mno-save-toc-indirect) else -override LD += -EB +KBUILD_CFLAGS += $(call cc-option,-mbig-endian) +LDFLAGS += -EB LDEMULATION := ppc GNUTARGET := powerpc MULTIPLEWORD := -mmultiple @@ -94,19 +96,19 @@ aflags-$(CONFIG_CPU_BIG_ENDIAN) += $(call cc-option,-mabi=elfv1) aflags-$(CONFIG_CPU_LITTLE_ENDIAN) += -mabi=elfv2 endif -cflags-$(CONFIG_CPU_LITTLE_ENDIAN) += -mlittle-endian -cflags-$(CONFIG_CPU_BIG_ENDIAN) += $(call cc-option,-mbig-endian) ifneq ($(cc-name),clang) cflags-$(CONFIG_CPU_LITTLE_ENDIAN) += -mno-strict-align endif +cflags-$(CONFIG_CPU_BIG_ENDIAN) += $(call cc-option,-mbig-endian) +cflags-$(CONFIG_CPU_LITTLE_ENDIAN) += -mlittle-endian aflags-$(CONFIG_CPU_BIG_ENDIAN) += $(call cc-option,-mbig-endian) aflags-$(CONFIG_CPU_LITTLE_ENDIAN) += -mlittle-endian ifeq ($(HAS_BIARCH),y) -override AS += -a$(BITS) -override LD += -m elf$(BITS)$(LDEMULATION) -override CC += -m$(BITS) +KBUILD_CFLAGS += -m$(BITS) +KBUILD_AFLAGS += -m$(BITS) -Wl,-a$(BITS) +LDFLAGS += -m elf$(BITS)$(LDEMULATION) KBUILD_ARFLAGS += --target=elf$(BITS)-$(GNUTARGET) endif diff --git a/arch/powerpc/tools/gcc-check-mprofile-kernel.sh b/arch/powerpc/tools/gcc-check-mprofile-kernel.sh index 061f8035bdbe..a7dd0e5d9f98 100755 --- a/arch/powerpc/tools/gcc-check-mprofile-kernel.sh +++ b/arch/powerpc/tools/gcc-check-mprofile-kernel.sh @@ -7,17 +7,21 @@ set -o pipefail # To debug, uncomment the following line # set -x +# -mprofile-kernel is only supported on 64le, so this should not be invoked +# for other targets. Therefore we can pass in -m64 and -mlittle-endian +# explicitly, to take care of toolchains defaulting to other targets. + # Test whether the compile option -mprofile-kernel exists and generates # profiling code (ie. a call to _mcount()). echo "int func() { return 0; }" | \ - $* -S -x c -O2 -p -mprofile-kernel - -o - 2> /dev/null | \ - grep -q "_mcount" + $* -m64 -mlittle-endian -S -x c -O2 -p -mprofile-kernel - -o - \ + 2> /dev/null | grep -q "_mcount" # Test whether the notrace attribute correctly suppresses calls to _mcount(). echo -e "#include \nnotrace int func() { return 0; }" | \ - $* -S -x c -O2 -p -mprofile-kernel - -o - 2> /dev/null | \ - grep -q "_mcount" && \ + $* -m64 -mlittle-endian -S -x c -O2 -p -mprofile-kernel - -o - \ + 2> /dev/null | grep -q "_mcount" && \ exit 1 echo "OK" diff --git a/scripts/recordmcount.pl b/scripts/recordmcount.pl index 191eb949d52c..fe06e77c15eb 100755 --- a/scripts/recordmcount.pl +++ b/scripts/recordmcount.pl @@ -266,13 +266,29 @@ if ($arch eq "x86_64") { $objcopy .= " -O elf32-sh-linux"; } elsif ($arch eq "powerpc") { + my $ldemulation; + $local_regex = "^[0-9a-fA-F]+\\s+t\\s+(\\.?\\S+)"; # See comment in the sparc64 section for why we use '\w'. $function_regex = "^([0-9a-fA-F]+)\\s+<(\\.?\\w*?)>:"; $mcount_regex = "^\\s*([0-9a-fA-F]+):.*\\s\\.?_mcount\$"; + if ($endian eq "big") { + $cc .= " -mbig-endian "; + $ld .= " -EB "; + $ldemulation = "ppc" + } else { + $cc .= " -mlittle-endian "; + $ld .= " -EL "; + $ldemulation = "lppc" + } if ($bits == 64) { - $type = ".quad"; + $type = ".quad"; + $cc .= " -m64 "; + $ld .= " -m elf64".$ldemulation." "; + } else { + $cc .= " -m32 "; + $ld .= " -m elf32".$ldemulation." "; } } elsif ($arch eq "arm") {