diff options
author | Adrian Hunter <adrian.hunter@intel.com> | 2014-07-22 09:17:39 -0400 |
---|---|---|
committer | Arnaldo Carvalho de Melo <acme@redhat.com> | 2014-07-25 11:08:34 -0400 |
commit | 9b0d2d875d57d85fdfb35ac27f89951520a8b473 (patch) | |
tree | 2b5007f4e01912ee107f28fa8e4fc16e4448db7f /tools/perf/builtin-script.c | |
parent | f1dd1460a40894b00bbeacd753025e9251ec11bd (diff) |
perf tools: Expose 'addr' functions so they can be reused
Move some functions and functionality related to the use of
'addr' out of builtin-script so they can be reused.
The moved functions are: is_bts_event() and sample_addr_correlates_sym()
and a new function perf_event__preprocess_sample_addr() is created from
bits of print_sample_addr().
perf_event__preprocess_sample_addr() is the equivalent of
perf_event__preprocess_sample() but for 'addr' instead of 'ip'.
Signed-off-by: Adrian Hunter <adrian.hunter@intel.com>
Cc: David Ahern <dsahern@gmail.com>
Cc: Frederic Weisbecker <fweisbec@gmail.com>
Cc: Jiri Olsa <jolsa@redhat.com>
Cc: Namhyung Kim <namhyung@gmail.com>
Cc: Paul Mackerras <paulus@samba.org>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: Stephane Eranian <eranian@google.com>
Link: http://lkml.kernel.org/r/1406035081-14301-31-git-send-email-adrian.hunter@intel.com
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
Diffstat (limited to 'tools/perf/builtin-script.c')
-rw-r--r-- | tools/perf/builtin-script.c | 34 |
1 files changed, 1 insertions, 33 deletions
diff --git a/tools/perf/builtin-script.c b/tools/perf/builtin-script.c index 582da97872e5..f57035b89c15 100644 --- a/tools/perf/builtin-script.c +++ b/tools/perf/builtin-script.c | |||
@@ -358,27 +358,6 @@ static void print_sample_start(struct perf_sample *sample, | |||
358 | } | 358 | } |
359 | } | 359 | } |
360 | 360 | ||
361 | static bool is_bts_event(struct perf_event_attr *attr) | ||
362 | { | ||
363 | return ((attr->type == PERF_TYPE_HARDWARE) && | ||
364 | (attr->config & PERF_COUNT_HW_BRANCH_INSTRUCTIONS) && | ||
365 | (attr->sample_period == 1)); | ||
366 | } | ||
367 | |||
368 | static bool sample_addr_correlates_sym(struct perf_event_attr *attr) | ||
369 | { | ||
370 | if ((attr->type == PERF_TYPE_SOFTWARE) && | ||
371 | ((attr->config == PERF_COUNT_SW_PAGE_FAULTS) || | ||
372 | (attr->config == PERF_COUNT_SW_PAGE_FAULTS_MIN) || | ||
373 | (attr->config == PERF_COUNT_SW_PAGE_FAULTS_MAJ))) | ||
374 | return true; | ||
375 | |||
376 | if (is_bts_event(attr)) | ||
377 | return true; | ||
378 | |||
379 | return false; | ||
380 | } | ||
381 | |||
382 | static void print_sample_addr(union perf_event *event, | 361 | static void print_sample_addr(union perf_event *event, |
383 | struct perf_sample *sample, | 362 | struct perf_sample *sample, |
384 | struct machine *machine, | 363 | struct machine *machine, |
@@ -386,24 +365,13 @@ static void print_sample_addr(union perf_event *event, | |||
386 | struct perf_event_attr *attr) | 365 | struct perf_event_attr *attr) |
387 | { | 366 | { |
388 | struct addr_location al; | 367 | struct addr_location al; |
389 | u8 cpumode = event->header.misc & PERF_RECORD_MISC_CPUMODE_MASK; | ||
390 | 368 | ||
391 | printf("%16" PRIx64, sample->addr); | 369 | printf("%16" PRIx64, sample->addr); |
392 | 370 | ||
393 | if (!sample_addr_correlates_sym(attr)) | 371 | if (!sample_addr_correlates_sym(attr)) |
394 | return; | 372 | return; |
395 | 373 | ||
396 | thread__find_addr_map(thread, machine, cpumode, MAP__FUNCTION, | 374 | perf_event__preprocess_sample_addr(event, sample, machine, thread, &al); |
397 | sample->addr, &al); | ||
398 | if (!al.map) | ||
399 | thread__find_addr_map(thread, machine, cpumode, MAP__VARIABLE, | ||
400 | sample->addr, &al); | ||
401 | |||
402 | al.cpu = sample->cpu; | ||
403 | al.sym = NULL; | ||
404 | |||
405 | if (al.map) | ||
406 | al.sym = map__find_symbol(al.map, al.addr, NULL); | ||
407 | 375 | ||
408 | if (PRINT_FIELD(SYM)) { | 376 | if (PRINT_FIELD(SYM)) { |
409 | printf(" "); | 377 | printf(" "); |