linux/tools/perf/util
Wang Nan 03e01f5687 perf bpf: Allow BPF program config probing options
By extending the syntax of BPF object section names, this patch allows users to
config probing options like what they can do in 'perf probe'.

The error message in 'perf probe' is also updated.

Test result:

For following BPF file test_probe_glob.c:

  # cat test_probe_glob.c
  __attribute__((section("inlines=no;func=SyS_dup?"), used))

  int func(void *ctx)
  {
	  return 1;
  }

  char _license[] __attribute__((section("license"), used)) = "GPL";
  int _version __attribute__((section("version"), used)) = 0x40300;
  #
  # ./perf record  -e ./test_probe_glob.c ls /
  ...
  [ perf record: Woken up 1 times to write data ]
  [ perf record: Captured and wrote 0.013 MB perf.data ]
  # ./perf evlist
  perf_bpf_probe:func_1
  perf_bpf_probe:func

After changing "inlines=no" to "inlines=yes":

  # ./perf record  -e ./test_probe_glob.c ls /
  ...
  [ perf record: Woken up 2 times to write data ]
  [ perf record: Captured and wrote 0.013 MB perf.data ]
  # ./perf evlist
  perf_bpf_probe:func_3
  perf_bpf_probe:func_2
  perf_bpf_probe:func_1
  perf_bpf_probe:func

Then test 'force':

Use following program:

  # cat test_probe_force.c
  __attribute__((section("func=sys_write"), used))

  int funca(void *ctx)
  {
	  return 1;
  }

  __attribute__((section("force=yes;func=sys_write"), used))

  int funcb(void *ctx)
  {
  	return 1;
  }

  char _license[] __attribute__((section("license"), used)) = "GPL";
  int _version __attribute__((section("version"), used)) = 0x40300;
  #

  # perf record -e ./test_probe_force.c usleep 1
  Error: event "func" already exists.
   Hint: Remove existing event by 'perf probe -d'
       or force duplicates by 'perf probe -f'
       or set 'force=yes' in BPF source.
  event syntax error: './test_probe_force.c'
                       \___ Probe point exist. Try 'perf probe -d "*"' and set 'force=yes'

  (add -v to see detail)
  ...

Then replace 'force=no' to 'force=yes':

  # vim test_probe_force.c
  # perf record -e ./test_probe_force.c usleep 1
  [ perf record: Woken up 1 times to write data ]
  [ perf record: Captured and wrote 0.017 MB perf.data ]
  # perf evlist
  perf_bpf_probe:func_1
  perf_bpf_probe:func
  #

Signed-off-by: Wang Nan <wangnan0@huawei.com>
Tested-by: Arnaldo Carvalho de Melo <acme@redhat.com>
Cc: Alexei Starovoitov <ast@kernel.org>
Cc: Masami Hiramatsu <masami.hiramatsu.pt@hitachi.com>
Cc: Zefan Li <lizefan@huawei.com>
Cc: pi3orama@163.com
Link: http://lkml.kernel.org/r/1447675815-166222-7-git-send-email-wangnan0@huawei.com
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
2015-11-18 17:51:04 -03:00
..
include tools: Adopt memdup() from tools/perf, moving it to tools/lib/string.c 2015-11-18 17:51:02 -03:00
intel-pt-decoder perf intel-pt: Make logging slightly more efficient 2015-09-28 16:45:26 -03:00
scripting-engines perf scripting python: Allow for max_stack greater than PERF_MAX_STACK_DEPTH 2015-09-28 17:09:12 -03:00
abspath.c
alias.c
annotate.c perf annotate: Support full source file paths for srcline fix 2015-11-11 18:41:30 -03:00
annotate.h perf annotate: Fix sizeof_sym_hist overflow issue 2015-10-05 16:15:38 -03:00
auxtrace.c perf auxtrace: Add option to synthesize branch stacks on samples 2015-09-28 16:53:44 -03:00
auxtrace.h perf auxtrace: Add option to synthesize branch stacks on samples 2015-09-28 16:53:44 -03:00
bitmap.c
bpf-loader.c perf bpf: Allow BPF program config probing options 2015-11-18 17:51:04 -03:00
bpf-loader.h perf bpf: Allow BPF program attach to uprobe events 2015-11-18 17:51:03 -03:00
Build tools: Adopt memdup() from tools/perf, moving it to tools/lib/string.c 2015-11-18 17:51:02 -03:00
build-id.c perf buildid-list: Requires ordered events 2015-11-13 12:22:04 -03:00
build-id.h perf buildid: Introduce sysfs/filename__sprintf_build_id 2015-08-28 14:53:50 -03:00
cache.h
callchain.c perf tools: Defaults to 'caller' callchain order only if --children is enabled 2015-10-22 15:40:11 -03:00
callchain.h perf tools: Improve call graph documents and help messages 2015-10-22 16:23:19 -03:00
cgroup.c
cgroup.h
cloexec.c perf bench numa: Fix to show proper convergence stats 2015-06-25 12:28:35 -03:00
cloexec.h perf tools: Fix build errors with mipsel-linux-uclibc compiler 2015-08-05 16:56:16 -03:00
color.c perf tools: Do not include escape sequences in color_vfprintf return 2015-08-05 16:46:06 -03:00
color.h perf tools: Remove trail argument to color vsprintf 2015-08-05 16:44:02 -03:00
comm.c perf comm: Use atomic.h for refcounting 2015-05-27 12:21:43 -03:00
comm.h
config.c perf tools: Introduce llvm config options 2015-08-07 10:16:59 -03:00
counts.c perf stat: Move perf_counts struct and functions into separate object 2015-08-08 14:16:49 -03:00
counts.h perf stat: Move perf_counts struct and functions into separate object 2015-08-08 14:16:49 -03:00
cpumap.c perf cpu_map: Add cpu_map__empty_new function 2015-10-27 15:05:36 -03:00
cpumap.h perf cpu_map: Add cpu_map__empty_new function 2015-10-27 15:05:36 -03:00
ctype.c
data-convert-bt.c
data-convert-bt.h
data.c
data.h
db-export.c perf db-export: Fix thread ref-counting 2015-05-29 12:43:39 -03:00
db-export.h
debug.c perf tools: Introduce veprintf 2015-08-06 15:30:38 -03:00
debug.h perf tools: Introduce veprintf 2015-08-06 15:30:38 -03:00
dso.c perf symbols: Fix dso lookup by long name and missing buildids 2015-11-13 11:14:36 -03:00
dso.h perf symbols: Fix dso lookup by long name and missing buildids 2015-11-13 11:14:36 -03:00
dwarf-aux.c perf probe: Fix to add missed brace around if block 2015-08-13 14:51:26 -03:00
dwarf-aux.h
env.c perf env: Introduce read_cpu_topology_map() method 2015-09-14 12:50:28 -03:00
env.h perf env: Introduce read_cpu_topology_map() method 2015-09-14 12:50:28 -03:00
environment.c
event.c perf tools: Fix handling read result using a signed variable 2015-10-06 18:04:59 -03:00
event.h perf session: Warn when AUX data has been lost 2015-09-28 16:51:33 -03:00
evlist.c perf tools: Export perf_event_attr__set_max_precise_ip() 2015-10-05 16:16:20 -03:00
evlist.h perf tools: Export perf_event_attr__set_max_precise_ip() 2015-10-05 16:16:20 -03:00
evsel.c perf bpf: Attach eBPF filter to perf event 2015-10-29 17:16:22 -03:00
evsel.h perf bpf: Attach eBPF filter to perf event 2015-10-29 17:16:22 -03:00
exec_cmd.c
exec_cmd.h
find-vdso-map.c
generate-cmdlist.sh
header.c Merge branch 'perf/urgent' into perf/core, to resolve a conflict 2015-09-16 09:19:56 +02:00
header.h perf env: Move perf_env out of header.h and session.c into separate object 2015-09-14 12:50:19 -03:00
help.c
help.h
hist.c perf tools: Setup proper width for symbol_iaddr field 2015-10-05 16:33:41 -03:00
hist.h perf tools: Add support for sorting on the iaddr 2015-10-05 16:32:00 -03:00
intel-bts.c perf tools: Fix use of wrong event when processing exit events 2015-09-02 17:46:26 -03:00
intel-bts.h perf tools: Add Intel BTS support 2015-08-21 11:34:10 -03:00
intel-pt.c perf machine: Add method for common kernel_map(FUNCTION) operation 2015-09-30 18:34:29 -03:00
intel-pt.h perf tools: Pass Intel PT information for decoding MTC and CYC 2015-08-24 17:46:43 -03:00
intlist.c
intlist.h
kvm-stat.h
levenshtein.c
levenshtein.h
llvm-utils.c perf tools: Make fetch_kernel_version() publicly available 2015-11-06 15:57:18 -03:00
llvm-utils.h perf tests: Add LLVM test for eBPF on-the-fly compiling 2015-08-07 10:57:24 -03:00
lzma.c
machine.c perf symbols: Fix dso lookup by long name and missing buildids 2015-11-13 11:14:36 -03:00
machine.h perf machine: Add method for common kernel_map(FUNCTION) operation 2015-09-30 18:34:29 -03:00
map.c perf tools: Insert split maps correctly into origin group 2015-11-05 11:39:38 -03:00
map.h perf maps: Introduce maps__find_symbol_by_name() 2015-09-30 18:34:25 -03:00
ordered-events.c perf ordered_events: Clear the progress bar at the end of a flush 2015-08-24 17:16:22 -03:00
ordered-events.h
pager.c
parse-branch-options.c perf record: Add ability to sample call branches 2015-10-20 10:30:55 +02:00
parse-branch-options.h perf tools: Move branch option parsing to own file 2015-05-27 21:02:17 -03:00
parse-events.c perf bpf: Improve BPF related error messages 2015-11-06 17:14:20 -03:00
parse-events.h perf tools: Compile scriptlets to BPF objects when passing '.c' to --event 2015-10-29 17:16:23 -03:00
parse-events.l perf tools: Compile scriptlets to BPF objects when passing '.c' to --event 2015-10-29 17:16:23 -03:00
parse-events.y perf tools: Compile scriptlets to BPF objects when passing '.c' to --event 2015-10-29 17:16:23 -03:00
parse-options.c perf tools: Search for more options when passing args to -h 2015-10-27 17:35:58 -03:00
parse-options.h perf tools: Introduce usage_with_options_msg() 2015-10-27 09:28:44 -03:00
parse-regs-options.c perf record: Add ability to name registers to record 2015-08-31 18:01:33 -03:00
parse-regs-options.h perf record: Add ability to name registers to record 2015-08-31 18:01:33 -03:00
path.c
PERF-VERSION-GEN
perf_regs.c perf tools: Fix build break on powerpc due to sample_reg_masks 2015-09-30 18:34:27 -03:00
perf_regs.h perf tools: Fix build break on powerpc due to sample_reg_masks 2015-09-30 18:34:27 -03:00
pmu.c perf list: Honour 'event_glob' whem printing selectable PMUs 2015-10-02 15:28:16 -03:00
pmu.h perf tools: Add perf_pmu__format_bits() 2015-08-06 16:49:01 -03:00
pmu.l
pmu.y
probe-event.c perf bpf: Allow BPF program config probing options 2015-11-18 17:51:04 -03:00
probe-event.h perf probe: Export init/exit_probe_symbol_maps() 2015-09-15 09:48:32 -03:00
probe-file.c perf probe: Verify parameters in two functions 2015-11-11 18:41:32 -03:00
probe-file.h perf probe: Print deleted events in cmd_probe() 2015-09-04 12:43:44 -03:00
probe-finder.c perf probe: Clear probe_trace_event when add_probe_trace_event() fails 2015-11-13 12:28:09 -03:00
probe-finder.h
pstack.c
pstack.h
python-ext-sources perf stat: Move perf_counts struct and functions into separate object 2015-08-08 14:16:49 -03:00
python.c perf python: Support the PERF_RECORD_SWITCH event 2015-10-07 19:41:50 -03:00
quote.c
quote.h
rblist.c
rblist.h
record.c perf tools: Add a helper function to probe whether cpu-wide tracing is possible 2015-08-17 11:08:37 -03:00
run-command.c
run-command.h
session.c perf session: Add missing newlines to some pr_err() calls 2015-11-11 18:41:31 -03:00
session.h perf top: Register idle thread 2015-10-01 09:54:33 -03:00
setup.py
sigchain.c
sigchain.h
sort.c perf tools: Introduce hpp_dimension__add_output function 2015-10-06 18:04:59 -03:00
sort.h perf tools: Introduce hpp_dimension__add_output function 2015-10-06 18:04:59 -03:00
srcline.c perf tools: Always use non inlined file name for 'srcfile' sort key 2015-09-02 16:30:46 -03:00
stat-shadow.c perf stat: Move sw clock metrics printout to stat-shadow 2015-11-04 15:11:41 -03:00
stat.c perf cpu_map: Add data arg to cpu_map__build_map callback 2015-10-19 18:04:01 -03:00
stat.h perf stat: Add AGGR_UNSET mode 2015-10-19 18:02:07 -03:00
strbuf.c perf tools: Introduce usage_with_options_msg() 2015-10-27 09:28:44 -03:00
strbuf.h perf tools: Introduce usage_with_options_msg() 2015-10-27 09:28:44 -03:00
strfilter.c
strfilter.h
string.c tools: Adopt memdup() from tools/perf, moving it to tools/lib/string.c 2015-11-18 17:51:02 -03:00
strlist.c perf strlist: Make parse_list() private 2015-07-20 14:51:07 -03:00
strlist.h perf strlist: Make parse_list() private 2015-07-20 14:51:07 -03:00
svghelper.c perf tools: Add reference counting for cpu_map object 2015-06-25 15:15:50 -03:00
svghelper.h
symbol-elf.c perf tools: Fix copying of /proc/kcore 2015-09-25 10:45:50 -03:00
symbol-minimal.c perf symbols: Fix type error when reading a build-id 2015-10-28 10:02:00 -03:00
symbol.c perf symbols: Allow forcing reading of non-root owned files by root 2015-11-12 18:58:18 -03:00
symbol.h perf symbols: Allow forcing reading of non-root owned files by root 2015-11-12 18:58:18 -03:00
target.c
target.h
thread-stack.c perf tools: Ensure thread-stack is flushed 2015-06-19 16:03:33 -03:00
thread-stack.h perf tools: Ensure thread-stack is flushed 2015-06-19 16:03:33 -03:00
thread.c perf tools: Avoid deadlock when map_groups are broken 2015-08-19 14:15:09 -03:00
thread.h
thread_map.c perf/core improvements and fixes: 2015-07-21 07:58:06 +02:00
thread_map.h perf thrad_map: Add comm string into array 2015-06-26 11:07:01 -03:00
tool.h perf tools: Add new PERF_RECORD_SWITCH event 2015-07-23 22:51:13 -03:00
top.c
top.h
trace-event-info.c tools lib api fs: Move tracing_path interface into api/fs/tracing_path.c 2015-09-04 12:00:45 -03:00
trace-event-parse.c perf tools: Stop reading the kallsyms data from perf.data 2015-07-23 22:51:11 -03:00
trace-event-read.c perf tools: Stop reading the kallsyms data from perf.data 2015-07-23 22:51:11 -03:00
trace-event-scripting.c
trace-event.c perf evsel: Propagate error info from tp_format 2015-09-15 09:48:33 -03:00
trace-event.h perf scripting python: Allow for max_stack greater than PERF_MAX_STACK_DEPTH 2015-09-28 17:09:12 -03:00
tsc.c
tsc.h
unwind-libdw.c
unwind-libdw.h
unwind-libunwind.c perf unwind: Pass symbol source to libunwind 2015-10-29 17:48:38 -03:00
unwind.h
usage.c perf test: Suppress libtraceevent warnings 2015-10-19 14:58:10 -03:00
util.c perf tools: Make fetch_kernel_version() publicly available 2015-11-06 15:57:18 -03:00
util.h perf bpf: Improve BPF related error messages 2015-11-06 17:14:20 -03:00
values.c
values.h
vdso.c perf tools: Fix lockup using 32-bit compat vdso 2015-07-07 11:05:08 -03:00
vdso.h perf machine: Fix up vdso methods names 2015-05-29 12:43:44 -03:00
wrapper.c
xyarray.c perf tools: Introduce xyarray__reset function 2015-06-16 10:34:39 -03:00
xyarray.h perf tools: Introduce xyarray__reset function 2015-06-16 10:34:39 -03:00
zlib.c