On 11/7/2024 10:51 AM, Namhyung Kim wrote:
On Wed, Nov 06, 2024 at 04:51:10PM -0700, Steve Clevenger wrote:
Add map_pgoff parameter to python dictionary so it can be seen by the python script.
Signed-off-by: Steve Clevenger scclevenger@os.amperecomputing.com Reviewed-by: Leo Yan leo.yan@arm.com
tools/perf/util/scripting-engines/trace-event-python.c | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-)
diff --git a/tools/perf/util/scripting-engines/trace-event-python.c b/tools/perf/util/scripting-engines/trace-event-python.c index d7183134b669..367132b3a51a 100644 --- a/tools/perf/util/scripting-engines/trace-event-python.c +++ b/tools/perf/util/scripting-engines/trace-event-python.c @@ -793,7 +793,8 @@ static int set_regs_in_dict(PyObject *dict, static void set_sym_in_dict(PyObject *dict, struct addr_location *al, const char *dso_field, const char *dso_bid_field, const char *dso_map_start, const char *dso_map_end,
const char *sym_field, const char *symoff_field)
const char *sym_field, const char *symoff_field,
const char *map_pgoff)
{ char sbuild_id[SBUILD_ID_SIZE]; @@ -809,6 +810,8 @@ static void set_sym_in_dict(PyObject *dict, struct addr_location *al, PyLong_FromUnsignedLong(map__start(al->map))); pydict_set_item_string_decref(dict, dso_map_end, PyLong_FromUnsignedLong(map__end(al->map)));
pydict_set_item_string_decref(dict, map_pgoff,
PyLong_FromUnsignedLongLong(al->map->pgoff));
Please use map__pgoff(al->map) instead. Otherwise you'll get this in the debug build:
util/scripting-engines/trace-event-python.c: In function 'set_sym_in_dict': util/scripting-engines/trace-event-python.c:814:60: error: 'struct map' has no member named 'pgoff' 814 | PyLong_FromUnsignedLongLong(al->map->pgoff)); | ^~
Thanks, Namhyung
Hi Namhyung,
I do not see this compile error, and I typically build perf with debug. This make command works through 6.11.0-rc6:
$ make -C tools/perf DEBUG=1 VF=1 CORESIGHT=1 PYTHON=python3 CONFIG_LIBPYTHON=y CSLIBS=/usr/lib CSINCLUDES=/usr/include install
I can substitute in the map__pgoff() macro in any case.
Thanks, Steve
} if (al->sym) { pydict_set_item_string_decref(dict, sym_field, @@ -895,7 +898,7 @@ static PyObject *get_perf_sample_dict(struct perf_sample *sample, pydict_set_item_string_decref(dict, "comm", _PyUnicode_FromString(thread__comm_str(al->thread))); set_sym_in_dict(dict, al, "dso", "dso_bid", "dso_map_start", "dso_map_end",
"symbol", "symoff");
"symbol", "symoff", "map_pgoff");
pydict_set_item_string_decref(dict, "callchain", callchain); @@ -920,7 +923,7 @@ static PyObject *get_perf_sample_dict(struct perf_sample *sample, PyBool_FromLong(1)); set_sym_in_dict(dict_sample, addr_al, "addr_dso", "addr_dso_bid", "addr_dso_map_start", "addr_dso_map_end",
"addr_symbol", "addr_symoff");
}"addr_symbol", "addr_symoff", "addr_map_pgoff");
if (sample->flags) -- 2.44.0