[PATCH] powerpc/64: Use -mprofile-kernel for big endian ELFv2 kernels

Naveen N. Rao naveen.n.rao at linux.vnet.ibm.com
Wed May 10 00:04:04 AEST 2023


Nicholas Piggin wrote:
> -mprofile-kernel is an optimised calling convention for mcount that
> Linux  has only implemented with the ELFv2 ABI, so it was disabled for
> big endian kernels. However it does work with ELFv2 big endian, so let's
> allow that if the compiler supports it.
> 
> Cc: Naveen N. Rao <naveen.n.rao at linux.vnet.ibm.com>
> Suggested-by: Christophe Leroy <christophe.leroy at csgroup.eu>
> Signed-off-by: Nicholas Piggin <npiggin at gmail.com>
> ---
> Christophe had the good idea that we could use -mprofile-kernel for
> ELFv2 BE. Unfortunately can't remove -pg due to lack of -mprofile-kernel
> in clang, but this gives BE the nicer ftrace code with GCC at least.
> Function tracer works for me with a BE kernel.

LGTM. With a few minor nits below:
Acked-by: Naveen N. Rao <naveen.n.rao at linux.vnet.ibm.com>

> 
> Thanks,
> Nick
> 
>  arch/powerpc/Kconfig                            | 6 ++++--
>  arch/powerpc/tools/gcc-check-mprofile-kernel.sh | 4 ++--
>  2 files changed, 6 insertions(+), 4 deletions(-)
> 
> diff --git a/arch/powerpc/Kconfig b/arch/powerpc/Kconfig
> index a64bfd9b8a1d..bd2ee7af1342 100644
> --- a/arch/powerpc/Kconfig
> +++ b/arch/powerpc/Kconfig
> @@ -547,8 +547,10 @@ config LD_HEAD_STUB_CATCH
>  	  If unsure, say "N".
> 
>  config MPROFILE_KERNEL
> -	depends on PPC64 && CPU_LITTLE_ENDIAN && FUNCTION_TRACER
> -	def_bool $(success,$(srctree)/arch/powerpc/tools/gcc-check-mprofile-kernel.sh $(CC) -I$(srctree)/include -D__KERNEL__)
> +	depends on PPC64 && FUNCTION_TRACER
> +	depends on CPU_LITTLE_ENDIAN || PPC64_BIG_ENDIAN_ELF_ABI_V2

Can't we just check for PPC64_ELF_ABI_V2?

> +	def_bool $(success,$(srctree)/arch/powerpc/tools/gcc-check-mprofile-kernel.sh $(CC) -mlittle-endian) if CPU_LITTLE_ENDIAN
> +	def_bool $(success,$(srctree)/arch/powerpc/tools/gcc-check-mprofile-kernel.sh $(CC) -mbig-endian) if CPU_BIG_ENDIAN
> 
>  config HOTPLUG_CPU
>  	bool "Support for enabling/disabling CPUs"
> diff --git a/arch/powerpc/tools/gcc-check-mprofile-kernel.sh b/arch/powerpc/tools/gcc-check-mprofile-kernel.sh
> index 137f3376ac2b..e78c599251ff 100755
> --- a/arch/powerpc/tools/gcc-check-mprofile-kernel.sh
> +++ b/arch/powerpc/tools/gcc-check-mprofile-kernel.sh
> @@ -14,13 +14,13 @@ set -o pipefail

We have this comment before the below code, which should also be updated/removed:
  # -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; }" | \
> -    $* -m64 -mlittle-endian -S -x c -O2 -p -mprofile-kernel - -o - \
> +    $* -m64 -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; }" | \
> -    $* -m64 -mlittle-endian -S -x c -O2 -p -mprofile-kernel - -o - \
> +    $* -m64 -S -x c -O2 -p -mprofile-kernel - -o - \
>      2> /dev/null | grep -q "_mcount" && \
>      exit 1
> 

- Naveen



More information about the Linuxppc-dev mailing list