builtin-probe.c (2f2fde927243bde5fd106da692efef34be12f81c) builtin-probe.c (4eced2347c447c9409877368fc52478c356b4767)
1/*
2 * builtin-probe.c
3 *
4 * Builtin probe command: Set up probe events by C expression
5 *
6 * Written by Masami Hiramatsu <mhiramat@redhat.com>
7 *
8 * This program is free software; you can redistribute it and/or modify

--- 44 unchanged lines hidden (view full) ---

53 bool show_vars;
54 bool show_ext_vars;
55 bool show_funcs;
56 bool mod_events;
57 int nevents;
58 struct perf_probe_event events[MAX_PROBES];
59 struct strlist *dellist;
60 struct line_range line_range;
1/*
2 * builtin-probe.c
3 *
4 * Builtin probe command: Set up probe events by C expression
5 *
6 * Written by Masami Hiramatsu <mhiramat@redhat.com>
7 *
8 * This program is free software; you can redistribute it and/or modify

--- 44 unchanged lines hidden (view full) ---

53 bool show_vars;
54 bool show_ext_vars;
55 bool show_funcs;
56 bool mod_events;
57 int nevents;
58 struct perf_probe_event events[MAX_PROBES];
59 struct strlist *dellist;
60 struct line_range line_range;
61 const char *target_module;
61 const char *target;
62 int max_probe_points;
63 struct strfilter *filter;
64} params;
65
66/* Parse an event definition. Note that any error must die. */
67static int parse_probe_event(const char *str)
68{
69 struct perf_probe_event *pev = &params.events[params.nevents];

--- 171 unchanged lines hidden (view full) ---

241 "FUNC[@SRC][+OFF|%return|:RL|;PT]|SRC:AL|SRC;PT",
242 "Show accessible variables on PROBEDEF", opt_show_vars),
243 OPT_BOOLEAN('\0', "externs", &params.show_ext_vars,
244 "Show external variables too (with --vars only)"),
245 OPT_STRING('k', "vmlinux", &symbol_conf.vmlinux_name,
246 "file", "vmlinux pathname"),
247 OPT_STRING('s', "source", &symbol_conf.source_prefix,
248 "directory", "path to kernel source"),
62 int max_probe_points;
63 struct strfilter *filter;
64} params;
65
66/* Parse an event definition. Note that any error must die. */
67static int parse_probe_event(const char *str)
68{
69 struct perf_probe_event *pev = &params.events[params.nevents];

--- 171 unchanged lines hidden (view full) ---

241 "FUNC[@SRC][+OFF|%return|:RL|;PT]|SRC:AL|SRC;PT",
242 "Show accessible variables on PROBEDEF", opt_show_vars),
243 OPT_BOOLEAN('\0', "externs", &params.show_ext_vars,
244 "Show external variables too (with --vars only)"),
245 OPT_STRING('k', "vmlinux", &symbol_conf.vmlinux_name,
246 "file", "vmlinux pathname"),
247 OPT_STRING('s', "source", &symbol_conf.source_prefix,
248 "directory", "path to kernel source"),
249 OPT_STRING('m', "module", &params.target_module,
249 OPT_STRING('m', "module", &params.target,
250 "modname|path",
251 "target module name (for online) or path (for offline)"),
252#endif
253 OPT__DRY_RUN(&probe_event_dry_run),
254 OPT_INTEGER('\0', "max-probes", &params.max_probe_points,
255 "Set how many probe points can be found for a probe."),
256 OPT_BOOLEAN('F', "funcs", &params.show_funcs,
257 "Show potential probe-able functions."),

--- 70 unchanged lines hidden (view full) ---

328 }
329 if (params.show_vars) {
330 pr_err(" Error: Don't use --funcs with --vars.\n");
331 usage_with_options(probe_usage, options);
332 }
333 if (!params.filter)
334 params.filter = strfilter__new(DEFAULT_FUNC_FILTER,
335 NULL);
250 "modname|path",
251 "target module name (for online) or path (for offline)"),
252#endif
253 OPT__DRY_RUN(&probe_event_dry_run),
254 OPT_INTEGER('\0', "max-probes", &params.max_probe_points,
255 "Set how many probe points can be found for a probe."),
256 OPT_BOOLEAN('F', "funcs", &params.show_funcs,
257 "Show potential probe-able functions."),

--- 70 unchanged lines hidden (view full) ---

328 }
329 if (params.show_vars) {
330 pr_err(" Error: Don't use --funcs with --vars.\n");
331 usage_with_options(probe_usage, options);
332 }
333 if (!params.filter)
334 params.filter = strfilter__new(DEFAULT_FUNC_FILTER,
335 NULL);
336 ret = show_available_funcs(params.target_module,
336 ret = show_available_funcs(params.target,
337 params.filter);
338 strfilter__delete(params.filter);
339 if (ret < 0)
340 pr_err(" Error: Failed to show functions."
341 " (%d)\n", ret);
342 return ret;
343 }
344

--- 4 unchanged lines hidden (view full) ---

349 " --add/--del.\n");
350 usage_with_options(probe_usage, options);
351 }
352 if (params.show_vars) {
353 pr_err(" Error: Don't use --line with --vars.\n");
354 usage_with_options(probe_usage, options);
355 }
356
337 params.filter);
338 strfilter__delete(params.filter);
339 if (ret < 0)
340 pr_err(" Error: Failed to show functions."
341 " (%d)\n", ret);
342 return ret;
343 }
344

--- 4 unchanged lines hidden (view full) ---

349 " --add/--del.\n");
350 usage_with_options(probe_usage, options);
351 }
352 if (params.show_vars) {
353 pr_err(" Error: Don't use --line with --vars.\n");
354 usage_with_options(probe_usage, options);
355 }
356
357 ret = show_line_range(&params.line_range, params.target_module);
357 ret = show_line_range(&params.line_range, params.target);
358 if (ret < 0)
359 pr_err(" Error: Failed to show lines. (%d)\n", ret);
360 return ret;
361 }
362 if (params.show_vars) {
363 if (params.mod_events) {
364 pr_err(" Error: Don't use --vars with"
365 " --add/--del.\n");
366 usage_with_options(probe_usage, options);
367 }
368 if (!params.filter)
369 params.filter = strfilter__new(DEFAULT_VAR_FILTER,
370 NULL);
371
372 ret = show_available_vars(params.events, params.nevents,
373 params.max_probe_points,
358 if (ret < 0)
359 pr_err(" Error: Failed to show lines. (%d)\n", ret);
360 return ret;
361 }
362 if (params.show_vars) {
363 if (params.mod_events) {
364 pr_err(" Error: Don't use --vars with"
365 " --add/--del.\n");
366 usage_with_options(probe_usage, options);
367 }
368 if (!params.filter)
369 params.filter = strfilter__new(DEFAULT_VAR_FILTER,
370 NULL);
371
372 ret = show_available_vars(params.events, params.nevents,
373 params.max_probe_points,
374 params.target_module,
374 params.target,
375 params.filter,
376 params.show_ext_vars);
377 strfilter__delete(params.filter);
378 if (ret < 0)
379 pr_err(" Error: Failed to show vars. (%d)\n", ret);
380 return ret;
381 }
382#endif

--- 5 unchanged lines hidden (view full) ---

388 pr_err(" Error: Failed to delete events. (%d)\n", ret);
389 return ret;
390 }
391 }
392
393 if (params.nevents) {
394 ret = add_perf_probe_events(params.events, params.nevents,
395 params.max_probe_points,
375 params.filter,
376 params.show_ext_vars);
377 strfilter__delete(params.filter);
378 if (ret < 0)
379 pr_err(" Error: Failed to show vars. (%d)\n", ret);
380 return ret;
381 }
382#endif

--- 5 unchanged lines hidden (view full) ---

388 pr_err(" Error: Failed to delete events. (%d)\n", ret);
389 return ret;
390 }
391 }
392
393 if (params.nevents) {
394 ret = add_perf_probe_events(params.events, params.nevents,
395 params.max_probe_points,
396 params.target_module,
396 params.target,
397 params.force_add);
398 if (ret < 0) {
399 pr_err(" Error: Failed to add events. (%d)\n", ret);
400 return ret;
401 }
402 }
403 return 0;
404}
397 params.force_add);
398 if (ret < 0) {
399 pr_err(" Error: Failed to add events. (%d)\n", ret);
400 return ret;
401 }
402 }
403 return 0;
404}