From: Tom Zanussi <tzanussi@gmail.com>
To: linux-kernel@vger.kernel.org
Cc: Roel Kluin <roel.kluin@gmail.com>,
mingo@elte.hu, Frederic Weisbecker <fweisbec@gmail.com>,
rostedt@goodmis.org
Subject: [PATCH] perf/scripts: tuple was set from long in both branches in python_process_event()
Date: Thu, 01 Apr 2010 23:58:25 -0500 [thread overview]
Message-ID: <1270184305.6422.10.camel@tropicana> (raw)
This is a fix to the signed/unsigned field handling in the Python
scripting engine, based on a patch from Roel Kluin.
Basically, Python wants to use a PyInt (which is internally a long) if
it can i.e. if the value will fit into that type. If not, it stores it
into a PyLong, which isn't actually a long, but an arbitrary-precision
integer variable.
The code below is similar to to what Python does internally, and it
seems to work as expected on the x86 and x86_64 sytems I tested it on.
Signed-off-by: Tom Zanussi <tzanussi@gmail.com>
---
.../util/scripting-engines/trace-event-python.c | 17 ++++++++++++-----
1 files changed, 12 insertions(+), 5 deletions(-)
diff --git a/tools/perf/util/scripting-engines/trace-event-python.c b/tools/perf/util/scripting-engines/trace-event-python.c
index 33a414b..6a72f14 100644
--- a/tools/perf/util/scripting-engines/trace-event-python.c
+++ b/tools/perf/util/scripting-engines/trace-event-python.c
@@ -208,7 +208,7 @@ static void python_process_event(int cpu, void *data,
int size __unused,
unsigned long long nsecs, char *comm)
{
- PyObject *handler, *retval, *context, *t;
+ PyObject *handler, *retval, *context, *t, *obj;
static char handler_name[256];
struct format_field *field;
unsigned long long val;
@@ -256,16 +256,23 @@ static void python_process_event(int cpu, void *data,
offset &= 0xffff;
} else
offset = field->offset;
- PyTuple_SetItem(t, n++,
- PyString_FromString((char *)data + offset));
+ obj = PyString_FromString((char *)data + offset);
} else { /* FIELD_IS_NUMERIC */
val = read_size(data + field->offset, field->size);
if (field->flags & FIELD_IS_SIGNED) {
- PyTuple_SetItem(t, n++, PyInt_FromLong(val));
+ if ((long long)val >= LONG_MIN &&
+ (long long)val <= LONG_MAX)
+ obj = PyInt_FromLong(val);
+ else
+ obj = PyLong_FromLongLong(val);
} else {
- PyTuple_SetItem(t, n++, PyInt_FromLong(val));
+ if (val <= LONG_MAX)
+ obj = PyInt_FromLong(val);
+ else
+ obj = PyLong_FromUnsignedLongLong(val);
}
}
+ PyTuple_SetItem(t, n++, obj);
}
if (_PyTuple_Resize(&t, n) == -1)
--
1.6.4.GIT
next reply other threads:[~2010-04-02 4:58 UTC|newest]
Thread overview: 4+ messages / expand[flat|nested] mbox.gz Atom feed top
2010-04-02 4:58 Tom Zanussi [this message]
2010-04-03 9:28 ` [tip:perf/urgent] perf/scripts: Tuple " tip-bot for Tom Zanussi
-- strict thread matches above, loose matches on Subject: below --
2010-03-22 17:22 [PATCH] perf/scripts: tuple " Roel Kluin
2010-03-25 5:42 ` Tom Zanussi
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=1270184305.6422.10.camel@tropicana \
--to=tzanussi@gmail.com \
--cc=fweisbec@gmail.com \
--cc=linux-kernel@vger.kernel.org \
--cc=mingo@elte.hu \
--cc=roel.kluin@gmail.com \
--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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
all inboxes | Powered by JetHome®