perf-probe bugfixes
cover perf-probe bugfixes
Hi Arnaldo,
Could you pull these patches into your tree too?
These fixes several bugs on perf probe.
Thank you,
---
Masami Hiramatsu (6):
perf probe: Show function entry line as probe-able
perf probe: Support DW_OP_plus_uconst in DW_AT_data_member_location perf probe: Fix line range to show end line
perf probe: Fix a bug that --line range can be overflow perf probe: Fix mis-estimation for shortening filename perf probe: Fix to use correct debugfs path finder
tools/perf/builtin-probe.c | 4 - tools/perf/util/probe-event.c | 51 ++++++++++------ tools/perf/util/probe-event.h | 6 +- tools/perf/util/probe-finder.c | 128 ++++++++++++++++++++++++++++++++-------- 4 files changed, 139 insertions(+), 50 deletions(-)
Signature · 2 lines
Masami Hiramatsu e-mail: [email protected]
PATCH 1/6 perf probe: Fix to use correct debugfs path finder
Instead of using debugfs_path, use debugfs_find_mountpoint() to find actual debugfs path.
---
tools/perf/builtin-probe.c | 4 ---- tools/perf/util/probe-event.c | 12 ++++++++++-- 2 files changed, 10 insertions(+), 6 deletions(-)
tools/perf/builtin-probe.c +0 -4
@@ -40,7 +40,6 @@#include "util/debug.h" #include "util/debugfs.h" #include "util/parse-options.h" -#include "util/parse-events.h" /* For debugfs_path */ #include "util/probe-finder.h" #include "util/probe-event.h"
@@ -205,9 +204,6 @@ int cmd_probe(int argc, const char **argv, const char *prefix __used) !params.show_lines))usage_with_options (probe_usage, options); -if (debugfs_valid_mountpoint (debugfs_path) <0 ) -die ("Failed to find debugfs path." ); -if (params.list_events) {if (params.nevents !=0 || params.dellist) {pr_err (" Error: Don't use --list with --add/--del.\n" );
tools/perf/util/probe-event.c +10 -2
@@ -42,8 +42,8 @@#include "color.h" #include "symbol.h" #include "thread.h" +#include "debugfs.h" #include "trace-event.h" /* For __unused */ -#include "parse-events.h" /* For debugfs_path */ #include "probe-event.h" #include "probe-finder.h"
@@ -1075,10 +1075,18 @@ void clear_kprobe_trace_event(struct kprobe_trace_event *tev)static int open_kprobe_events (bool readwrite) {char buf[PATH_MAX ]; +const char *__debugfs;int ret; - ret =e_snprintf (buf,PATH_MAX ,"%s/../kprobe_events" , debugfs_path); + __debugfs =debugfs_find_mountpoint (); +if (__debugfs ==NULL ) { +pr_warning ("Debugfs is not mounted.\n" ); +return -ENOENT ; + } + + ret =e_snprintf (buf,PATH_MAX ,"%stracing/kprobe_events" , __debugfs);if (ret >=0 ) { +pr_debug ("Opening %s write=%d\n" , buf, readwrite);if (readwrite && !probe_event_dry_run) ret =open (buf,O_RDWR ,O_APPEND );else
Signature · 2 lines
Masami Hiramatsu e-mail: [email protected]
PATCH 2/6 perf probe: Fix mis-estimation for shortening filename
In reply to Masami HiramatsuFix mis-estimation size for making a short filename. Since the buffer size is 32 bytes and there are '@' prefix and '\0' termination, maximum shorten filename length should be
30. This means, before searching '/', it should be 31 bytes.
---
tools/perf/util/probe-event.c | 4 ++-- 1 files changed, 2 insertions(+), 2 deletions(-)
tools/perf/util/probe-event.c +2 -2
@@ -806,12 +806,12 @@ static char *synthesize_perf_probe_point(struct perf_probe_point *pp) goto error; }if (pp->file) { - len =strlen (pp->file) -32 ; + len =strlen (pp->file) -31 ;if (len <0 ) len =0 ; tmp =strchr (pp->file + len,'/' );if (!tmp) - tmp = pp->file + len -1 ; + tmp = pp->file + len; ret =e_snprintf (file,32 ,"@%s" , tmp +1 );if (ret <=0 ) goto error;
Signature · 2 lines
Masami Hiramatsu e-mail: [email protected]