All of lore.kernel.org
 help / color / mirror / Atom feed
From: Arnaldo Carvalho de Melo <acme@kernel.org>
To: Daniel Xu <dxu@dxuuu.xyz>
Cc: jolsa@kernel.org, quentin@isovalent.com, alan.maguire@oracle.com,
	eddyz87@gmail.com, andrii.nakryiko@gmail.com, ast@kernel.org,
	daniel@iogearbox.net, bpf@vger.kernel.org
Subject: Re: [PATCH dwarves v9 3/3] pahole: Inject kfunc decl tags into BTF
Date: Mon, 6 May 2024 17:07:54 -0300	[thread overview]
Message-ID: <Zjk4mlHKmukeUc4y@x1> (raw)
In-Reply-To: <zdag4h7ztmwn56yrmieisbhno4gpb24k7rgjevp6gc46e5dxak@3stxrh2qfnlu>

On Tue, Apr 30, 2024 at 05:27:24PM -0600, Daniel Xu wrote:
> On Tue, Apr 30, 2024 at 05:42:14PM GMT, Arnaldo Carvalho de Melo wrote:
> > On Mon, Apr 29, 2024 at 04:46:00PM -0600, Daniel Xu wrote:
> > > This commit teaches pahole to parse symbols in .BTF_ids section in
> > > vmlinux and discover exported kfuncs. Pahole then takes the list of
> > > kfuncs and injects a BTF_KIND_DECL_TAG for each kfunc.
> > > 
> > > Example of encoding:
> > > 
> > >         $ bpftool btf dump file .tmp_vmlinux.btf | rg "DECL_TAG 'bpf_kfunc'" | wc -l
> > >         121
> > > 
> > >         $ bpftool btf dump file .tmp_vmlinux.btf | rg 56337
> > >         [56337] FUNC 'bpf_ct_change_timeout' type_id=56336 linkage=static
> > >         [127861] DECL_TAG 'bpf_kfunc' type_id=56337 component_idx=-1
> > > 
> > > This enables downstream users and tools to dynamically discover which
> > > kfuncs are available on a system by parsing vmlinux or module BTF, both
> > > available in /sys/kernel/btf.
> > > 
> > > This feature is enabled with --btf_features=decl_tag,decl_tag_kfuncs.
> > 
> > I'm trying this but:
> > 
> > ⬢[acme@toolbox pahole]$ time pahole -j --btf_features=decl_tag,decl_tag_kfuncs --btf_encode_detached=vmlinux.btf.decl_tag,decl_tag_kfuncs vmlinux
> > btf_encoder__tag_kfuncs(cgroup_rstat_updated): found=0
> > btf_encoder__tag_kfuncs(cgroup_rstat_flush): found=0
> > btf_encoder__tag_kfuncs(security_file_permission): found=0
> > btf_encoder__tag_kfuncs(security_inode_getattr): found=0
> > btf_encoder__tag_kfuncs(security_file_open): found=0
> > btf_encoder__tag_kfuncs(security_path_truncate): found=0
> > btf_encoder__tag_kfuncs(vfs_truncate): found=0
> > btf_encoder__tag_kfuncs(vfs_fallocate): found=0
> > btf_encoder__tag_kfuncs(dentry_open): found=0
> > btf_encoder__tag_kfuncs(vfs_getattr): found=0
> > btf_encoder__tag_kfuncs(filp_close): found=0
> > btf_encoder__tag_kfuncs(bpf_lookup_user_key): found=0
> > btf_encoder__tag_kfuncs(bpf_lookup_system_key): found=0
> > btf_encoder__tag_kfuncs(bpf_key_put): found=0
> > btf_encoder__tag_kfuncs(bpf_verify_pkcs7_signature): found=0
> > btf_encoder__tag_kfuncs(bpf_obj_new_impl): found=0
> > <SNIP all with found=0>
> > 
> > With:
> > 
> > ⬢[acme@toolbox pahole]$ git diff -U16
> > diff --git a/btf_encoder.c b/btf_encoder.c
> > index c2df2bc7a374447b..27a16d6564381b60 100644
> > --- a/btf_encoder.c
> > +++ b/btf_encoder.c
> > @@ -1689,32 +1689,35 @@ static int btf_encoder__tag_kfuncs(struct btf_encoder *encoder)
> >  		func = get_func_name(name);
> >  		if (!func)
> >  			continue;
> >  
> >  		/* Check if function belongs to a kfunc set */
> >  		ranges = gobuffer__entries(&btf_kfunc_ranges);
> >  		ranges_cnt = gobuffer__nr_entries(&btf_kfunc_ranges);
> >  		found = false;
> >  		for (j = 0; j < ranges_cnt; j++) {
> >  			size_t addr = sym.st_value;
> >  
> >  			if (ranges[j].start <= addr && addr < ranges[j].end) {
> >  				found = true;
> >  				break;
> >  			}
> >  		}
> > +
> > +		printf("%s(%s): found=%d\n", __func__, func, found);
> > +
> >  		if (!found) {
> >  			free(func);
> >  			continue;
> >  		}
> >  
> >  		err = btf_encoder__tag_kfunc(encoder, &btf_funcs, func);
> >  		if (err) {
> >  			fprintf(stderr, "%s: failed to tag kfunc '%s'\n", __func__, func);
> >  			free(func);
> >  			goto out;
> >  		}
> >  		free(func);
> >  	}
> >  
> >  	err = 0;
> >  out:
> > 
> > --------------
> > 
> > The vmlinux I'm testing on has the kfuncs, etc, as we can see with:
> > 
> > ⬢[acme@toolbox pahole]$ readelf -sW vmlinux | grep __BTF_ID__func__ | wc -l
> > 517
> > ⬢[acme@toolbox pahole]$ readelf -sW vmlinux | grep __BTF_ID__func__ | tail
> >  97887: ffffffff83266bfc     4 OBJECT  LOCAL  DEFAULT   15 __BTF_ID__func__cubictcp_cong_avoid__805493
> >  97888: ffffffff83266c04     4 OBJECT  LOCAL  DEFAULT   15 __BTF_ID__func__cubictcp_state__806494
> >  97889: ffffffff83266c0c     4 OBJECT  LOCAL  DEFAULT   15 __BTF_ID__func__cubictcp_cwnd_event__807495
> >  97890: ffffffff83266c14     4 OBJECT  LOCAL  DEFAULT   15 __BTF_ID__func__cubictcp_acked__808496
> >  98068: ffffffff83266c24     4 OBJECT  LOCAL  DEFAULT   15 __BTF_ID__func__tcp_reno_ssthresh__773199
> >  98069: ffffffff83266c2c     4 OBJECT  LOCAL  DEFAULT   15 __BTF_ID__func__tcp_reno_cong_avoid__774200
> >  98070: ffffffff83266c34     4 OBJECT  LOCAL  DEFAULT   15 __BTF_ID__func__tcp_reno_undo_cwnd__775201
> >  98071: ffffffff83266c3c     4 OBJECT  LOCAL  DEFAULT   15 __BTF_ID__func__tcp_slow_start__776202
> >  98072: ffffffff83266c44     4 OBJECT  LOCAL  DEFAULT   15 __BTF_ID__func__tcp_cong_avoid_ai__777203
> > 101522: ffffffff83266c5c     4 OBJECT  LOCAL  DEFAULT   15 __BTF_ID__func__update_socket_protocol__80024
> > ⬢[acme@toolbox pahole]$
> > 
> > 
> > So that btf_encoder__tag_kfuncs() isn't finding any?
> > 
> > $ pahole -j --btf_features=decl_tag,decl_tag_kfuncs --btf_encode_detached=vmlinux.btf.decl_tag,decl_tag_kfuncs vmlinux
> > btf_encoder__tag_kfuncs(vmlinux)
> > 
> > Yeah, getting the source filename, the right one.
> > 
> > Then is_sym_kfunc_set() never returns true... But:
> > 
> > ⬢[acme@toolbox pahole]$ time pahole -j --btf_features=decl_tag,decl_tag_kfuncs --btf_encode_detached=vmlinux.btf.decl_tag,decl_tag_kfuncs vmlinux
> > is_sym_kfunc_set(__BTF_ID__set8__bpf_rstat_kfunc_ids, BTF_ID_SET8_PFX=__BTF_ID__set8__)
> > is_sym_kfunc_set(__BTF_ID__set8__key_sig_kfunc_set, BTF_ID_SET8_PFX=__BTF_ID__set8__)
> > is_sym_kfunc_set(__BTF_ID__set8__generic_btf_ids, BTF_ID_SET8_PFX=__BTF_ID__set8__)
> > is_sym_kfunc_set(__BTF_ID__set8__common_btf_ids, BTF_ID_SET8_PFX=__BTF_ID__set8__)
> > is_sym_kfunc_set(__BTF_ID__set8__bpf_map_iter_kfunc_ids, BTF_ID_SET8_PFX=__BTF_ID__set8__)
> > is_sym_kfunc_set(__BTF_ID__set8__cpumask_kfunc_btf_ids, BTF_ID_SET8_PFX=__BTF_ID__set8__)
> > is_sym_kfunc_set(__BTF_ID__set8__hid_bpf_kfunc_ids, BTF_ID_SET8_PFX=__BTF_ID__set8__)
> > is_sym_kfunc_set(__BTF_ID__set8__hid_bpf_fmodret_ids, BTF_ID_SET8_PFX=__BTF_ID__set8__)
> > is_sym_kfunc_set(__BTF_ID__set8__hid_bpf_syscall_kfunc_ids, BTF_ID_SET8_PFX=__BTF_ID__set8__)
> > is_sym_kfunc_set(__BTF_ID__set8__bpf_kfunc_check_set_skb, BTF_ID_SET8_PFX=__BTF_ID__set8__)
> > is_sym_kfunc_set(__BTF_ID__set8__bpf_kfunc_check_set_xdp, BTF_ID_SET8_PFX=__BTF_ID__set8__)
> > is_sym_kfunc_set(__BTF_ID__set8__bpf_kfunc_check_set_sock_addr, BTF_ID_SET8_PFX=__BTF_ID__set8__)
> > is_sym_kfunc_set(__BTF_ID__set8__bpf_sk_iter_kfunc_ids, BTF_ID_SET8_PFX=__BTF_ID__set8__)
> > is_sym_kfunc_set(__BTF_ID__set8__xdp_metadata_kfunc_ids, BTF_ID_SET8_PFX=__BTF_ID__set8__)
> > is_sym_kfunc_set(__BTF_ID__set8__bpf_test_modify_return_ids, BTF_ID_SET8_PFX=__BTF_ID__set8__)
> > is_sym_kfunc_set(__BTF_ID__set8__test_sk_check_kfunc_ids, BTF_ID_SET8_PFX=__BTF_ID__set8__)
> > is_sym_kfunc_set(__BTF_ID__set8__tcp_cubic_check_kfunc_ids, BTF_ID_SET8_PFX=__BTF_ID__set8__)
> > is_sym_kfunc_set(__BTF_ID__set8__bpf_tcp_ca_check_kfunc_ids, BTF_ID_SET8_PFX=__BTF_ID__set8__)
> > is_sym_kfunc_set(__BTF_ID__set8__bpf_mptcp_fmodret_ids, BTF_ID_SET8_PFX=__BTF_ID__set8__)
> > 
> > real	0m5.586s
> > user	0m29.707s
> > sys	0m2.160s
> > ⬢[acme@toolbox pahole]$
> > 
> > And then:
> > 
> > ⬢[acme@toolbox pahole]$ time pahole -j --btf_features=decl_tag,decl_tag_kfuncs --btf_encode_detached=vmlinux.btf.decl_tag,decl_tag_kfuncs vmlinux
> > is_sym_kfunc_set(__BTF_ID__set8__bpf_rstat_kfunc_ids, BTF_ID_SET8_PFX=__BTF_ID__set8__, set->flags= 0, BTF_SET8_KFUNCS=1, ret=0)
> > is_sym_kfunc_set(__BTF_ID__set8__key_sig_kfunc_set, BTF_ID_SET8_PFX=__BTF_ID__set8__, set->flags= 0, BTF_SET8_KFUNCS=1, ret=0)
> > is_sym_kfunc_set(__BTF_ID__set8__generic_btf_ids, BTF_ID_SET8_PFX=__BTF_ID__set8__, set->flags= 0, BTF_SET8_KFUNCS=1, ret=0)
> > is_sym_kfunc_set(__BTF_ID__set8__common_btf_ids, BTF_ID_SET8_PFX=__BTF_ID__set8__, set->flags= 0, BTF_SET8_KFUNCS=1, ret=0)
> > is_sym_kfunc_set(__BTF_ID__set8__bpf_map_iter_kfunc_ids, BTF_ID_SET8_PFX=__BTF_ID__set8__, set->flags= 0, BTF_SET8_KFUNCS=1, ret=0)
> > is_sym_kfunc_set(__BTF_ID__set8__cpumask_kfunc_btf_ids, BTF_ID_SET8_PFX=__BTF_ID__set8__, set->flags= 0, BTF_SET8_KFUNCS=1, ret=0)
> > is_sym_kfunc_set(__BTF_ID__set8__hid_bpf_kfunc_ids, BTF_ID_SET8_PFX=__BTF_ID__set8__, set->flags= 0, BTF_SET8_KFUNCS=1, ret=0)
> > is_sym_kfunc_set(__BTF_ID__set8__hid_bpf_fmodret_ids, BTF_ID_SET8_PFX=__BTF_ID__set8__, set->flags= 0, BTF_SET8_KFUNCS=1, ret=0)
> > is_sym_kfunc_set(__BTF_ID__set8__hid_bpf_syscall_kfunc_ids, BTF_ID_SET8_PFX=__BTF_ID__set8__, set->flags= 0, BTF_SET8_KFUNCS=1, ret=0)
> > is_sym_kfunc_set(__BTF_ID__set8__bpf_kfunc_check_set_skb, BTF_ID_SET8_PFX=__BTF_ID__set8__, set->flags= 0, BTF_SET8_KFUNCS=1, ret=0)
> > is_sym_kfunc_set(__BTF_ID__set8__bpf_kfunc_check_set_xdp, BTF_ID_SET8_PFX=__BTF_ID__set8__, set->flags= 0, BTF_SET8_KFUNCS=1, ret=0)
> > is_sym_kfunc_set(__BTF_ID__set8__bpf_kfunc_check_set_sock_addr, BTF_ID_SET8_PFX=__BTF_ID__set8__, set->flags= 0, BTF_SET8_KFUNCS=1, ret=0)
> > is_sym_kfunc_set(__BTF_ID__set8__bpf_sk_iter_kfunc_ids, BTF_ID_SET8_PFX=__BTF_ID__set8__, set->flags= 0, BTF_SET8_KFUNCS=1, ret=0)
> > is_sym_kfunc_set(__BTF_ID__set8__xdp_metadata_kfunc_ids, BTF_ID_SET8_PFX=__BTF_ID__set8__, set->flags= 0, BTF_SET8_KFUNCS=1, ret=0)
> > is_sym_kfunc_set(__BTF_ID__set8__bpf_test_modify_return_ids, BTF_ID_SET8_PFX=__BTF_ID__set8__, set->flags= 0, BTF_SET8_KFUNCS=1, ret=0)
> > is_sym_kfunc_set(__BTF_ID__set8__test_sk_check_kfunc_ids, BTF_ID_SET8_PFX=__BTF_ID__set8__, set->flags= 0, BTF_SET8_KFUNCS=1, ret=0)
> > is_sym_kfunc_set(__BTF_ID__set8__tcp_cubic_check_kfunc_ids, BTF_ID_SET8_PFX=__BTF_ID__set8__, set->flags= 0, BTF_SET8_KFUNCS=1, ret=0)
> > is_sym_kfunc_set(__BTF_ID__set8__bpf_tcp_ca_check_kfunc_ids, BTF_ID_SET8_PFX=__BTF_ID__set8__, set->flags= 0, BTF_SET8_KFUNCS=1, ret=0)
> > is_sym_kfunc_set(__BTF_ID__set8__bpf_mptcp_fmodret_ids, BTF_ID_SET8_PFX=__BTF_ID__set8__, set->flags= 0, BTF_SET8_KFUNCS=1, ret=0)
> 
> set->flags=0 here is odd. I'd expect at least some of those to be
> non-zero. Can you check if your tree has
> https://github.com/torvalds/linux/commit/6f3189f38a3e995232e028a4c341164c4aca1b20
> ?

⬢[acme@toolbox linux]$ git tag --contains 6f3189f38a3e995232e028a4c341164c4aca1b20
v6.9-rc1
v6.9-rc2
v6.9-rc3
v6.9-rc4
v6.9-rc5
v6.9-rc6
v6.9-rc7
⬢[acme@toolbox linux]$ git log --oneline -1
dd5a440a31fae6e4 (HEAD, tag: v6.9-rc7, torvalds/master) Linux 6.9-rc7
⬢[acme@toolbox linux]$

So now with a just built upstream kernel I get the output below, do you
have patches for other tools to consume this? Or does, say, bpftrace
already handles such decl tags, etc?

I think I'll make pfunct (its in the pahole git repo) to consume it:

⬢[acme@toolbox pahole]$ pfunct --help
Usage: pfunct [OPTION...] FILE

  -a, --addr=ADDR            show just the function that where ADDR is
  -b, --expand_types         Expand types needed by the prototype
      --compile[=FUNCTION]   Generate compilable source code with types
                             expanded (Default all functions)
  -c, --class=CLASS          functions that have CLASS pointer parameters
  -E, --externals            show just external functions
  -f, --function=FUNCTION    show just FUNCTION
  -F, --format_path=FORMAT_LIST   List of debugging formats to try
  -g, --goto_labels          show number of goto labels
  -G, --cc_uninlined         declared inline, uninlined by compiler
  -H, --cc_inlined           not declared inline, inlined by compiler
  -i, --inline_expansions    show inline expansions
  -I, --inline_expansions_stats   show inline expansions stats
  -l, --decl_info            show source code info
      --no_parm_names        Don't show parameter names
  -N, --function_name_len    show size of functions names
  -p, --nr_parms             show number of parameters
  -P, --prototypes           show function prototypes
      --symtab[=NAME]        show symbol table NAME (Default .symtab)
  -s, --sizes                show size of functions
  -S, --nr_variables         show number of variables
  -t, --total_inline_stats   show Multi-CU total inline expansions stats
  -T, --variables            show variables
  -V, --verbose              be verbose
  -?, --help                 Give this help list
      --usage                Give a short usage message
      --version              Print program version

Mandatory or optional arguments to long options are also mandatory or optional
for any corresponding short options.
⬢[acme@toolbox pahole]$

- Arnaldo

⬢[acme@toolbox pahole]$ time pahole -j --btf_features=decl_tag,decl_tag_kfuncs --btf_encode_detached=vmlinux.btf.decl_tag,decl_tag_kfuncs vmlinux-v6.9.0-rc7

real	0m5.938s
user	0m32.050s
sys	0m2.075s
⬢[acme@toolbox pahole]$ bpftool btf dump file vmlinux.btf.decl_tag,decl_tag_kfuncs | grep -w 94151
[94151] FUNC 'cgroup_rstat_updated' type_id=94150 linkage=static
[135450] DECL_TAG 'bpf_kfunc' type_id=94151 component_idx=-1
⬢[acme@toolbox pahole]$ bpftool btf dump file vmlinux.btf.decl_tag,decl_tag_kfuncs | grep -w 94150 -A2
[94150] FUNC_PROTO '(anon)' ret_type_id=0 vlen=2
	'cgrp' type_id=744
	'cpu' type_id=12
[94151] FUNC 'cgroup_rstat_updated' type_id=94150 linkage=static
[94152] STRUCT 'pids_cgroup' size=288 vlen=6
	'css' type_id=1786 bits_offset=0
⬢[acme@toolbox pahole]$
⬢[acme@toolbox pahole]$ bpftool btf dump file vmlinux.btf.decl_tag,decl_tag_kfuncs  | grep DECL
	'BTF_KIND_DECL_TAG' val=17
[135450] DECL_TAG 'bpf_kfunc' type_id=94151 component_idx=-1
[135451] DECL_TAG 'bpf_kfunc' type_id=94146 component_idx=-1
[135452] DECL_TAG 'bpf_kfunc' type_id=74311 component_idx=-1
[135453] DECL_TAG 'bpf_kfunc' type_id=74309 component_idx=-1
[135454] DECL_TAG 'bpf_kfunc' type_id=74307 component_idx=-1
[135455] DECL_TAG 'bpf_kfunc' type_id=74305 component_idx=-1
[135456] DECL_TAG 'bpf_kfunc' type_id=74302 component_idx=-1
[135457] DECL_TAG 'bpf_kfunc' type_id=43681 component_idx=-1
[135458] DECL_TAG 'bpf_kfunc' type_id=83157 component_idx=-1
[135459] DECL_TAG 'bpf_kfunc' type_id=83156 component_idx=-1
[135460] DECL_TAG 'bpf_kfunc' type_id=83152 component_idx=-1
[135461] DECL_TAG 'bpf_kfunc' type_id=83151 component_idx=-1
[135462] DECL_TAG 'bpf_kfunc' type_id=83149 component_idx=-1
[135463] DECL_TAG 'bpf_kfunc' type_id=83145 component_idx=-1
[135464] DECL_TAG 'bpf_kfunc' type_id=83144 component_idx=-1
[135465] DECL_TAG 'bpf_kfunc' type_id=83142 component_idx=-1
[135466] DECL_TAG 'bpf_kfunc' type_id=83141 component_idx=-1
[135467] DECL_TAG 'bpf_kfunc' type_id=83133 component_idx=-1
[135468] DECL_TAG 'bpf_kfunc' type_id=83132 component_idx=-1
[135469] DECL_TAG 'bpf_kfunc' type_id=83139 component_idx=-1
[135470] DECL_TAG 'bpf_kfunc' type_id=83137 component_idx=-1
[135471] DECL_TAG 'bpf_kfunc' type_id=83135 component_idx=-1
[135472] DECL_TAG 'bpf_kfunc' type_id=83130 component_idx=-1
[135473] DECL_TAG 'bpf_kfunc' type_id=83128 component_idx=-1
[135474] DECL_TAG 'bpf_kfunc' type_id=83125 component_idx=-1
[135475] DECL_TAG 'bpf_kfunc' type_id=83123 component_idx=-1
[135476] DECL_TAG 'bpf_kfunc' type_id=83121 component_idx=-1
[135477] DECL_TAG 'bpf_kfunc' type_id=83119 component_idx=-1
[135478] DECL_TAG 'bpf_kfunc' type_id=83117 component_idx=-1
[135479] DECL_TAG 'bpf_kfunc' type_id=83095 component_idx=-1
[135480] DECL_TAG 'bpf_kfunc' type_id=83103 component_idx=-1
[135481] DECL_TAG 'bpf_kfunc' type_id=83101 component_idx=-1
[135482] DECL_TAG 'bpf_kfunc' type_id=83099 component_idx=-1
[135483] DECL_TAG 'bpf_kfunc' type_id=83098 component_idx=-1
[135484] DECL_TAG 'bpf_kfunc' type_id=83115 component_idx=-1
[135485] DECL_TAG 'bpf_kfunc' type_id=83114 component_idx=-1
[135486] DECL_TAG 'bpf_kfunc' type_id=24936 component_idx=-1
[135487] DECL_TAG 'bpf_kfunc' type_id=24934 component_idx=-1
[135488] DECL_TAG 'bpf_kfunc' type_id=24932 component_idx=-1
[135489] DECL_TAG 'bpf_kfunc' type_id=35395 component_idx=-1
[135490] DECL_TAG 'bpf_kfunc' type_id=35393 component_idx=-1
[135491] DECL_TAG 'bpf_kfunc' type_id=35391 component_idx=-1
[135492] DECL_TAG 'bpf_kfunc' type_id=35389 component_idx=-1
[135493] DECL_TAG 'bpf_kfunc' type_id=35387 component_idx=-1
[135494] DECL_TAG 'bpf_kfunc' type_id=35385 component_idx=-1
[135495] DECL_TAG 'bpf_kfunc' type_id=129497 component_idx=-1
[135496] DECL_TAG 'bpf_kfunc' type_id=129495 component_idx=-1
[135497] DECL_TAG 'bpf_kfunc' type_id=129493 component_idx=-1
[135498] DECL_TAG 'bpf_kfunc' type_id=35383 component_idx=-1
[135499] DECL_TAG 'bpf_kfunc' type_id=35381 component_idx=-1
[135500] DECL_TAG 'bpf_kfunc' type_id=35379 component_idx=-1
[135501] DECL_TAG 'bpf_kfunc' type_id=83112 component_idx=-1
[135502] DECL_TAG 'bpf_kfunc' type_id=83110 component_idx=-1
[135503] DECL_TAG 'bpf_kfunc' type_id=83109 component_idx=-1
[135504] DECL_TAG 'bpf_kfunc' type_id=83107 component_idx=-1
[135505] DECL_TAG 'bpf_kfunc' type_id=83105 component_idx=-1
[135506] DECL_TAG 'bpf_kfunc' type_id=129409 component_idx=-1
[135507] DECL_TAG 'bpf_kfunc' type_id=119719 component_idx=-1
[135508] DECL_TAG 'bpf_kfunc' type_id=119717 component_idx=-1
[135509] DECL_TAG 'bpf_kfunc' type_id=83434 component_idx=-1
[135510] DECL_TAG 'bpf_kfunc' type_id=83430 component_idx=-1
[135511] DECL_TAG 'bpf_kfunc' type_id=83432 component_idx=-1
[135512] DECL_TAG 'bpf_kfunc' type_id=83427 component_idx=-1
[135513] DECL_TAG 'bpf_kfunc' type_id=83426 component_idx=-1
[135514] DECL_TAG 'bpf_kfunc' type_id=83425 component_idx=-1
[135515] DECL_TAG 'bpf_kfunc' type_id=83424 component_idx=-1
[135516] DECL_TAG 'bpf_kfunc' type_id=83423 component_idx=-1
[135517] DECL_TAG 'bpf_kfunc' type_id=83421 component_idx=-1
[135518] DECL_TAG 'bpf_kfunc' type_id=83419 component_idx=-1
[135519] DECL_TAG 'bpf_kfunc' type_id=83418 component_idx=-1
[135520] DECL_TAG 'bpf_kfunc' type_id=83416 component_idx=-1
[135521] DECL_TAG 'bpf_kfunc' type_id=83415 component_idx=-1
[135522] DECL_TAG 'bpf_kfunc' type_id=83413 component_idx=-1
[135523] DECL_TAG 'bpf_kfunc' type_id=83411 component_idx=-1
[135524] DECL_TAG 'bpf_kfunc' type_id=83410 component_idx=-1
[135525] DECL_TAG 'bpf_kfunc' type_id=83408 component_idx=-1
[135526] DECL_TAG 'bpf_kfunc' type_id=83407 component_idx=-1
[135527] DECL_TAG 'bpf_kfunc' type_id=83406 component_idx=-1
[135528] DECL_TAG 'bpf_kfunc' type_id=83404 component_idx=-1
[135529] DECL_TAG 'bpf_kfunc' type_id=83403 component_idx=-1
[135530] DECL_TAG 'bpf_kfunc' type_id=83401 component_idx=-1
[135531] DECL_TAG 'bpf_kfunc' type_id=83399 component_idx=-1
[135532] DECL_TAG 'bpf_kfunc' type_id=83398 component_idx=-1
[135533] DECL_TAG 'bpf_kfunc' type_id=83396 component_idx=-1
[135534] DECL_TAG 'bpf_kfunc' type_id=84592 component_idx=-1
[135535] DECL_TAG 'bpf_kfunc' type_id=78862 component_idx=-1
[135536] DECL_TAG 'bpf_kfunc' type_id=78855 component_idx=-1
[135537] DECL_TAG 'bpf_kfunc' type_id=78853 component_idx=-1
[135538] DECL_TAG 'bpf_kfunc' type_id=78851 component_idx=-1
[135539] DECL_TAG 'bpf_kfunc' type_id=78849 component_idx=-1
[135540] DECL_TAG 'bpf_kfunc' type_id=52826 component_idx=-1
[135541] DECL_TAG 'bpf_kfunc' type_id=52825 component_idx=-1
[135542] DECL_TAG 'bpf_kfunc' type_id=52823 component_idx=-1
[135543] DECL_TAG 'bpf_kfunc' type_id=52821 component_idx=-1
[135544] DECL_TAG 'bpf_kfunc' type_id=52816 component_idx=-1
[135545] DECL_TAG 'bpf_kfunc' type_id=79148 component_idx=-1
[135546] DECL_TAG 'bpf_kfunc' type_id=79146 component_idx=-1
[135547] DECL_TAG 'bpf_kfunc' type_id=79144 component_idx=-1
[135548] DECL_TAG 'bpf_kfunc' type_id=33070 component_idx=-1
[135549] DECL_TAG 'bpf_kfunc' type_id=33068 component_idx=-1
[135550] DECL_TAG 'bpf_kfunc' type_id=33088 component_idx=-1
[135551] DECL_TAG 'bpf_kfunc' type_id=33064 component_idx=-1
[135552] DECL_TAG 'bpf_kfunc' type_id=33061 component_idx=-1
[135553] DECL_TAG 'bpf_kfunc' type_id=134975 component_idx=-1
[135554] DECL_TAG 'bpf_kfunc' type_id=134971 component_idx=-1
[135555] DECL_TAG 'bpf_kfunc' type_id=134972 component_idx=-1
[135556] DECL_TAG 'bpf_kfunc' type_id=134970 component_idx=-1
[135557] DECL_TAG 'bpf_kfunc' type_id=134974 component_idx=-1
[135558] DECL_TAG 'bpf_kfunc' type_id=134969 component_idx=-1
[135559] DECL_TAG 'bpf_kfunc' type_id=53825 component_idx=-1
[135560] DECL_TAG 'bpf_kfunc' type_id=53827 component_idx=-1
[135561] DECL_TAG 'bpf_kfunc' type_id=53824 component_idx=-1
[135562] DECL_TAG 'bpf_kfunc' type_id=53831 component_idx=-1
[135563] DECL_TAG 'bpf_kfunc' type_id=53829 component_idx=-1
[135564] DECL_TAG 'bpf_kfunc' type_id=21317 component_idx=-1
[135565] DECL_TAG 'bpf_kfunc' type_id=21315 component_idx=-1
⬢[acme@toolbox pahole]$

  reply	other threads:[~2024-05-06 20:08 UTC|newest]

Thread overview: 16+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2024-04-29 22:45 [PATCH dwarves v9 0/3] pahole: Inject kfunc decl tags into BTF Daniel Xu
2024-04-29 22:45 ` [PATCH dwarves v9 1/3] pahole: Save input filename separate from output Daniel Xu
2024-04-30 18:41   ` Arnaldo Carvalho de Melo
2024-04-29 22:45 ` [PATCH dwarves v9 2/3] pahole: Add --btf_feature=decl_tag_kfuncs feature Daniel Xu
2024-04-30 18:48   ` Arnaldo Carvalho de Melo
2024-04-30 23:00     ` Daniel Xu
2024-05-02 11:49       ` Alan Maguire
2024-05-02 13:35         ` Arnaldo Carvalho de Melo
2024-05-02 13:43           ` Alan Maguire
2024-04-29 22:46 ` [PATCH dwarves v9 3/3] pahole: Inject kfunc decl tags into BTF Daniel Xu
2024-04-30 19:57   ` Arnaldo Carvalho de Melo
2024-04-30 23:29     ` Daniel Xu
2024-04-30 20:42   ` Arnaldo Carvalho de Melo
2024-04-30 23:27     ` Daniel Xu
2024-05-06 20:07       ` Arnaldo Carvalho de Melo [this message]
2024-05-07  2:18         ` Daniel Xu

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=Zjk4mlHKmukeUc4y@x1 \
    --to=acme@kernel.org \
    --cc=alan.maguire@oracle.com \
    --cc=andrii.nakryiko@gmail.com \
    --cc=ast@kernel.org \
    --cc=bpf@vger.kernel.org \
    --cc=daniel@iogearbox.net \
    --cc=dxu@dxuuu.xyz \
    --cc=eddyz87@gmail.com \
    --cc=jolsa@kernel.org \
    --cc=quentin@isovalent.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.