2025-06-23 10:00:12 +01:00
#!/bin/bash
2017-08-04 14:18:29 -03:00
# Arnaldo Carvalho de Melo <acme@kernel.org>, 2017
2017-08-16 16:20:40 -03:00
perf probe -l 2>& 1 | grep -q probe:vfs_getname
2017-08-04 14:18:29 -03:00
had_vfs_getname = $?
cleanup_probe_vfs_getname( ) {
if [ $had_vfs_getname -eq 1 ] ; then
2018-02-16 15:26:51 -03:00
perf probe -q -d probe:vfs_getname*
2017-08-04 14:18:29 -03:00
fi
}
add_probe_vfs_getname( ) {
2023-07-09 23:57:52 +05:30
add_probe_verbose = $1
2017-08-04 14:18:29 -03:00
if [ $had_vfs_getname -eq 1 ] ; then
2025-05-19 09:27:55 +01:00
result_initname_re = "[[:space:]]+([[:digit:]]+)[[:space:]]+initname.*"
line = $( perf probe -L getname_flags 2>& 1 | grep -E " $result_initname_re " | sed -r " s/ $result_initname_re /\1/ " )
# Search the old regular expressions so that this will
# pass on older kernels as well.
if [ -z " $line " ] ; then
result_filename_re = "[[:space:]]+([[:digit:]]+)[[:space:]]+result->uptr.*"
line = $( perf probe -L getname_flags 2>& 1 | grep -E " $result_filename_re " | sed -r " s/ $result_filename_re /\1/ " )
fi
2024-08-27 15:57:33 -03:00
if [ -z " $line " ] ; then
result_aname_re = "[[:space:]]+([[:digit:]]+)[[:space:]]+result->aname = NULL;"
2024-09-10 17:18:26 -03:00
line = $( perf probe -L getname_flags 2>& 1 | grep -E " $result_aname_re " | sed -r " s/ $result_aname_re /\1/ " )
2024-08-27 15:57:33 -03:00
fi
2025-03-24 15:45:23 +01:00
if [ -z " $line " ] ; then
echo "Could not find probeable line"
return 2
fi
2019-01-04 15:10:00 -03:00
perf probe -q " vfs_getname=getname_flags: ${ line } pathname=result->name:string " || \
2025-03-24 15:45:23 +01:00
perf probe $add_probe_verbose " vfs_getname=getname_flags: ${ line } pathname=filename:ustring " || return 1
2017-08-04 14:18:29 -03:00
fi
}
skip_if_no_debuginfo( ) {
2022-11-18 17:16:39 +08:00
add_probe_vfs_getname -v 2>& 1 | grep -E -q "^(Failed to find the path for the kernel|Debuginfo-analysis is not supported)|(file has no debug information)" && return 2
2017-08-04 14:18:29 -03:00
return 1
}
2023-02-01 23:34:21 +05:30
# check if perf is compiled with libtraceevent support
skip_no_probe_record_support( ) {
if [ $had_vfs_getname -eq 1 ] ; then
2024-09-05 00:31:30 +05:30
perf check feature -q libtraceevent && return 1
return 2
2023-02-01 23:34:21 +05:30
fi
}