Re: [PATCH 5.10] kbuild: fix BTF build with pahole 1.24

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Thu, Oct 27, 2022 at 09:01:58PM +0900, Dominique Martinet wrote:
> pahole 1.24 broke builds on kernel <6.0 which do not have the
> new BTF_KIND_ENUM64 BTF tag.
> The 5.15 branch fixed this in commit b775fbf532dc01ae53a6fc56168fd30cb4b0c658
> ("kbuild: Add skip_encoding_btf_enum64 option to pahole"), which
> we cannot use directly for 5.10 because 5.10 does not have the
> pahole-flags.sh script, itself introduced in upstream commit
> 0baced0e0938f2895ceba54038eaf15ed91032e7 ("kbuild: Unify options
> for BTF generation for vmlinux and modules")
> 
> that last commit is difficult to backport as 5.10 does not have BTF
> for modules support: work around the problem by just copying the
> pahole-flags.sh script and calling it directly in link-vmlinux.sh,
> which is hopefully acceptable as the flags are not shared in this tree.
> 
> Note that compared to 5.15 the flags script does not have
> --btf_gen_floats as linux 5.10 did not have that BTF tag yet;
> but any new flag added to 5.15 will not be able to be added to 5.10 in
> an identical way for any future breakage.
> 
> Cc: Martin Rodriguez Reboredo <yakoyoku@xxxxxxxxx>
> Cc: Jiri Olsa <jolsa@xxxxxxxxxx>
> CC: Andrii Nakryiko <andrii@xxxxxxxxxx>
> Signed-off-by: Dominique Martinet <asmadeus@xxxxxxxxxxxxx>

hi,
I sent this backport just recently:
  https://lore.kernel.org/bpf/Y1lkASXgeW0jfP8o@xxxxxxxxx/T/#t

it's split into several patches, hopefuly fixing the issue for you

jirka

> ---
> 
> This came up after updating nixpkgs to pahole 1.24.
> https://github.com/NixOS/nixpkgs/pull/194551
> Their 5.15's kernel built just fine as it already got some special
> handling added, but since that handling was not added to other stable
> kernels it started breaking builds after merging...
> 
> This shouldn't break anything, and should also as a byproduct fix some
> builds with pahole 1.18 through 1.21 although I'm not sure if it never
> has been backported to 5.10 because it's not a problem there or because
> nobody cared (I probably only started caring after the 1.22 release)
> 
> Anyway, if more can be shared I think it'll make things simpler for
> everyone going forward :)
> 
> 
>  scripts/link-vmlinux.sh |  2 +-
>  scripts/pahole-flags.sh | 21 +++++++++++++++++++++
>  2 files changed, 22 insertions(+), 1 deletion(-)
>  create mode 100755 scripts/pahole-flags.sh
> 
> diff --git a/scripts/link-vmlinux.sh b/scripts/link-vmlinux.sh
> index d0b44bee9286..c24da7b68619 100755
> --- a/scripts/link-vmlinux.sh
> +++ b/scripts/link-vmlinux.sh
> @@ -161,7 +161,7 @@ gen_btf()
>  	vmlinux_link ${1}
>  
>  	info "BTF" ${2}
> -	LLVM_OBJCOPY=${OBJCOPY} ${PAHOLE} -J ${1}
> +	LLVM_OBJCOPY="${OBJCOPY}" ${PAHOLE} -J $("${srctree}/scripts/pahole_flags.sh") ${1}
>  
>  	# Create ${2} which contains just .BTF section but no symbols. Add
>  	# SHF_ALLOC because .BTF will be part of the vmlinux image. --strip-all
> diff --git a/scripts/pahole-flags.sh b/scripts/pahole-flags.sh
> new file mode 100755
> index 000000000000..8c82173e42e5
> --- /dev/null
> +++ b/scripts/pahole-flags.sh
> @@ -0,0 +1,21 @@
> +#!/bin/sh
> +# SPDX-License-Identifier: GPL-2.0
> +
> +extra_paholeopt=
> +
> +if ! [ -x "$(command -v ${PAHOLE})" ]; then
> +	exit 0
> +fi
> +
> +pahole_ver=$(${PAHOLE} --version | sed -E 's/v([0-9]+)\.([0-9]+)/\1\2/')
> +
> +if [ "${pahole_ver}" -ge "118" ] && [ "${pahole_ver}" -le "121" ]; then
> +	# pahole 1.18 through 1.21 can't handle zero-sized per-CPU vars
> +	extra_paholeopt="${extra_paholeopt} --skip_encoding_btf_vars"
> +fi
> +
> +if [ "${pahole_ver}" -ge "124" ]; then
> +	extra_paholeopt="${extra_paholeopt} --skip_encoding_btf_enum64"
> +fi
> +
> +echo ${extra_paholeopt}
> -- 
> 2.37.3
> 



[Index of Archives]     [Linux Kernel]     [Kernel Development Newbies]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite Hiking]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux