perf scripting python: Factor out set_sym_in_dict()
authorAdrian Hunter <adrian.hunter@intel.com>
Tue, 25 May 2021 09:51:04 +0000 (12:51 +0300)
committerArnaldo Carvalho de Melo <acme@redhat.com>
Tue, 25 May 2021 13:07:17 +0000 (10:07 -0300)
Factor out set_sym_in_dict() so it can be reused.

Signed-off-by: Adrian Hunter <adrian.hunter@intel.com>
Cc: Andi Kleen <ak@linux.intel.com>
Cc: Jiri Olsa <jolsa@redhat.com>
Link: https://lore.kernel.org/r/20210525095112.1399-3-adrian.hunter@intel.com
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
tools/perf/util/scripting-engines/trace-event-python.c

index 1d718ac..4c06760 100644 (file)
@@ -726,6 +726,22 @@ static void set_regs_in_dict(PyObject *dict,
                        _PyUnicode_FromString(bf));
 }
 
+static void set_sym_in_dict(PyObject *dict, struct addr_location *al,
+                           const char *dso_field, const char *sym_field,
+                           const char *symoff_field)
+{
+       if (al->map) {
+               pydict_set_item_string_decref(dict, dso_field,
+                       _PyUnicode_FromString(al->map->dso->name));
+       }
+       if (al->sym) {
+               pydict_set_item_string_decref(dict, sym_field,
+                       _PyUnicode_FromString(al->sym->name));
+               pydict_set_item_string_decref(dict, symoff_field,
+                       PyLong_FromUnsignedLong(get_offset(al->sym, al)));
+       }
+}
+
 static PyObject *get_perf_sample_dict(struct perf_sample *sample,
                                         struct evsel *evsel,
                                         struct addr_location *al,
@@ -772,14 +788,7 @@ static PyObject *get_perf_sample_dict(struct perf_sample *sample,
                        (const char *)sample->raw_data, sample->raw_size));
        pydict_set_item_string_decref(dict, "comm",
                        _PyUnicode_FromString(thread__comm_str(al->thread)));
-       if (al->map) {
-               pydict_set_item_string_decref(dict, "dso",
-                       _PyUnicode_FromString(al->map->dso->name));
-       }
-       if (al->sym) {
-               pydict_set_item_string_decref(dict, "symbol",
-                       _PyUnicode_FromString(al->sym->name));
-       }
+       set_sym_in_dict(dict, al, "dso", "symbol", "symoff");
 
        pydict_set_item_string_decref(dict, "callchain", callchain);