From: Arnaldo Carvalho de Melo <acme@kernel.org>
To: Ingo Molnar <mingo@kernel.org>
Cc: linux-kernel@vger.kernel.org, Jiri Olsa <jolsa@kernel.org>,
David Ahern <dsahern@gmail.com>,
Namhyung Kim <namhyung@kernel.org>,
Peter Zijlstra <a.p.zijlstra@chello.nl>,
Steven Rostedt <rostedt@goodmis.org>,
Arnaldo Carvalho de Melo <acme@redhat.com>
Subject: [PATCH 13/15] perf script python: Fix string vs byte array resolving
Date: Mon, 18 Jul 2016 20:33:16 -0300 [thread overview]
Message-ID: <1468884798-14932-14-git-send-email-acme@kernel.org> (raw)
In-Reply-To: <1468884798-14932-1-git-send-email-acme@kernel.org>
From: Jiri Olsa <jolsa@kernel.org>
Jirka reported that python code returns all arrays as strings. This
makes impossible to get all items for byte array tracepoint field
containing 0x00 value item.
Fixing this by scanning full length of the array and returning it as
PyByteArray object in case non printable byte is found.
Signed-off-by: Jiri Olsa <jolsa@kernel.org>
Reported-and-Tested-by: Jiri Pirko <jiri@mellanox.com>
Cc: David Ahern <dsahern@gmail.com>
Cc: Namhyung Kim <namhyung@kernel.org>
Cc: Peter Zijlstra <a.p.zijlstra@chello.nl>
Cc: Steven Rostedt <rostedt@goodmis.org>
Link: http://lkml.kernel.org/r/1468685480-18951-2-git-send-email-jolsa@kernel.org
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
---
.../util/scripting-engines/trace-event-python.c | 39 ++++++++++++++++++----
1 file changed, 33 insertions(+), 6 deletions(-)
diff --git a/tools/perf/util/scripting-engines/trace-event-python.c b/tools/perf/util/scripting-engines/trace-event-python.c
index 6ac6b7a33f42..7bd6da80533e 100644
--- a/tools/perf/util/scripting-engines/trace-event-python.c
+++ b/tools/perf/util/scripting-engines/trace-event-python.c
@@ -386,6 +386,21 @@ exit:
return pylist;
}
+static int is_printable_array(char *p, unsigned int len)
+{
+ unsigned int i;
+
+ if (!p || !len || p[len - 1] != 0)
+ return 0;
+
+ len--;
+
+ for (i = 0; i < len; i++) {
+ if (!isprint(p[i]) && !isspace(p[i]))
+ return 0;
+ }
+ return 1;
+}
static void python_process_tracepoint(struct perf_sample *sample,
struct perf_evsel *evsel,
@@ -457,14 +472,26 @@ static void python_process_tracepoint(struct perf_sample *sample,
pydict_set_item_string_decref(dict, "common_callchain", callchain);
}
for (field = event->format.fields; field; field = field->next) {
- if (field->flags & FIELD_IS_STRING) {
- int offset;
+ unsigned int offset, len;
+ unsigned long long val;
+
+ if (field->flags & FIELD_IS_ARRAY) {
+ offset = field->offset;
+ len = field->size;
if (field->flags & FIELD_IS_DYNAMIC) {
- offset = *(int *)(data + field->offset);
+ val = pevent_read_number(scripting_context->pevent,
+ data + offset, len);
+ offset = val;
+ len = offset >> 16;
offset &= 0xffff;
- } else
- offset = field->offset;
- obj = PyString_FromString((char *)data + offset);
+ }
+ if (field->flags & FIELD_IS_STRING &&
+ is_printable_array(data + offset, len)) {
+ obj = PyString_FromString((char *) data + offset);
+ } else {
+ obj = PyByteArray_FromStringAndSize((const char *) data + offset, len);
+ field->flags &= ~FIELD_IS_STRING;
+ }
} else { /* FIELD_IS_NUMERIC */
obj = get_field_numeric_entry(event, field, data);
}
--
2.7.4
next prev parent reply other threads:[~2016-07-18 23:33 UTC|newest]
Thread overview: 20+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-07-18 23:33 [GIT PULL 00/15] perf/core improvements and fixes Arnaldo Carvalho de Melo
2016-07-18 23:33 ` [PATCH 01/15] perf jit: Add missing curly braces Arnaldo Carvalho de Melo
2016-07-18 23:33 ` Arnaldo Carvalho de Melo
2016-07-18 23:33 ` [PATCH 02/15] perf jit: Remove some no-op error handling Arnaldo Carvalho de Melo
2016-07-18 23:33 ` Arnaldo Carvalho de Melo
2016-07-18 23:33 ` [PATCH 03/15] perf tools: Add missing linux/compiler.h include to perf-sys.h Arnaldo Carvalho de Melo
2016-07-18 23:33 ` [PATCH 04/15] perf tools: Remove tools/perf/util/include/asm/byteorder.h Arnaldo Carvalho de Melo
2016-07-18 23:33 ` [PATCH 05/15] perf tools: Remove tools/perf/util/include/linux/const.h Arnaldo Carvalho de Melo
2016-07-18 23:33 ` [PATCH 06/15] Remove: kernel unistd*h files from perf's MANIFEST, not used Arnaldo Carvalho de Melo
2016-07-18 23:33 ` [PATCH 07/15] tools: Copy the bitops files accessed from the kernel and check for drift Arnaldo Carvalho de Melo
2016-07-18 23:33 ` [PATCH 08/15] perf tools: Remove include/linux/list.h from perf's MANIFEST Arnaldo Carvalho de Melo
2016-07-18 23:33 ` [PATCH 09/15] tools: Copy linux/{hash,poison}.h and check for drift Arnaldo Carvalho de Melo
2016-07-18 23:33 ` [PATCH 10/15] perf stat: Balance opening and reading events Arnaldo Carvalho de Melo
2016-07-18 23:33 ` [PATCH 11/15] perf cpu_map: Add more helpers Arnaldo Carvalho de Melo
2016-07-18 23:33 ` [PATCH 12/15] perf probe: Warn unmatched function filter correctly Arnaldo Carvalho de Melo
2016-07-18 23:33 ` Arnaldo Carvalho de Melo [this message]
2016-07-28 18:42 ` [PATCH 13/15] perf script python: Fix string vs byte array resolving Steven Rostedt
2016-07-18 23:33 ` [PATCH 14/15] perf tools: Make is_printable_array global Arnaldo Carvalho de Melo
2016-07-18 23:33 ` [PATCH 15/15] perf tests: Add is_printable_array test Arnaldo Carvalho de Melo
2016-07-19 6:46 ` [GIT PULL 00/15] perf/core improvements and fixes Ingo Molnar
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=1468884798-14932-14-git-send-email-acme@kernel.org \
--to=acme@kernel.org \
--cc=a.p.zijlstra@chello.nl \
--cc=acme@redhat.com \
--cc=dsahern@gmail.com \
--cc=jolsa@kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=mingo@kernel.org \
--cc=namhyung@kernel.org \
--cc=rostedt@goodmis.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.