lists.openwall.net | lists / announce owl-users owl-dev john-users john-dev passwdqc-users yescrypt popa3d-users / oss-security kernel-hardening musl sabotage tlsify passwords / crypt-dev xvendor / Bugtraq Full-Disclosure linux-kernel linux-netdev linux-ext4 linux-hardening linux-cve-announce PHC | |
Open Source and information security mailing list archives
| ||
|
Date: Wed, 04 Dec 2013 16:16:36 +0200 From: Adrian Hunter <adrian.hunter@...el.com> To: Adrian Hunter <adrian.hunter@...el.com> CC: Arnaldo Carvalho de Melo <acme@...stprotocols.net>, Peter Zijlstra <a.p.zijlstra@...llo.nl>, Ingo Molnar <mingo@...hat.com>, linux-kernel@...r.kernel.org, David Ahern <dsahern@...il.com>, Frederic Weisbecker <fweisbec@...il.com>, Jiri Olsa <jolsa@...hat.com>, Mike Galbraith <efault@....de>, Namhyung Kim <namhyung@...il.com>, Paul Mackerras <paulus@...ba.org>, Stephane Eranian <eranian@...gle.com>, Andi Kleen <ak@...ux.intel.com> Subject: Re: [PATCH V2 1/7] perf script: Do not call perf_event__preprocess_sample() twice) perf_event__preprocess_sample() is called in process_sample_event(). Instead of calling it again in perf_evsel__print_ip(), pass though the resultant addr_location. Signed-off-by: Adrian Hunter <adrian.hunter@...el.com> --- V2: removed unused 'event' parameter from perf_evsel__print_ip() tools/perf/builtin-script.c | 11 ++++++----- tools/perf/util/session.c | 31 ++++++++++++++----------------- tools/perf/util/session.h | 4 ++-- 3 files changed, 22 insertions(+), 24 deletions(-) diff --git a/tools/perf/builtin-script.c b/tools/perf/builtin-script.c index 952dce9..c555bdd 100644 --- a/tools/perf/builtin-script.c +++ b/tools/perf/builtin-script.c @@ -414,7 +414,8 @@ static void print_sample_bts(union perf_event *event, struct perf_sample *sample, struct perf_evsel *evsel, struct machine *machine, - struct thread *thread) + struct thread *thread, + struct addr_location *al) { struct perf_event_attr *attr = &evsel->attr; @@ -424,7 +425,7 @@ static void print_sample_bts(union perf_event *event, printf(" "); else printf("\n"); - perf_evsel__print_ip(evsel, event, sample, machine, + perf_evsel__print_ip(evsel, sample, machine, al, output[attr->type].print_ip_opts, PERF_MAX_STACK_DEPTH); } @@ -443,7 +444,7 @@ static void print_sample_bts(union perf_event *event, static void process_event(union perf_event *event, struct perf_sample *sample, struct perf_evsel *evsel, struct machine *machine, struct thread *thread, - struct addr_location *al __maybe_unused) + struct addr_location *al) { struct perf_event_attr *attr = &evsel->attr; @@ -458,7 +459,7 @@ static void process_event(union perf_event *event, struct perf_sample *sample, } if (is_bts_event(attr)) { - print_sample_bts(event, sample, evsel, machine, thread); + print_sample_bts(event, sample, evsel, machine, thread, al); return; } @@ -474,7 +475,7 @@ static void process_event(union perf_event *event, struct perf_sample *sample, else printf("\n"); - perf_evsel__print_ip(evsel, event, sample, machine, + perf_evsel__print_ip(evsel, sample, machine, al, output[attr->type].print_ip_opts, PERF_MAX_STACK_DEPTH); } diff --git a/tools/perf/util/session.c b/tools/perf/util/session.c index 4ce146b..8a7da6f 100644 --- a/tools/perf/util/session.c +++ b/tools/perf/util/session.c @@ -1487,11 +1487,10 @@ struct perf_evsel *perf_session__find_first_evtype(struct perf_session *session, return NULL; } -void perf_evsel__print_ip(struct perf_evsel *evsel, union perf_event *event, - struct perf_sample *sample, struct machine *machine, +void perf_evsel__print_ip(struct perf_evsel *evsel, struct perf_sample *sample, + struct machine *machine, struct addr_location *al, unsigned int print_opts, unsigned int stack_depth) { - struct addr_location al; struct callchain_cursor_node *node; int print_ip = print_opts & PRINT_IP_OPT_IP; int print_sym = print_opts & PRINT_IP_OPT_SYM; @@ -1500,15 +1499,10 @@ void perf_evsel__print_ip(struct perf_evsel *evsel, union perf_event *event, int print_oneline = print_opts & PRINT_IP_OPT_ONELINE; char s = print_oneline ? ' ' : '\t'; - if (perf_event__preprocess_sample(event, machine, &al, sample) < 0) { - error("problem processing %d event, skipping it.\n", - event->header.type); - return; - } - if (symbol_conf.use_callchain && sample->callchain) { + struct addr_location node_al; - if (machine__resolve_callchain(machine, evsel, al.thread, + if (machine__resolve_callchain(machine, evsel, al->thread, sample, NULL, NULL, PERF_MAX_STACK_DEPTH) != 0) { if (verbose) @@ -1517,6 +1511,9 @@ void perf_evsel__print_ip(struct perf_evsel *evsel, union perf_event *event, } callchain_cursor_commit(&callchain_cursor); + if (print_symoffset) + node_al = *al; + while (stack_depth) { node = callchain_cursor_current(&callchain_cursor); if (!node) @@ -1531,9 +1528,9 @@ void perf_evsel__print_ip(struct perf_evsel *evsel, union perf_event *event, if (print_sym) { printf(" "); if (print_symoffset) { - al.addr = node->ip; - al.map = node->map; - symbol__fprintf_symname_offs(node->sym, &al, stdout); + node_al.addr = node->ip; + node_al.map = node->map; + symbol__fprintf_symname_offs(node->sym, &node_al, stdout); } else symbol__fprintf_symname(node->sym, stdout); } @@ -1553,7 +1550,7 @@ next: } } else { - if (al.sym && al.sym->ignore) + if (al->sym && al->sym->ignore) return; if (print_ip) @@ -1562,15 +1559,15 @@ next: if (print_sym) { printf(" "); if (print_symoffset) - symbol__fprintf_symname_offs(al.sym, &al, + symbol__fprintf_symname_offs(al->sym, al, stdout); else - symbol__fprintf_symname(al.sym, stdout); + symbol__fprintf_symname(al->sym, stdout); } if (print_dso) { printf(" ("); - map__fprintf_dsoname(al.map, stdout); + map__fprintf_dsoname(al->map, stdout); printf(")"); } } diff --git a/tools/perf/util/session.h b/tools/perf/util/session.h index 50f6409..7e5d4398 100644 --- a/tools/perf/util/session.h +++ b/tools/perf/util/session.h @@ -105,8 +105,8 @@ size_t perf_session__fprintf_nr_events(struct perf_session *session, FILE *fp); struct perf_evsel *perf_session__find_first_evtype(struct perf_session *session, unsigned int type); -void perf_evsel__print_ip(struct perf_evsel *evsel, union perf_event *event, - struct perf_sample *sample, struct machine *machine, +void perf_evsel__print_ip(struct perf_evsel *evsel, struct perf_sample *sample, + struct machine *machine, struct addr_location *al, unsigned int print_opts, unsigned int stack_depth); int perf_session__cpu_bitmap(struct perf_session *session, -- 1.7.11.7 -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@...r.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
Powered by blists - more mailing lists