[PATCH v3 3/4] powerpc/kbuild: Use flags variables rather than overriding LD/CC/AS

Steven Rostedt rostedt at goodmis.org
Tue May 15 01:28:26 AEST 2018


On Mon, 14 May 2018 13:52:27 +1000
Nicholas Piggin <npiggin at gmail.com> wrote:

> 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

                             the                          these

> 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 <npiggin at gmail.com>
> ---
> Since v2:
> - removed extra -EB in the recordmcount script (thanks mpe)
> 
>  arch/powerpc/Makefile   | 16 +++++++++-------
>  scripts/recordmcount.pl |  7 +++++++
>  2 files changed, 16 insertions(+), 7 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/scripts/recordmcount.pl b/scripts/recordmcount.pl
> index 191eb949d52c..3c67304a7425 100755
> --- a/scripts/recordmcount.pl
> +++ b/scripts/recordmcount.pl
> @@ -274,6 +274,13 @@ if ($arch eq "x86_64") {
>      if ($bits == 64) {
>  	$type = ".quad";
>      }
> +    if ($endian eq "big") {
> +	    $cc .= " -mbig-endian ";
> +	    $ld .= " -EB ";
> +    } else {
> +	    $cc .= " -mlittle-endian ";
> +	    $ld .= " -EL ";
> +    }

Have you tried building all current archs with function tracing enabled
to make sure this doesn't break any of them? I can do it if you want.

-- Steve

>  
>  } elsif ($arch eq "arm") {
>      $alignment = 2;



More information about the Linuxppc-dev mailing list