Re: [PATCH dwarves v1 2/2] tests: verify that pfunct prints btf_decl_tags read from BTF

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

 



On 11/12/2024 02:12, Eduard Zingerman wrote:
> When using BTF as a source, pfunct should now be able to print
> btf_decl_tags for programs like below:
> 
>   #define __tag(x) __attribute__((btf_decl_tag(#x)))
>   __tag(a) __tag(b) void foo(void) {}
> 
> This situation arises after recent kernel changes, where tags 'kfunc'
> and 'bpf_fastcall' are added to some functions. To avoid dependency on
> a recent kernel version test this by compiling a small C program using
> clang with --target=bpf, which would instruct clang to generate .BTF
> section.
> 
> Signed-off-by: Eduard Zingerman <eddyz87@xxxxxxxxx>

nit: the test is great but it would be good to print out a description
even in non-verbose mode; when I run it via ./tests I see

  5: Ok

could we just echo the comment below, i.e.

5 : Check that pfunct can print btf_decl_tags read from BTF: Ok

?

Reviewed-by: Alan Maguire <alan.maguire@xxxxxxxxxx>
Tested-by: Alan Maguire <alan.maguire@xxxxxxxxxx>

> ---
>  tests/pfunct-btf-decl-tags.sh | 65 +++++++++++++++++++++++++++++++++++
>  1 file changed, 65 insertions(+)
>  create mode 100755 tests/pfunct-btf-decl-tags.sh
> 
> diff --git a/tests/pfunct-btf-decl-tags.sh b/tests/pfunct-btf-decl-tags.sh
> new file mode 100755
> index 0000000..7e7f547
> --- /dev/null
> +++ b/tests/pfunct-btf-decl-tags.sh
> @@ -0,0 +1,65 @@
> +#!/bin/bash
> +# SPDX-License-Identifier: GPL-2.0-only
> +
> +# Check that pfunct can print btf_decl_tags read from BTF
> +
> +tmpobj=$(mktemp /tmp/pfunct-btf-decl-tags.sh.XXXXXX.o)
> +
> +cleanup()
> +{
> +	rm $tmpobj
> +}
> +
> +trap cleanup EXIT
> +
> +CLANG=${CLANG:-clang}
> +if ! command -v $CLANG > /dev/null; then
> +	echo "Need clang for test $0"
> +	exit 1
> +fi
> +
> +(cat <<EOF
> +#define __tag(x) __attribute__((btf_decl_tag(#x)))
> +
> +__tag(a) __tag(b) __tag(c) void foo(void) {}
> +__tag(a) __tag(b)          void bar(void) {}
> +__tag(a)                   void buz(void) {}
> +
> +EOF
> +) | $CLANG --target=bpf -c -g -x c -o $tmpobj -
> +
> +# tags order is not guaranteed
> +sort_tags=$(cat <<EOF
> +{
> +match(\$0,/^(.*) (void .*)/,tags_and_proto);
> +tags  = tags_and_proto[1];
> +proto = tags_and_proto[2];
> +split(tags, tags_arr ,/ /);
> +asort(tags_arr);
> +for (t in tags_arr) printf "%s ", tags_arr[t];
> +print proto;
> +}
> +EOF
> +)
> +
> +expected=$(cat <<EOF
> +a b c void foo(void);
> +a b void bar(void);
> +a void buz(void);
> +EOF
> +)
> +
> +out=$(pfunct -P -F btf $tmpobj | awk "$sort_tags" | sort)
> +d=$(diff -u <(echo "$expected") <(echo "$out"))
> +
> +if [[ "$d" == "" ]]; then
> +	echo "Ok"
> +	exit 0
> +else
> +	echo "pfunct output does not match expected:"
> +	echo "$d"
> +	echo
> +	echo "Complete output:"
> +	echo "$out"
> +	exit 1
> +fi





[Index of Archives]     [Linux Samsung SoC]     [Linux Rockchip SoC]     [Linux Actions SoC]     [Linux for Synopsys ARC Processors]     [Linux NFS]     [Linux NILFS]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]


  Powered by Linux