From: Wang Nan [mailto:wangn...@huawei.com] > >If libelf unable to open debuginfo for an offline module but the ko has >symtab, something unexpected may happen. > > # rm -rf ~/.debug/ > # mv /usr/lib64/elfutils/libebl_x86_64.so{,.bak}
Please do give more possible usecase. removing libebl is crazy, and broken environment. If you'd like to use perf probe without debuginfo, make NO_DWARF=1 or strip the target binary. > # ./perf probe -m /home/wangnan/kmodule/mymodule.ko my_func > [mymodule] with build id 326ab42550ef3d24944f53c817533728367effeb not found, > continuing without symbols > Failed to find symbol my_func in /home/wangnan/kmodule/mymodule.ko > Error: Failed to add events > # ./perf buildid-cache -a ./mymodule.ko > # ./perf probe -m /home/wangnan/kmodule/mymodule.ko my_func > Added new event: > probe:my_func (on my_func in /home/wangnan/kmodule/mymodule.ko) > > You can now use it in all perf tools, such as: > > perf record -e probe:my_func -aR sleep 1 > >In the above example, probe fails if it isn't in buildid-cache. However, >user would expect it success in both case because perf is able to find >probe points actually. > >The problem is because perf won't utilize module's full path if it >failed to open debuginfo. In > convert_to_probe_trace_events -> > find_probe_trace_events_from_map -> > get_target_map -> > kernel_get_module_map -> > machine__findnew_module_map -> > map_groups__find_by_name > >map_groups__find_by_name() is able to find the map of that module, but >this information is found from /proc/modules before it knows the real >path of the offline module. Therefore, the map->dso->long_name is >set to something like '[mymodule]', which prevents dso__load() find >the real path of the module file. Hmm, if so, it should be fixed in map or machine, not in probe-event.c. Thanks,