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 | 18 | 
1 files changed, 11 insertions, 7 deletions
| diff --git a/tools/perf/util/scripting-engines/trace-event-python.c b/tools/perf/util/scripting-engines/trace-event-python.c index c0c010350bc2..f5ad0e62227a 100644 --- a/tools/perf/util/scripting-engines/trace-event-python.c +++ b/tools/perf/util/scripting-engines/trace-event-python.c @@ -36,6 +36,7 @@  #include "../debug.h"  #include "../dso.h"  #include "../callchain.h" +#include "../env.h"  #include "../evsel.h"  #include "../event.h"  #include "../thread.h" @@ -687,7 +688,7 @@ static void set_sample_datasrc_in_dict(PyObject *dict,  			_PyUnicode_FromString(decode));  } -static void regs_map(struct regs_dump *regs, uint64_t mask, char *bf, int size) +static void regs_map(struct regs_dump *regs, uint64_t mask, const char *arch, char *bf, int size)  {  	unsigned int i = 0, r;  	int printed = 0; @@ -702,7 +703,7 @@ static void regs_map(struct regs_dump *regs, uint64_t mask, char *bf, int size)  		printed += scnprintf(bf + printed, size - printed,  				     "%5s:0x%" PRIx64 " ", -				     perf_reg_name(r), val); +				     perf_reg_name(r, arch), val);  	}  } @@ -711,6 +712,7 @@ static void set_regs_in_dict(PyObject *dict,  			     struct evsel *evsel)  {  	struct perf_event_attr *attr = &evsel->core.attr; +	const char *arch = perf_env__arch(evsel__env(evsel));  	/*  	 * Here value 28 is a constant size which can be used to print @@ -722,12 +724,12 @@ static void set_regs_in_dict(PyObject *dict,  	int size = __sw_hweight64(attr->sample_regs_intr) * 28;  	char bf[size]; -	regs_map(&sample->intr_regs, attr->sample_regs_intr, bf, sizeof(bf)); +	regs_map(&sample->intr_regs, attr->sample_regs_intr, arch, bf, sizeof(bf));  	pydict_set_item_string_decref(dict, "iregs",  			_PyUnicode_FromString(bf)); -	regs_map(&sample->user_regs, attr->sample_regs_user, bf, sizeof(bf)); +	regs_map(&sample->user_regs, attr->sample_regs_user, arch, bf, sizeof(bf));  	pydict_set_item_string_decref(dict, "uregs",  			_PyUnicode_FromString(bf)); @@ -942,6 +944,8 @@ static void python_process_tracepoint(struct perf_sample *sample,  				offset  = val;  				len     = offset >> 16;  				offset &= 0xffff; +				if (field->flags & TEP_FIELD_IS_RELATIVE) +					offset += field->offset + field->size;  			}  			if (field->flags & TEP_FIELD_IS_STRING &&  			    is_printable_array(data + offset, len)) { @@ -1553,7 +1557,7 @@ static void get_handler_name(char *str, size_t size,  }  static void -process_stat(struct evsel *counter, int cpu, int thread, u64 tstamp, +process_stat(struct evsel *counter, struct perf_cpu cpu, int thread, u64 tstamp,  	     struct perf_counts_values *count)  {  	PyObject *handler, *t; @@ -1573,7 +1577,7 @@ process_stat(struct evsel *counter, int cpu, int thread, u64 tstamp,  		return;  	} -	PyTuple_SetItem(t, n++, _PyLong_FromLong(cpu)); +	PyTuple_SetItem(t, n++, _PyLong_FromLong(cpu.cpu));  	PyTuple_SetItem(t, n++, _PyLong_FromLong(thread));  	tuple_set_u64(t, n++, tstamp); @@ -1597,7 +1601,7 @@ static void python_process_stat(struct perf_stat_config *config,  	int cpu, thread;  	if (config->aggr_mode == AGGR_GLOBAL) { -		process_stat(counter, -1, -1, tstamp, +		process_stat(counter, (struct perf_cpu){ .cpu = -1 }, -1, tstamp,  			     &counter->counts->aggr);  		return;  	} |