From: Arnaldo Carvalho de Melo <acme@kernel.org>
To: Ingo Molnar <mingo@kernel.org>
Cc: linux-kernel@vger.kernel.org, linux-perf-users@vger.kernel.org,
Andi Kleen <ak@linux.intel.com>,
Arnaldo Carvalho de Melo <acme@redhat.com>
Subject: [PATCH 15/41] perf script: Support user regs
Date: Tue, 12 Sep 2017 12:10:03 -0300 [thread overview]
Message-ID: <20170912151029.6612-16-acme@kernel.org> (raw)
In-Reply-To: <20170912151029.6612-1-acme@kernel.org>
From: Andi Kleen <ak@linux.intel.com>
Teach perf script to print user regs.
% perf record --user-regs=ip,sp ...
% perf script -F ip,sym,uregs
...
ffffffff9e060c24 native_write_msr ABI:2 SP:0x7ffd0ea06c38 IP:0x7fe77f55b637
ffffffff9e060c24 native_write_msr ABI:2 SP:0x7ffd0ea06c38 IP:0x7fe77f55b637
ffffffff9e060c24 native_write_msr ABI:2 SP:0x7ffd0ea06c38 IP:0x7fe77f55b637
ffffffff9e060c24 native_write_msr ABI:2 SP:0x7ffd0ea06c38 IP:0x7fe77f55b637
ffffffff9e00cc12 intel_pmu_handle_irq ABI:2 SP:0x7ffd0ea06c38 IP:0x7fe77f55b637
v2: Rebased on top of phys-addr patches
Signed-off-by: Andi Kleen <ak@linux.intel.com>
Link: http://lkml.kernel.org/r/20170905184057.26135-1-andi@firstfloor.org
[ Use PRIu64 for regs->abi in print_sample_uregs() ]
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
---
tools/perf/Documentation/perf-script.txt | 4 ++--
tools/perf/builtin-script.c | 30 +++++++++++++++++++++++++++++-
2 files changed, 31 insertions(+), 3 deletions(-)
diff --git a/tools/perf/Documentation/perf-script.txt b/tools/perf/Documentation/perf-script.txt
index 18dfcfa38454..bcc1ba35a2d8 100644
--- a/tools/perf/Documentation/perf-script.txt
+++ b/tools/perf/Documentation/perf-script.txt
@@ -116,8 +116,8 @@ OPTIONS
--fields::
Comma separated list of fields to print. Options are:
comm, tid, pid, time, cpu, event, trace, ip, sym, dso, addr, symoff,
- srcline, period, iregs, brstack, brstacksym, flags, bpf-output, brstackinsn, brstackoff,
- callindent, insn, insnlen, synth, phys_addr.
+ srcline, period, iregs, uregs, brstack, brstacksym, flags, bpf-output, brstackinsn,
+ brstackoff, callindent, insn, insnlen, synth, phys_addr.
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
diff --git a/tools/perf/builtin-script.c b/tools/perf/builtin-script.c
index 3d4c3b5e1868..725dbd3dd104 100644
--- a/tools/perf/builtin-script.c
+++ b/tools/perf/builtin-script.c
@@ -88,6 +88,7 @@ enum perf_output_field {
PERF_OUTPUT_BRSTACKOFF = 1U << 24,
PERF_OUTPUT_SYNTH = 1U << 25,
PERF_OUTPUT_PHYS_ADDR = 1U << 26,
+ PERF_OUTPUT_UREGS = 1U << 27,
};
struct output_option {
@@ -109,6 +110,7 @@ struct output_option {
{.str = "srcline", .field = PERF_OUTPUT_SRCLINE},
{.str = "period", .field = PERF_OUTPUT_PERIOD},
{.str = "iregs", .field = PERF_OUTPUT_IREGS},
+ {.str = "uregs", .field = PERF_OUTPUT_UREGS},
{.str = "brstack", .field = PERF_OUTPUT_BRSTACK},
{.str = "brstacksym", .field = PERF_OUTPUT_BRSTACKSYM},
{.str = "data_src", .field = PERF_OUTPUT_DATA_SRC},
@@ -385,6 +387,11 @@ static int perf_evsel__check_attr(struct perf_evsel *evsel,
PERF_OUTPUT_IREGS))
return -EINVAL;
+ if (PRINT_FIELD(UREGS) &&
+ perf_evsel__check_stype(evsel, PERF_SAMPLE_REGS_USER, "UREGS",
+ PERF_OUTPUT_UREGS))
+ return -EINVAL;
+
if (PRINT_FIELD(PHYS_ADDR) &&
perf_evsel__check_stype(evsel, PERF_SAMPLE_PHYS_ADDR, "PHYS_ADDR",
PERF_OUTPUT_PHYS_ADDR))
@@ -509,6 +516,24 @@ static void print_sample_iregs(struct perf_sample *sample,
}
}
+static void print_sample_uregs(struct perf_sample *sample,
+ struct perf_event_attr *attr)
+{
+ struct regs_dump *regs = &sample->user_regs;
+ uint64_t mask = attr->sample_regs_user;
+ unsigned i = 0, r;
+
+ if (!regs || !regs->regs)
+ return;
+
+ printf(" ABI:%" PRIu64 " ", regs->abi);
+
+ for_each_set_bit(r, (unsigned long *) &mask, sizeof(mask) * 8) {
+ u64 val = regs->regs[i++];
+ printf("%5s:0x%"PRIx64" ", perf_reg_name(r), val);
+ }
+}
+
static void print_sample_start(struct perf_sample *sample,
struct thread *thread,
struct perf_evsel *evsel)
@@ -1444,6 +1469,9 @@ static void process_event(struct perf_script *script,
if (PRINT_FIELD(IREGS))
print_sample_iregs(sample, attr);
+ if (PRINT_FIELD(UREGS))
+ print_sample_uregs(sample, attr);
+
if (PRINT_FIELD(BRSTACK))
print_sample_brstack(sample, thread, attr);
else if (PRINT_FIELD(BRSTACKSYM))
@@ -2739,7 +2767,7 @@ int cmd_script(int argc, const char **argv)
"+field to add and -field to remove."
"Valid types: hw,sw,trace,raw,synth. "
"Fields: comm,tid,pid,time,cpu,event,trace,ip,sym,dso,"
- "addr,symoff,period,iregs,brstack,brstacksym,flags,"
+ "addr,symoff,period,iregs,uregs,brstack,brstacksym,flags,"
"bpf-output,callindent,insn,insnlen,brstackinsn,synth,phys_addr",
parse_output_fields),
OPT_BOOLEAN('a', "all-cpus", &system_wide,
--
2.13.5
next prev parent reply other threads:[~2017-09-12 15:11 UTC|newest]
Thread overview: 42+ messages / expand[flat|nested] mbox.gz Atom feed top
2017-09-12 15:09 [GIT PULL 00/41] perf/core improvements and fixes Arnaldo Carvalho de Melo
2017-09-12 15:09 ` [PATCH 01/41] perf sched timehist: Add pid and tid options Arnaldo Carvalho de Melo
2017-09-12 15:09 ` [PATCH 02/41] perf tools: Support weak groups in 'perf stat' Arnaldo Carvalho de Melo
2017-09-12 15:09 ` [PATCH 03/41] perf vendor events: Support metric_group and no event name in JSON parser Arnaldo Carvalho de Melo
2017-09-12 15:09 ` [PATCH 04/41] perf stat: Factor out generic metric printing Arnaldo Carvalho de Melo
2017-09-12 15:09 ` [PATCH 05/41] perf stat: Print generic metric header even for failed expressions Arnaldo Carvalho de Melo
2017-09-12 15:09 ` [PATCH 06/41] perf pmu: Extract function to get JSON alias map Arnaldo Carvalho de Melo
2017-09-12 15:09 ` [PATCH 07/41] perf stat: Support JSON metrics in perf stat Arnaldo Carvalho de Melo
2017-09-12 15:09 ` [PATCH 08/41] perf list: Add metric groups to perf list Arnaldo Carvalho de Melo
2017-09-12 15:09 ` [PATCH 09/41] perf stat: Don't use ctx for saved values lookup Arnaldo Carvalho de Melo
2017-09-12 15:09 ` [PATCH 10/41] perf stat: Support duration_time for metrics Arnaldo Carvalho de Melo
2017-09-12 15:09 ` [PATCH 11/41] perf stat: Hide internal duration_time counter Arnaldo Carvalho de Melo
2017-09-12 15:10 ` [PATCH 12/41] perf stat: Update walltime_nsecs_stats in interval mode Arnaldo Carvalho de Melo
2017-09-12 15:10 ` [PATCH 13/41] tools include linux: Guard against redefinition of some macros Arnaldo Carvalho de Melo
2017-09-12 15:10 ` [PATCH 14/41] perf record: Support direct --user-regs arguments Arnaldo Carvalho de Melo
2017-09-12 15:10 ` Arnaldo Carvalho de Melo [this message]
2017-09-12 15:10 ` [PATCH 16/41] perf tests: Fix compile when libunwind's unwind.h is available Arnaldo Carvalho de Melo
2017-09-12 15:10 ` [PATCH 17/41] tools lib api: Fix make DEBUG=1 build Arnaldo Carvalho de Melo
2017-09-12 15:10 ` [PATCH 18/41] perf tools: Open perf.data with O_CLOEXEC flag Arnaldo Carvalho de Melo
2017-09-12 15:10 ` [PATCH 19/41] perf tools: Add python-clean target Arnaldo Carvalho de Melo
2017-09-12 15:10 ` [PATCH 20/41] perf ui progress: Make sure we always define step value Arnaldo Carvalho de Melo
2017-09-12 15:10 ` [PATCH 21/41] perf ui progress: Fix progress update Arnaldo Carvalho de Melo
2017-09-12 15:10 ` [PATCH 22/41] perf ui progress: Add ui specific init function Arnaldo Carvalho de Melo
2017-09-12 15:10 ` [PATCH 23/41] perf ui progress: Add size info into progress bar Arnaldo Carvalho de Melo
2017-09-12 15:10 ` [PATCH 24/41] perf tools: Use scandir() to replace readdir() Arnaldo Carvalho de Melo
2017-09-12 15:10 ` [PATCH 25/41] perf config: Check not only section->from_system_config but also item's Arnaldo Carvalho de Melo
2017-09-12 15:10 ` [PATCH 26/41] perf config: Write a config file just once Arnaldo Carvalho de Melo
2017-09-12 15:10 ` [PATCH 27/41] perf config: Allow creating empty config set for config file autogeneration Arnaldo Carvalho de Melo
2017-09-12 15:10 ` [PATCH 28/41] perf tools: Make copyfile_offset() static Arnaldo Carvalho de Melo
2017-09-12 15:10 ` [PATCH 29/41] perf tools: Support running perf binaries with a dash in their name Arnaldo Carvalho de Melo
2017-09-12 15:10 ` [PATCH 30/41] perf stat: Fall weak group back even for EBADF Arnaldo Carvalho de Melo
2017-09-12 15:10 ` [PATCH 31/41] perf vendor events: Add JSON metrics for Broadwell Arnaldo Carvalho de Melo
2017-09-12 15:10 ` [PATCH 32/41] perf vendor events: Add JSON metrics for Skylake Arnaldo Carvalho de Melo
2017-09-12 15:10 ` [PATCH 33/41] perf vendor events: Add JSON metrics for Sandy Bridge Arnaldo Carvalho de Melo
2017-09-12 15:10 ` [PATCH 34/41] perf vendor events: Add JSON metrics for Sandy Bridge EP Arnaldo Carvalho de Melo
2017-09-12 15:10 ` [PATCH 35/41] perf vendor events: Add JSON metrics for Ivy Bridge Arnaldo Carvalho de Melo
2017-09-12 15:10 ` [PATCH 36/41] perf vendor events: Add JSON metrics for Haswell Arnaldo Carvalho de Melo
2017-09-12 15:10 ` [PATCH 37/41] perf vendor events: Add JSON metrics for Ivy Town Arnaldo Carvalho de Melo
2017-09-12 15:10 ` [PATCH 38/41] perf vendor events: Add JSON metrics for Haswell EP Arnaldo Carvalho de Melo
2017-09-12 15:10 ` [PATCH 39/41] perf vendor events: Add JSON metrics for Broadwell Server Arnaldo Carvalho de Melo
2017-09-12 15:10 ` [PATCH 40/41] perf vendor events: Add JSON metrics for Broadwell DE Arnaldo Carvalho de Melo
2017-09-12 15:10 ` [PATCH 41/41] perf vendor events: Add JSON metrics for Skylake server Arnaldo Carvalho de Melo
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20170912151029.6612-16-acme@kernel.org \
--to=acme@kernel.org \
--cc=acme@redhat.com \
--cc=ak@linux.intel.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-perf-users@vger.kernel.org \
--cc=mingo@kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.