perf symbols: Introduce symbol_type__is_a
authorArnaldo Carvalho de Melo <acme@redhat.com>
Fri, 11 Dec 2009 16:50:37 +0000 (14:50 -0200)
committerIngo Molnar <mingo@elte.hu>
Sat, 12 Dec 2009 06:42:09 +0000 (07:42 +0100)
For selecting the right types of symbols in /proc/kallsyms, will be
followed by elf_symbol_type__is_a, for the same purpose on ELF
symtabs.

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: <1260550239-5372-2-git-send-email-acme@infradead.org>
Signed-off-by: Ingo Molnar <mingo@elte.hu>
tools/perf/util/event.h
tools/perf/util/symbol.c

index c7a78ee..d9a65d9 100644 (file)
@@ -103,10 +103,10 @@ void event__print_totals(void);
 
 enum map_type {
        MAP__FUNCTION = 0,
-
-       MAP__NR_TYPES,
 };
 
+#define MAP__NR_TYPES (MAP__FUNCTION + 1)
+
 struct map {
        union {
                struct rb_node  rb_node;
index 9362023..bb21c96 100644 (file)
@@ -56,6 +56,16 @@ static void dso__set_loaded(struct dso *self, enum map_type type)
        self->loaded |= (1 << type);
 }
 
+static bool symbol_type__is_a(char symbol_type, enum map_type map_type)
+{
+       switch (map_type) {
+       case MAP__FUNCTION:
+               return symbol_type == 'T' || symbol_type == 'W';
+       default:
+               return false;
+       }
+}
+
 static void symbols__fixup_end(struct rb_root *self)
 {
        struct rb_node *nd, *prevnd = rb_first(self);
@@ -327,10 +337,7 @@ static int dso__load_all_kallsyms(struct dso *self, struct map *map)
                        continue;
 
                symbol_type = toupper(line[len]);
-               /*
-                * We're interested only in code ('T'ext)
-                */
-               if (symbol_type != 'T' && symbol_type != 'W')
+               if (!symbol_type__is_a(symbol_type, map->type))
                        continue;
 
                symbol_name = line + len + 2;