lkml.org 
[lkml]   [2019]   [Dec]   [10]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH AUTOSEL 5.4 223/350] perf probe: Fix to probe an inline function which has no entry pc
    Date
    From: Masami Hiramatsu <mhiramat@kernel.org>

    [ Upstream commit eb6933b29d20bf2c3053883d409a53f462c1a3ac ]

    Fix perf probe to probe an inlne function which has no entry pc
    or low pc but only has ranges attribute.

    This seems very rare case, but I could find a few examples, as
    same as probe_point_search_cb(), use die_entrypc() to get the
    entry address in probe_point_inline_cb() too.

    Without this patch:

    # perf probe -D __amd_put_nb_event_constraints
    Failed to get entry address of __amd_put_nb_event_constraints.
    Probe point '__amd_put_nb_event_constraints' not found.
    Error: Failed to add events.

    With this patch:

    # perf probe -D __amd_put_nb_event_constraints
    p:probe/__amd_put_nb_event_constraints amd_put_event_constraints+43

    Committer testing:

    Before:

    [root@quaco ~]# perf probe -D __amd_put_nb_event_constraints
    Failed to get entry address of __amd_put_nb_event_constraints.
    Probe point '__amd_put_nb_event_constraints' not found.
    Error: Failed to add events.
    [root@quaco ~]#

    After:

    [root@quaco ~]# perf probe -D __amd_put_nb_event_constraints
    p:probe/__amd_put_nb_event_constraints _text+33789
    [root@quaco ~]#

    Fixes: 4ea42b181434 ("perf: Add perf probe subcommand, a kprobe-event setup helper")
    Signed-off-by: Masami Hiramatsu <mhiramat@kernel.org>
    Tested-by: Arnaldo Carvalho de Melo <acme@redhat.com>
    Cc: Jiri Olsa <jolsa@redhat.com>
    Cc: Namhyung Kim <namhyung@kernel.org>
    Link: http://lore.kernel.org/lkml/157199320336.8075.16189530425277588587.stgit@devnote2
    Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    ---
    tools/perf/util/probe-finder.c | 2 +-
    1 file changed, 1 insertion(+), 1 deletion(-)

    diff --git a/tools/perf/util/probe-finder.c b/tools/perf/util/probe-finder.c
    index 7c8d30fb2b99f..7857ae7a10b73 100644
    --- a/tools/perf/util/probe-finder.c
    +++ b/tools/perf/util/probe-finder.c
    @@ -942,7 +942,7 @@ static int probe_point_inline_cb(Dwarf_Die *in_die, void *data)
    ret = find_probe_point_lazy(in_die, pf);
    else {
    /* Get probe address */
    - if (dwarf_entrypc(in_die, &addr) != 0) {
    + if (die_entrypc(in_die, &addr) != 0) {
    pr_warning("Failed to get entry address of %s.\n",
    dwarf_diename(in_die));
    return -ENOENT;
    --
    2.20.1
    \
     
     \ /
      Last update: 2019-12-10 22:23    [W:2.380 / U:0.008 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site