perf probe: Fix to use symtab only if no debuginfo
authorMasami Hiramatsu <mhiramat@redhat.com>
Wed, 21 Apr 2010 19:56:24 +0000 (15:56 -0400)
committerArnaldo Carvalho de Melo <acme@redhat.com>
Mon, 26 Apr 2010 18:32:37 +0000 (15:32 -0300)
Fix perf probe to use symtab only if there is no debuginfo, because debuginfo
has more information than symtab.

If we can't find a function in debuginfo, we never find it in symtab.

Signed-off-by: Masami Hiramatsu <mhiramat@redhat.com>
Reported-by: Arnaldo Carvalho de Melo <acme@redhat.com>
Cc: Paul Mackerras <paulus@samba.org>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: Mike Galbraith <efault@gmx.de>
Cc: Frederic Weisbecker <fweisbec@gmail.com>
Cc: Ingo Molnar <mingo@elte.hu>
LKML-Reference: <20100421195624.24664.46214.stgit@localhost6.localdomain6>
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
tools/perf/util/probe-event.c

index 4fb4803..5d3baec 100644 (file)
@@ -180,15 +180,16 @@ static int try_to_find_kprobe_trace_events(struct perf_probe_event *pev,
                return -ENOENT;
        }
        /* Error path : ntevs < 0 */
-       if (need_dwarf) {
-               if (ntevs == -EBADF)
-                       pr_warning("No dwarf info found in the vmlinux - "
-                               "please rebuild with CONFIG_DEBUG_INFO=y.\n");
-               return ntevs;
+       pr_debug("An error occurred in debuginfo analysis (%d).\n", ntevs);
+       if (ntevs == -EBADF) {
+               pr_warning("Warning: No dwarf info found in the vmlinux - "
+                       "please rebuild kernel with CONFIG_DEBUG_INFO=y.\n");
+               if (!need_dwarf) {
+                       pr_debug("Trying to use symbols.\nn");
+                       return 0;
+               }
        }
-       pr_debug("An error occurred in debuginfo analysis."
-                " Try to use symbols.\n");
-       return 0;
+       return ntevs;
 }
 
 #define LINEBUF_SIZE 256