On Tue, May 04, 2021 at 08:41:47AM +0200, Jiri Slaby wrote: > On 03. 05. 21, 12:08, Jiri Olsa wrote: > > On Mon, May 03, 2021 at 10:59:44AM +0200, Jiri Slaby wrote: > > > CCing pahole people. > > > > > > On 03. 05. 21, 9:59, Jiri Slaby wrote: > > > > On 03. 05. 21, 8:11, Jiri Slaby wrote: > > > > > > > > > > looks like vfs_truncate did not get into BTF data, > > > > > > > > > > I'll try to reproduce > > > > > > > > > > > > _None_ of the functions are generated by pahole -J from > > > > > > debuginfo on ppc64. debuginfo appears to be correct. Neither > > > > > > pahole -J fs/open.o works correctly. collect_functions in > > > > > > dwarves seems to be defunct on ppc64... "functions" array is > > > > > > bogus (so find_function -- the bsearch -- fails). > > > > > > > > > > It's not that bogus. I forgot an asterisk: > > > > > > #0 find_function (btfe=0x100269f80, name=0x10024631c > > > > > > "stream_open") at > > > > > > /usr/src/debug/dwarves-1.21-1.1.ppc64/btf_encoder.c:350 > > > > > > (gdb) p (*functions)@84 > > > > > > $5 = {{name = 0x7ffff68e0922 ".__se_compat_sys_ftruncate", addr > > > > > > = 75232, size = 72, sh_addr = 65536, generated = false}, { > > > > > > name = 0x7ffff68e019e ".__se_compat_sys_open", addr = 80592, > > > > > > size = 216, sh_addr = 65536, generated = false}, { > > > > > > name = 0x7ffff68e0076 ".__se_compat_sys_openat", addr = > > > > > > 80816, size = 232, sh_addr = 65536, generated = false}, { > > > > > > name = 0x7ffff68e0908 ".__se_compat_sys_truncate", addr = > > > > > > 74304, size = 100, sh_addr = 65536, generated = false}, { > > > > > ... > > > > > > name = 0x7ffff68e0808 ".stream_open", addr = 65824, size = > > > > > > 72, sh_addr = 65536, generated = false}, { > > > > > ... > > > > > > name = 0x7ffff68e0751 ".vfs_truncate", addr = 73392, size = > > > > > > 544, sh_addr = 65536, generated = false}} > > > > > > > > > > The dot makes the difference, of course. The question is why is it > > > > > there? I keep looking into it. Only if someone has an immediate > > > > > idea... > > > > > > > > Well, .vfs_truncate is in .text (and contains an ._mcount call). And > > > > vfs_truncate is in .opd (w/o an ._mcount call). Since setup_functions > > > > excludes all functions without the ._mcount call, is_ftrace_func later > > > > returns false for such functions and they are filtered before the BTF > > > > processing. > > > > > > > > Technically, get_vmlinux_addrs looks at a list of functions between > > > > __start_mcount_loc and __stop_mcount_loc and considers only the listed. > > > > > > > > I don't know what the correct fix is (exclude .opd functions from the > > > > filter?). Neither why cross compiler doesn't fail, nor why ebi v2 avoids > > > > this too. > > > > > > Attaching a patch for pahole which fixes the issue, but I have no idea > > > whether it is the right fix at all. > > > > hi, > > we're considering to disable ftrace filter completely, > > I guess that would solve this issue for ppc as well > > > > https://lore.kernel.org/bpf/20210501001653.x3b4rk4vk4iqv3n7@xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx/ > > Right, the attached patch fixes it for me too. Ah, I just noticed the attachment while replying an earlier message in this thread. Please feel free to add SOB to mine or repost yours and toss mine. Either way works for me.