> On Aug 12, 2020, at 5:31 AM, Jiri Olsa <jo...@kernel.org> wrote:
>
> Currently when we look for build id within bpf_get_stackid helper
> call, we check the first NOTE section and we fail if build id is
> not there.
>
> However on some system (Fedora) there can be multiple NOTE sections
> in binaries and build id data is not always the first one, like:
>
> $ readelf -a /usr/bin/ls
> ...
> [ 2] .note.gnu.propert NOTE 0000000000000338 00000338
> 0000000000000020 0000000000000000 A 0 0 8358
> [ 3] .note.gnu.build-i NOTE 0000000000000358 00000358
> 0000000000000024 0000000000000000 A 0 0 437c
> [ 4] .note.ABI-tag NOTE 000000000000037c 0000037c
> ...
>
> So the stack_map_get_build_id function will fail on build id retrieval
> and fallback to BPF_STACK_BUILD_ID_IP.
>
> This patch is changing the stack_map_get_build_id code to iterate
> through all the NOTE sections and try to get build id data from
> each of them.
>
> When tracing on sched_switch tracepoint that does bpf_get_stackid
> helper call kernel build, I can see about 60% increase of successful
> build id retrieval. The rest seems fails on -EFAULT.
>
> Signed-off-by: Jiri Olsa <jo...@kernel.org>
LGTM. Thanks for the fix!
Acked-by: Song Liu <songliubrav...@fb.com>