From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S940007AbdAGF0P (ORCPT ); Sat, 7 Jan 2017 00:26:15 -0500 Received: from mail.kernel.org ([198.145.29.136]:49708 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S932204AbdAGF0E (ORCPT ); Sat, 7 Jan 2017 00:26:04 -0500 From: Masami Hiramatsu To: Arnaldo Carvalho de Melo Cc: Masami Hiramatsu , linux-kernel@vger.kernel.org, Jiri Olsa , Peter Zijlstra , Ingo Molnar , Namhyung Kim Subject: [PATCH perf/core 1/4] perf-probe: Fix to show correct locations for events on modules Date: Sat, 7 Jan 2017 14:25:09 +0900 Message-Id: <148376669886.25966.17841653117657415248.stgit@devbox> X-Mailer: git-send-email 2.9.3 In-Reply-To: <148376662676.25966.3739385839519573153.stgit@devbox> References: <148376662676.25966.3739385839519573153.stgit@devbox> User-Agent: StGit/0.17.1-dirty MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: 7bit Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Fix to show correct locations for events on modules by relocating given address. Currently the relocation is done when we failed to find the address in debuginfo, but for modules it always makes a mistakes. E.g. without this fix, events on module seems wrong, but other cases (kernel and user space) looks good. # perf probe -l probe:SyS_remap_file_pages (on SyS_remap_file_pages@mm/mmap.c) probe:chv_prepare_pll (on intel_plane_atomic_get_property+16@drm/i915/intel_atomic_plane.c in i915) probe_perf:alias_lookup (on alias_lookup@util/alias.c in /home/mhiramat/ksrc/linux/tools/perf/perf) With this fix, all cases are OK now. # perf probe -l probe:SyS_remap_file_pages (on SyS_remap_file_pages@mm/mmap.c) probe:chv_prepare_pll (on chv_prepare_pll@gpu/drm/i915/intel_display.c in i915) probe_perf:alias_lookup (on alias_lookup@util/alias.c in /home/mhiramat/ksrc/linux/tools/perf/perf) Signed-off-by: Masami Hiramatsu --- tools/perf/util/probe-finder.c | 10 +++------- 1 file changed, 3 insertions(+), 7 deletions(-) diff --git a/tools/perf/util/probe-finder.c b/tools/perf/util/probe-finder.c index df4debe..0278fe1 100644 --- a/tools/perf/util/probe-finder.c +++ b/tools/perf/util/probe-finder.c @@ -1543,16 +1543,12 @@ int debuginfo__find_probe_point(struct debuginfo *dbg, unsigned long addr, Dwarf_Addr _addr = 0, baseaddr = 0; const char *fname = NULL, *func = NULL, *basefunc = NULL, *tmp; int baseline = 0, lineno = 0, ret = 0; - bool reloc = false; -retry: + /* We always need to relocate the address for aranges */ + if (debuginfo__get_text_offset(dbg, &baseaddr) == 0) + addr += baseaddr; /* Find cu die */ if (!dwarf_addrdie(dbg->dbg, (Dwarf_Addr)addr, &cudie)) { - if (!reloc && debuginfo__get_text_offset(dbg, &baseaddr) == 0) { - addr += baseaddr; - reloc = true; - goto retry; - } pr_warning("Failed to find debug information for address %lx\n", addr); ret = -EINVAL;