Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 692d0e63 authored by Adrian Hunter's avatar Adrian Hunter Committed by Arnaldo Carvalho de Melo
Browse files

perf script: Use fallbacks for branch stacks



Branch stacks do not necessarily have the same cpumode as the 'ip'. Use
the fallback functions in those cases.

This patch depends on patch "perf tools: Add fallback functions for cases
where cpumode is insufficient".

Signed-off-by: default avatarAdrian Hunter <adrian.hunter@intel.com>
Cc: Andi Kleen <ak@linux.intel.com>
Cc: David S. Miller <davem@davemloft.net>
Cc: Jiri Olsa <jolsa@redhat.com>
Cc: Leo Yan <leo.yan@linaro.org>
Cc: Mathieu Poirier <mathieu.poirier@linaro.org>
Cc: stable@vger.kernel.org # 4.19
Link: http://lkml.kernel.org/r/20181106210712.12098-4-adrian.hunter@intel.com


Signed-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
parent 225f99e0
Loading
Loading
Loading
Loading
+6 −6
Original line number Diff line number Diff line
@@ -724,8 +724,8 @@ static int perf_sample__fprintf_brstack(struct perf_sample *sample,
		if (PRINT_FIELD(DSO)) {
			memset(&alf, 0, sizeof(alf));
			memset(&alt, 0, sizeof(alt));
			thread__find_map(thread, sample->cpumode, from, &alf);
			thread__find_map(thread, sample->cpumode, to, &alt);
			thread__find_map_fb(thread, sample->cpumode, from, &alf);
			thread__find_map_fb(thread, sample->cpumode, to, &alt);
		}

		printed += fprintf(fp, " 0x%"PRIx64, from);
@@ -771,8 +771,8 @@ static int perf_sample__fprintf_brstacksym(struct perf_sample *sample,
		from = br->entries[i].from;
		to   = br->entries[i].to;

		thread__find_symbol(thread, sample->cpumode, from, &alf);
		thread__find_symbol(thread, sample->cpumode, to, &alt);
		thread__find_symbol_fb(thread, sample->cpumode, from, &alf);
		thread__find_symbol_fb(thread, sample->cpumode, to, &alt);

		printed += symbol__fprintf_symname_offs(alf.sym, &alf, fp);
		if (PRINT_FIELD(DSO)) {
@@ -816,11 +816,11 @@ static int perf_sample__fprintf_brstackoff(struct perf_sample *sample,
		from = br->entries[i].from;
		to   = br->entries[i].to;

		if (thread__find_map(thread, sample->cpumode, from, &alf) &&
		if (thread__find_map_fb(thread, sample->cpumode, from, &alf) &&
		    !alf.map->dso->adjust_symbols)
			from = map__map_ip(alf.map, from);

		if (thread__find_map(thread, sample->cpumode, to, &alt) &&
		if (thread__find_map_fb(thread, sample->cpumode, to, &alt) &&
		    !alt.map->dso->adjust_symbols)
			to = map__map_ip(alt.map, to);

+8 −8
Original line number Diff line number Diff line
@@ -494,13 +494,13 @@ static PyObject *python_process_brstack(struct perf_sample *sample,
		pydict_set_item_string_decref(pyelem, "cycles",
		    PyLong_FromUnsignedLongLong(br->entries[i].flags.cycles));

		thread__find_map(thread, sample->cpumode,
		thread__find_map_fb(thread, sample->cpumode,
				    br->entries[i].from, &al);
		dsoname = get_dsoname(al.map);
		pydict_set_item_string_decref(pyelem, "from_dsoname",
					      _PyUnicode_FromString(dsoname));

		thread__find_map(thread, sample->cpumode,
		thread__find_map_fb(thread, sample->cpumode,
				    br->entries[i].to, &al);
		dsoname = get_dsoname(al.map);
		pydict_set_item_string_decref(pyelem, "to_dsoname",
@@ -576,13 +576,13 @@ static PyObject *python_process_brstacksym(struct perf_sample *sample,
		if (!pyelem)
			Py_FatalError("couldn't create Python dictionary");

		thread__find_symbol(thread, sample->cpumode,
		thread__find_symbol_fb(thread, sample->cpumode,
				       br->entries[i].from, &al);
		get_symoff(al.sym, &al, true, bf, sizeof(bf));
		pydict_set_item_string_decref(pyelem, "from",
					      _PyUnicode_FromString(bf));

		thread__find_symbol(thread, sample->cpumode,
		thread__find_symbol_fb(thread, sample->cpumode,
				       br->entries[i].to, &al);
		get_symoff(al.sym, &al, true, bf, sizeof(bf));
		pydict_set_item_string_decref(pyelem, "to",