Fix to show correct error messages for $vars and $params because
those special variables requires debug information to find the
real variables or function parameters.

E.g. without this fix;
  ----
  # perf probe -x /lib64/libc-2.23.so getaddrinfo \$params
  Failed to write event: Invalid argument
  Please upgrade your kernel to at least 3.14 to have access to feature $params
    Error: Failed to add events.
  ----
Perf ends up with an error, but the message is not correct.
With this fix, perf shows correct error message as below.
  ----
  # perf probe -x /lib64/libc-2.23.so getaddrinfo \$params
  The /usr/lib64/libc-2.23.so file has no debug information.
  Rebuild with -g, or install an appropriate debuginfo package.
    Error: Failed to add events.
  ----

Reported-by: Arnaldo Carvalho de Melo <a...@kernel.org>
Signed-off-by: Masami Hiramatsu <mhira...@kernel.org>
---
 tools/perf/util/probe-event.c |    4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)

diff --git a/tools/perf/util/probe-event.c b/tools/perf/util/probe-event.c
index 55f41d5..dcc906b 100644
--- a/tools/perf/util/probe-event.c
+++ b/tools/perf/util/probe-event.c
@@ -1542,7 +1542,9 @@ bool perf_probe_event_need_dwarf(struct perf_probe_event 
*pev)
                return true;
 
        for (i = 0; i < pev->nargs; i++)
-               if (is_c_varname(pev->args[i].var))
+               if (is_c_varname(pev->args[i].var) ||
+                   !strcmp(pev->args[i].var, "$params") ||
+                   !strcmp(pev->args[i].var, "$vars"))
                        return true;
 
        return false;

Reply via email to