perf symbols: Factor out dso__load_vmlinux_path()
Arnaldo Carvalho de Melo [Wed, 27 Jan 2010 23:05:50 +0000 (21:05 -0200)]
So that we can call it directly from regression tests, and also
to reduce the size of dso__load_kernel_sym(), making it more
clear.

Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
Cc: Frédéric Weisbecker <fweisbec@gmail.com>
Cc: Mike Galbraith <efault@gmx.de>
Cc: Peter Zijlstra <a.p.zijlstra@chello.nl>
Cc: Paul Mackerras <paulus@samba.org>
LKML-Reference: <1264633557-17597-2-git-send-email-acme@infradead.org>
Signed-off-by: Ingo Molnar <mingo@elte.hu>

tools/perf/util/symbol.c
tools/perf/util/symbol.h

index f1f609d..26ec603 100644 (file)
@@ -1578,6 +1578,27 @@ static int dso__load_vmlinux(struct dso *self, struct map *map,
        return err;
 }
 
+int dso__load_vmlinux_path(struct dso *self, struct map *map,
+                          struct perf_session *session, symbol_filter_t filter)
+{
+       int i, err = 0;
+
+       pr_debug("Looking at the vmlinux_path (%d entries long)\n",
+                vmlinux_path__nr_entries);
+
+       for (i = 0; i < vmlinux_path__nr_entries; ++i) {
+               err = dso__load_vmlinux(self, map, session, vmlinux_path[i],
+                                       filter);
+               if (err > 0) {
+                       pr_debug("Using %s for symbols\n", vmlinux_path[i]);
+                       dso__set_long_name(self, strdup(vmlinux_path[i]));
+                       break;
+               }
+       }
+
+       return err;
+}
+
 static int dso__load_kernel_sym(struct dso *self, struct map *map,
                                struct perf_session *session, symbol_filter_t filter)
 {
@@ -1606,20 +1627,9 @@ static int dso__load_kernel_sym(struct dso *self, struct map *map,
        }
 
        if (vmlinux_path != NULL) {
-               int i;
-               pr_debug("Looking at the vmlinux_path (%d entries long)\n",
-                        vmlinux_path__nr_entries);
-               for (i = 0; i < vmlinux_path__nr_entries; ++i) {
-                       err = dso__load_vmlinux(self, map, session,
-                                               vmlinux_path[i], filter);
-                       if (err > 0) {
-                               pr_debug("Using %s for symbols\n",
-                                        vmlinux_path[i]);
-                               dso__set_long_name(self,
-                                                  strdup(vmlinux_path[i]));
-                               goto out_fixup;
-                       }
-               }
+               err = dso__load_vmlinux_path(self, map, session, filter);
+               if (err > 0)
+                       goto out_fixup;
        }
 
        /*
index ffe0b0f..a94997a 100644 (file)
@@ -129,6 +129,8 @@ struct perf_session;
 
 int dso__load(struct dso *self, struct map *map, struct perf_session *session,
              symbol_filter_t filter);
+int dso__load_vmlinux_path(struct dso *self, struct map *map,
+                          struct perf_session *session, symbol_filter_t filter);
 void dsos__fprintf(FILE *fp);
 size_t dsos__fprintf_buildid(FILE *fp, bool with_hits);