Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > linux.kernel > #1440079

[PATCH 10/10] perf script python: Fix string vs byte array resolving

From Jiri Olsa <jolsa@kernel.org>
Newsgroups linux.kernel
Subject [PATCH 10/10] perf script python: Fix string vs byte array resolving
Date 2016-07-10 13:10 +0200
Message-ID <rTkMy-8fe-35@gated-at.bofh.it> (permalink)
References <rTkMy-8fe-3@gated-at.bofh.it>
Organization linux.* mail to news gateway

Show all headers | View raw


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.

Cc: Steven Rostedt (Red Hat) <rostedt@goodmis.org>
Reported-and-tested-by: Jiri Pirko <jiri@mellanox.com>
Link: http://lkml.kernel.org/n/tip-22f4vhhz5uytegkggy1on8u3@git.kernel.org
Signed-off-by: Jiri Olsa <jolsa@kernel.org>
---
 .../util/scripting-engines/trace-event-python.c    | 34 ++++++++++++++++++----
 1 file changed, 28 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 ff134700bf30..75e9790ebb96 100644
--- a/tools/perf/util/scripting-engines/trace-event-python.c
+++ b/tools/perf/util/scripting-engines/trace-event-python.c
@@ -386,6 +386,16 @@ exit:
 	return pylist;
 }
 
+static int is_printable_array(char *p, unsigned int len)
+{
+	unsigned int i;
+
+	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 +467,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.4.11

Back to linux.kernel | Previous | NextNext in thread | Find similar | Unroll thread


Thread

[PATCH 10/10] perf script python: Fix string vs byte array resolving Jiri Olsa <jolsa@kernel.org> - 2016-07-10 13:10 +0200
  Re: [PATCH 10/10] perf script python: Fix string vs byte array  resolving Steven Rostedt <rostedt@goodmis.org> - 2016-07-11 18:00 +0200
    Re: [PATCH 10/10] perf script python: Fix string vs byte array  resolving Jiri Olsa <jolsa@redhat.com> - 2016-07-12 10:20 +0200
      Re: [PATCH 10/10] perf script python: Fix string vs byte array  resolving Steven Rostedt <rostedt@goodmis.org> - 2016-07-12 14:40 +0200
        Re: [PATCH 10/10] perf script python: Fix string vs byte array  resolving Jiri Olsa <jolsa@redhat.com> - 2016-07-12 15:00 +0200
          Re: [PATCH 10/10] perf script python: Fix string vs byte array  resolving Steven Rostedt <rostedt@goodmis.org> - 2016-07-12 15:10 +0200
            Re: [PATCH 10/10] perf script python: Fix string vs byte array  resolving Jiri Olsa <jolsa@redhat.com> - 2016-07-12 15:40 +0200
              Re: [PATCH 10/10] perf script python: Fix string vs byte array  resolving Steven Rostedt <rostedt@goodmis.org> - 2016-07-12 15:50 +0200
                Re: [PATCH 10/10] perf script python: Fix string vs byte array  resolving Arnaldo Carvalho de Melo <acme@kernel.org> - 2016-07-12 21:30 +0200
                Re: [PATCH 10/10] perf script python: Fix string vs byte array  resolving Steven Rostedt <rostedt@goodmis.org> - 2016-07-12 21:50 +0200
                Re: [PATCH 10/10] perf script python: Fix string vs byte array  resolving Jiri Olsa <jolsa@redhat.com> - 2016-07-13 11:10 +0200

csiph-web