Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 257032
b: refs/heads/master
c: 610723f
h: refs/heads/master
v: v3
  • Loading branch information
David Ahern authored and Arnaldo Carvalho de Melo committed Jun 2, 2011
1 parent b643a7b commit ac0d05a
Show file tree
Hide file tree
Showing 5 changed files with 25 additions and 11 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: 787bef174f055343c69a9639e6e05a564980ed4c
refs/heads/master: 610723f24eeb842025178a6722fa9108c4e157b6
2 changes: 1 addition & 1 deletion trunk/tools/perf/Documentation/perf-script.txt
Original file line number Diff line number Diff line change
Expand Up @@ -115,7 +115,7 @@ OPTIONS
-f::
--fields::
Comma separated list of fields to print. Options are:
comm, tid, pid, time, cpu, event, trace, ip, sym. Field
comm, tid, pid, time, cpu, event, trace, ip, sym, dso. Field
list can be prepended with the type, trace, sw or hw,
to indicate to which event type the field list applies.
e.g., -f sw:comm,tid,time,ip,sym and -f trace:time,cpu,trace
Expand Down
17 changes: 12 additions & 5 deletions trunk/tools/perf/builtin-script.c
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,7 @@ enum perf_output_field {
PERF_OUTPUT_TRACE = 1U << 6,
PERF_OUTPUT_IP = 1U << 7,
PERF_OUTPUT_SYM = 1U << 8,
PERF_OUTPUT_DSO = 1U << 9,
};

struct output_option {
Expand All @@ -47,6 +48,7 @@ struct output_option {
{.str = "trace", .field = PERF_OUTPUT_TRACE},
{.str = "ip", .field = PERF_OUTPUT_IP},
{.str = "sym", .field = PERF_OUTPUT_SYM},
{.str = "dso", .field = PERF_OUTPUT_DSO},
};

/* default set to maintain compatibility with current format */
Expand All @@ -63,7 +65,7 @@ static struct {
.fields = PERF_OUTPUT_COMM | PERF_OUTPUT_TID |
PERF_OUTPUT_CPU | PERF_OUTPUT_TIME |
PERF_OUTPUT_EVNAME | PERF_OUTPUT_IP |
PERF_OUTPUT_SYM,
PERF_OUTPUT_SYM | PERF_OUTPUT_DSO,

.invalid_fields = PERF_OUTPUT_TRACE,
},
Expand All @@ -74,7 +76,7 @@ static struct {
.fields = PERF_OUTPUT_COMM | PERF_OUTPUT_TID |
PERF_OUTPUT_CPU | PERF_OUTPUT_TIME |
PERF_OUTPUT_EVNAME | PERF_OUTPUT_IP |
PERF_OUTPUT_SYM,
PERF_OUTPUT_SYM | PERF_OUTPUT_DSO,

.invalid_fields = PERF_OUTPUT_TRACE,
},
Expand All @@ -93,7 +95,7 @@ static struct {
.fields = PERF_OUTPUT_COMM | PERF_OUTPUT_TID |
PERF_OUTPUT_CPU | PERF_OUTPUT_TIME |
PERF_OUTPUT_EVNAME | PERF_OUTPUT_IP |
PERF_OUTPUT_SYM,
PERF_OUTPUT_SYM | PERF_OUTPUT_DSO,

.invalid_fields = PERF_OUTPUT_TRACE,
},
Expand Down Expand Up @@ -176,6 +178,11 @@ static int perf_evsel__check_attr(struct perf_evsel *evsel,
"No addresses to convert to symbols.\n");
return -EINVAL;
}
if (PRINT_FIELD(DSO) && !PRINT_FIELD(IP)) {
pr_err("Display of DSO requested but IP is not selected.\n"
"No addresses to convert to dso.\n");
return -EINVAL;
}

if ((PRINT_FIELD(PID) || PRINT_FIELD(TID)) &&
perf_event_attr__check_stype(attr, PERF_SAMPLE_TID, "TID",
Expand Down Expand Up @@ -304,7 +311,7 @@ static void process_event(union perf_event *event __unused,
else
printf("\n");
perf_session__print_ip(event, sample, session,
PRINT_FIELD(SYM));
PRINT_FIELD(SYM), PRINT_FIELD(DSO));
}

printf("\n");
Expand Down Expand Up @@ -996,7 +1003,7 @@ static const struct option options[] = {
OPT_STRING(0, "symfs", &symbol_conf.symfs, "directory",
"Look for files with symbols relative to this directory"),
OPT_CALLBACK('f', "fields", NULL, "str",
"comma separated output fields prepend with 'type:'. Valid types: hw,sw,trace,raw. Fields: comm,tid,pid,time,cpu,event,trace,ip,sym",
"comma separated output fields prepend with 'type:'. Valid types: hw,sw,trace,raw. Fields: comm,tid,pid,time,cpu,event,trace,ip,sym,dso",
parse_output_fields),

OPT_END()
Expand Down
13 changes: 10 additions & 3 deletions trunk/tools/perf/util/session.c
Original file line number Diff line number Diff line change
Expand Up @@ -1205,7 +1205,7 @@ struct perf_evsel *perf_session__find_first_evtype(struct perf_session *session,
void perf_session__print_ip(union perf_event *event,
struct perf_sample *sample,
struct perf_session *session,
int print_sym)
int print_sym, int print_dso)
{
struct addr_location al;
const char *symname, *dsoname;
Expand Down Expand Up @@ -1241,12 +1241,15 @@ void perf_session__print_ip(union perf_event *event,
else
symname = "";

printf(" %s", symname);
}
if (print_dso) {
if (node->map && node->map->dso && node->map->dso->name)
dsoname = node->map->dso->name;
else
dsoname = "";

printf(" %s (%s)", symname, dsoname);
printf(" (%s)", dsoname);
}
printf("\n");

Expand All @@ -1261,12 +1264,16 @@ void perf_session__print_ip(union perf_event *event,
else
symname = "";

printf(" %s", symname);
}

if (print_dso) {
if (al.map && al.map->dso && al.map->dso->name)
dsoname = al.map->dso->name;
else
dsoname = "";

printf(" %s (%s)", symname, dsoname);
printf(" (%s)", dsoname);
}
}
}
2 changes: 1 addition & 1 deletion trunk/tools/perf/util/session.h
Original file line number Diff line number Diff line change
Expand Up @@ -170,6 +170,6 @@ struct perf_evsel *perf_session__find_first_evtype(struct perf_session *session,
void perf_session__print_ip(union perf_event *event,
struct perf_sample *sample,
struct perf_session *session,
int print_sym);
int print_sym, int print_dso);

#endif /* __PERF_SESSION_H */

0 comments on commit ac0d05a

Please sign in to comment.