Received: by 2002:a17:90a:9103:0:0:0:0 with SMTP id k3csp11800025pjo; Thu, 2 Jan 2020 14:29:58 -0800 (PST) X-Google-Smtp-Source: APXvYqxPks6ZCIRp6PQor8TF4KGzfq7s/xVZBRC68Jzfqh3XFTzWAIiqzVBcQFXEzh5hK0QLZ//x X-Received: by 2002:a9d:da2:: with SMTP id 31mr90931065ots.319.1578004198751; Thu, 02 Jan 2020 14:29:58 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1578004198; cv=none; d=google.com; s=arc-20160816; b=RYPSh396zIs/WcwKZUzM2TGY3UzJIffmZezhtDheLbSbkN00Xa8NltxfJ/6FtyIMjC cmirrrFD0SmiThERBfK+Pz0gZdTYWp6txVNN4Z9zjzwc6cA53VJPgfBJ54lkG1IZYNha qGs28aZX8TzjNOas6vuF/MqbQ1JnTCuEYzf0Y4ptzhr4mwJFfdDGxKWO1xdosIZDapYU r9oKKjUq0bvhW3MAQg206RxFZplccbTms4soAdQihIwcox+RlzxdGVNOl0oqjFaLXZyk FL7td5vYH3l2X+1MREuCRlrSY9Q22RiRKpzf/uLitZlSOahS179jl/UHCLB/Yk+Bcv+h gPkQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-transfer-encoding:mime-version :user-agent:references:in-reply-to:message-id:date:subject:cc:to :from:dkim-signature; bh=FLBQF+66DIIcP0P12z3Id+0+n2mBIebsHykLoW0e5qM=; b=TvcIUGDUaXlLtYlxsIuNAI1Yj8kghN73SxESU3o+AxcorxHFrUxCAa8bUiL3zovQuI LkGGLEVLo+bAnb2NG5u7Wbr9Z1CmC2s322go8R7zw0BovHK+MxW/wncIk2ctQwp64PUN TmsP1jRzb0WWy+17LYu7Pjn+XUo31OuoDU7NECOiMVOsKEW4rFn31SqUs3u7iZYFCu3U rkZ4ji35lNOlobp9YyBtGLp3rue8dBGLNEOGLxHWHIUPzh+jUK09hyl/S8Xs7vSGudvL O3OXqSGG9ZzxVTN99FxpQLej1On6w4OiiVHwpHyEYQ1Mbzbn+ty+57Nfrm9yt90T06xw MWbA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b=PLJ2R4UT; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id q9si25028013oij.125.2020.01.02.14.29.46; Thu, 02 Jan 2020 14:29:58 -0800 (PST) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b=PLJ2R4UT; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1730003AbgABW3L (ORCPT + 99 others); Thu, 2 Jan 2020 17:29:11 -0500 Received: from mail.kernel.org ([198.145.29.99]:59788 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1729998AbgABW3J (ORCPT ); Thu, 2 Jan 2020 17:29:09 -0500 Received: from localhost (83-86-89-107.cable.dynamic.v4.ziggo.nl [83.86.89.107]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPSA id 85A59222C3; Thu, 2 Jan 2020 22:29:07 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1578004148; bh=z6WFD0WMIResXl7oTN1KLXrpZ05xZGgbg35GLx1c91k=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=PLJ2R4UTbWtozjqK1yxd4VqB1WOgOEPIYxwpW6IX0Am69xGabbuz9Qhy9+LPqeBqX Mt5dN9Zb7LGQl0sSQGfFdIXEQUK2udiqU5Lzk77zELL2rIhLSCCk/NkeDjETQ351X9 /wVNtIwNzEKgROrOyLW4GKQ3WRierQ5l3RprmK/w= From: Greg Kroah-Hartman To: linux-kernel@vger.kernel.org Cc: Greg Kroah-Hartman , stable@vger.kernel.org, Masami Hiramatsu , Arnaldo Carvalho de Melo , Namhyung Kim , Ravi Bangoria , "Steven Rostedt (VMware)" , Tom Zanussi , Sasha Levin Subject: [PATCH 4.9 058/171] perf probe: Return a better scope DIE if there is no best scope Date: Thu, 2 Jan 2020 23:06:29 +0100 Message-Id: <20200102220554.960823161@linuxfoundation.org> X-Mailer: git-send-email 2.24.1 In-Reply-To: <20200102220546.960200039@linuxfoundation.org> References: <20200102220546.960200039@linuxfoundation.org> User-Agent: quilt/0.66 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Masami Hiramatsu [ Upstream commit c701636aeec4c173208697d68da6e4271125564b ] Make find_best_scope() returns innermost DIE at given address if there is no best matched scope DIE. Since Gcc sometimes generates intuitively strange line info which is out of inlined function address range, we need this fixup. Without this, sometimes perf probe failed to probe on a line inside an inlined function: # perf probe -D ksys_open:3 Failed to find scope of probe point. Error: Failed to add events. With this fix, 'perf probe' can probe it: # perf probe -D ksys_open:3 p:probe/ksys_open _text+25707308 p:probe/ksys_open_1 _text+25710596 p:probe/ksys_open_2 _text+25711114 p:probe/ksys_open_3 _text+25711343 p:probe/ksys_open_4 _text+25714058 p:probe/ksys_open_5 _text+2819653 p:probe/ksys_open_6 _text+2819701 Signed-off-by: Masami Hiramatsu Tested-by: Arnaldo Carvalho de Melo Cc: Namhyung Kim Cc: Ravi Bangoria Cc: Steven Rostedt (VMware) Cc: Tom Zanussi Link: http://lore.kernel.org/lkml/157291300887.19771.14936015360963292236.stgit@devnote2 Signed-off-by: Arnaldo Carvalho de Melo Signed-off-by: Sasha Levin --- tools/perf/util/probe-finder.c | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/tools/perf/util/probe-finder.c b/tools/perf/util/probe-finder.c index 440f0a92ade6..6ca804a01cf9 100644 --- a/tools/perf/util/probe-finder.c +++ b/tools/perf/util/probe-finder.c @@ -764,6 +764,16 @@ static int find_best_scope_cb(Dwarf_Die *fn_die, void *data) return 0; } +/* Return innermost DIE */ +static int find_inner_scope_cb(Dwarf_Die *fn_die, void *data) +{ + struct find_scope_param *fsp = data; + + memcpy(fsp->die_mem, fn_die, sizeof(Dwarf_Die)); + fsp->found = true; + return 1; +} + /* Find an appropriate scope fits to given conditions */ static Dwarf_Die *find_best_scope(struct probe_finder *pf, Dwarf_Die *die_mem) { @@ -775,8 +785,13 @@ static Dwarf_Die *find_best_scope(struct probe_finder *pf, Dwarf_Die *die_mem) .die_mem = die_mem, .found = false, }; + int ret; - cu_walk_functions_at(&pf->cu_die, pf->addr, find_best_scope_cb, &fsp); + ret = cu_walk_functions_at(&pf->cu_die, pf->addr, find_best_scope_cb, + &fsp); + if (!ret && !fsp.found) + cu_walk_functions_at(&pf->cu_die, pf->addr, + find_inner_scope_cb, &fsp); return fsp.found ? die_mem : NULL; } -- 2.20.1