diff options
Diffstat (limited to 'tools/perf/util/scripting-engines/trace-event-python.c')
| -rw-r--r-- | tools/perf/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 33a414bbba3e..6a72f14c5986 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) |