From: Jiri Olsa <jolsa@redhat.com>
To: Steven Rostedt <rostedt@goodmis.org>
Cc: Jiri Olsa <jolsa@kernel.org>,
Arnaldo Carvalho de Melo <acme@kernel.org>,
lkml <linux-kernel@vger.kernel.org>,
David Ahern <dsahern@gmail.com>, Ingo Molnar <mingo@kernel.org>,
Namhyung Kim <namhyung@kernel.org>,
Peter Zijlstra <a.p.zijlstra@chello.nl>
Subject: Re: [PATCH 10/10] perf script python: Fix string vs byte array resolving
Date: Tue, 12 Jul 2016 10:11:56 +0200 [thread overview]
Message-ID: <20160712081156.GB3392@krava> (raw)
In-Reply-To: <20160711115452.02ba1d6c@gandalf.local.home>
On Mon, Jul 11, 2016 at 11:54:52AM -0400, Steven Rostedt wrote:
> On Sun, 10 Jul 2016 13:08:02 +0200
> Jiri Olsa <jolsa@kernel.org> wrote:
>
> > 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;
>
> I believe this will return the wrong result if you pass in a string
> that has '\0' in it. Try it out:
>
> char a[] = "hello";
>
> printf("a=%s is %d\n", a, is_printable_array(a, sizeof(a)));
>
> and see what you get?
ugh, forgot the last 0 byte.. how about attached change?
I wonder it'd be less pain to present all arrays as
PyByteArray, it might be no difference for python
users anyway ;-)
thanks,
jirka
---
diff --git a/tools/perf/util/scripting-engines/trace-event-python.c b/tools/perf/util/scripting-engines/trace-event-python.c
index 75e9790ebb96..9f810e6c739a 100644
--- a/tools/perf/util/scripting-engines/trace-event-python.c
+++ b/tools/perf/util/scripting-engines/trace-event-python.c
@@ -390,11 +390,13 @@ static int is_printable_array(char *p, unsigned int len)
{
unsigned int i;
- for (i = 0; i < len; i++)
+ /* Exclude the last zero byte of string.. */
+ for (i = 0; i < len - 1; i++)
if (!isprint(p[i]) && !isspace(p[i]))
return 0;
- return 1;
+ /* ... and check its presence in the last byte. */
+ return p[i] == 0;
}
static void python_process_tracepoint(struct perf_sample *sample,
next prev parent reply other threads:[~2016-07-12 8:12 UTC|newest]
Thread overview: 30+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-07-10 11:07 [PATCH 00/10] perf python: Add support to access tracepoint fields Jiri Olsa
2016-07-10 11:07 ` [PATCH 01/10] perf tools: Make perf_evlist__event2evsel public Jiri Olsa
2016-07-13 7:24 ` [tip:perf/core] perf evlist: Make event2evsel public tip-bot for Jiri Olsa
2016-07-10 11:07 ` [PATCH 02/10] perf tools: Introduce trace_event__tp_format_id function Jiri Olsa
2016-07-13 7:25 ` [tip:perf/core] perf tools: Introduce trace_event__tp_format_id() tip-bot for Jiri Olsa
2016-07-10 11:07 ` [PATCH 03/10] perf python: Init perf_event_attr::size in perf.evsel constructor Jiri Olsa
2016-07-13 7:25 ` [tip:perf/core] " tip-bot for Jiri Olsa
2016-07-10 11:07 ` [PATCH 04/10] perf python: Fix pyrf_evlist__read_on_cpu event consuming Jiri Olsa
2016-07-13 7:26 ` [tip:perf/core] " tip-bot for Jiri Olsa
2016-07-10 11:07 ` [PATCH 05/10] perf python: Put perf.event objects into dictionary Jiri Olsa
2016-07-13 7:26 ` [tip:perf/core] " tip-bot for Jiri Olsa
2016-07-10 11:07 ` [PATCH 06/10] perf python: Add perf.tracepoint method Jiri Olsa
2016-07-13 7:27 ` [tip:perf/core] " tip-bot for Jiri Olsa
2016-07-10 11:07 ` [PATCH 07/10] perf python: Add struct evsel into struct pyrf_event Jiri Olsa
2016-07-13 7:27 ` [tip:perf/core] " tip-bot for Jiri Olsa
2016-07-10 11:08 ` [PATCH 08/10] perf python: Add support to resolve tracepoint fields Jiri Olsa
2016-07-13 7:27 ` [tip:perf/core] " tip-bot for Jiri Olsa
2016-07-10 11:08 ` [PATCH 09/10] perf python: Add tracepoint example Jiri Olsa
2016-07-13 7:28 ` [tip:perf/core] " tip-bot for Jiri Olsa
2016-07-10 11:08 ` [PATCH 10/10] perf script python: Fix string vs byte array resolving Jiri Olsa
2016-07-11 15:54 ` Steven Rostedt
2016-07-12 8:11 ` Jiri Olsa [this message]
2016-07-12 12:37 ` Steven Rostedt
2016-07-12 12:52 ` Jiri Olsa
2016-07-12 13:00 ` Steven Rostedt
2016-07-12 13:35 ` Jiri Olsa
2016-07-12 13:48 ` Steven Rostedt
2016-07-12 19:27 ` Arnaldo Carvalho de Melo
2016-07-12 19:48 ` Steven Rostedt
2016-07-13 9:06 ` Jiri Olsa
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=20160712081156.GB3392@krava \
--to=jolsa@redhat.com \
--cc=a.p.zijlstra@chello.nl \
--cc=acme@kernel.org \
--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.