[PATCH v5 3/4] powerpc/kbuild: Use flags variables rather than overriding LD/CC/AS
Masahiro Yamada
yamada.masahiro at socionext.com
Thu May 31 00:34:09 AEST 2018
2018-05-30 21:19 GMT+09:00 Nicholas Piggin <npiggin at gmail.com>:
> 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.
When I applied this patch, I changed the following.
"the the" -> "the"
"thse" -> "these"
Please let me know if my fix-up is bad.
> 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 <npiggin at gmail.com>
>
> 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 <linux/compiler.h>\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") {
> --
> 2.17.0
>
> --
> To unsubscribe from this list: send the line "unsubscribe linux-kbuild" in
> the body of a message to majordomo at vger.kernel.org
> More majordomo info at http://vger.kernel.org/majordomo-info.html
--
Best Regards
Masahiro Yamada
More information about the Linuxppc-dev
mailing list