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: Thu, 2 Nov 2017 11:15:57 -0700 From: Stephane Eranian <eranian@...gle.com> To: linux-kernel@...r.kernel.org Cc: acme@...hat.com, peterz@...radead.org, mingo@...e.hu, ak@...ux.intel.com, kan.liang@...el.com, jolsa@...hat.com Subject: [PATCH v2 3/5] perf/tools: add support for PERF_SAMPLE_SKID_IP This patch adds the support code to handle the PERF_SAMPLE_SKID_IP record type. Signed-off-by: Stephane Eranian <eranian@...gle.com> --- tools/include/uapi/linux/perf_event.h | 4 +++- tools/perf/perf.h | 1 + tools/perf/util/event.h | 1 + tools/perf/util/evsel.c | 10 ++++++++++ tools/perf/util/session.c | 3 +++ 5 files changed, 18 insertions(+), 1 deletion(-) diff --git a/tools/include/uapi/linux/perf_event.h b/tools/include/uapi/linux/perf_event.h index 140ae638cfd6..fd0f5111e433 100644 --- a/tools/include/uapi/linux/perf_event.h +++ b/tools/include/uapi/linux/perf_event.h @@ -140,8 +140,9 @@ enum perf_event_sample_format { PERF_SAMPLE_TRANSACTION = 1U << 17, PERF_SAMPLE_REGS_INTR = 1U << 18, PERF_SAMPLE_PHYS_ADDR = 1U << 19, + PERF_SAMPLE_SKID_IP = 1U << 20, - PERF_SAMPLE_MAX = 1U << 20, /* non-ABI */ + PERF_SAMPLE_MAX = 1U << 21, /* non-ABI */ }; /* @@ -816,6 +817,7 @@ enum perf_event_type { * { u64 abi; # enum perf_sample_regs_abi * u64 regs[weight(mask)]; } && PERF_SAMPLE_REGS_INTR * { u64 phys_addr;} && PERF_SAMPLE_PHYS_ADDR + * { u64 skid_ip; } && PERF_SAMPLE_SKID_IP * }; */ PERF_RECORD_SAMPLE = 9, diff --git a/tools/perf/perf.h b/tools/perf/perf.h index fbb0a9cd0ac6..b7637d6b34ec 100644 --- a/tools/perf/perf.h +++ b/tools/perf/perf.h @@ -59,6 +59,7 @@ struct record_opts { bool tail_synthesize; bool overwrite; bool ignore_missing_thread; + bool skid_ip; unsigned int freq; unsigned int mmap_pages; unsigned int auxtrace_mmap_pages; diff --git a/tools/perf/util/event.h b/tools/perf/util/event.h index d6cbb0a0d919..e4165e824fdf 100644 --- a/tools/perf/util/event.h +++ b/tools/perf/util/event.h @@ -201,6 +201,7 @@ struct perf_sample { u32 raw_size; u64 data_src; u64 phys_addr; + u64 skid_ip; u32 flags; u16 insn_len; u8 cpumode; diff --git a/tools/perf/util/evsel.c b/tools/perf/util/evsel.c index f894893c203d..08549bd92c05 100644 --- a/tools/perf/util/evsel.c +++ b/tools/perf/util/evsel.c @@ -980,6 +980,9 @@ void perf_evsel__config(struct perf_evsel *evsel, struct record_opts *opts, if (opts->sample_weight) perf_evsel__set_sample_bit(evsel, WEIGHT); + if (opts->skid_ip) + perf_evsel__set_sample_bit(evsel, SKID_IP); + attr->task = track; attr->mmap = track; attr->mmap2 = track && !perf_missing_features.mmap2; @@ -1478,6 +1481,7 @@ static void __p_sample_type(char *buf, size_t size, u64 value) bit_name(BRANCH_STACK), bit_name(REGS_USER), bit_name(STACK_USER), bit_name(IDENTIFIER), bit_name(REGS_INTR), bit_name(DATA_SRC), bit_name(WEIGHT), bit_name(PHYS_ADDR), + bit_name(SKID_IP), { .name = NULL, } }; #undef bit_name @@ -2225,6 +2229,12 @@ int perf_evsel__parse_sample(struct perf_evsel *evsel, union perf_event *event, array++; } + data->skid_ip = 0; + if (type & PERF_SAMPLE_SKID_IP) { + data->skid_ip = *array; + array++; + } + return 0; } diff --git a/tools/perf/util/session.c b/tools/perf/util/session.c index b3fd62f7e4c9..9390cedee6f4 100644 --- a/tools/perf/util/session.c +++ b/tools/perf/util/session.c @@ -1130,6 +1130,9 @@ static void dump_sample(struct perf_evsel *evsel, union perf_event *event, if (sample_type & PERF_SAMPLE_READ) sample_read__printf(sample, evsel->attr.read_format); + + if (sample_type & PERF_SAMPLE_SKID_IP) + printf("... skid_ip: %" PRIu64 "\n", sample->skid_ip); } static void dump_read(struct perf_evsel *evsel, union perf_event *event) -- 2.7.4
Powered by blists - more mailing lists