[PATCH 09/17] perf, tool: Factor DSO symtab types to generic binary types

2012-07-22 Thread Jiri Olsa
Adding interface to access DSOs so it could be used
from another place.

New DSO binary type is added - making current SYMTAB__*
types more general:
   DSO_BINARY_TYPE__* = SYMTAB__*

Following function is added to return path based on the specified
binary type:
   dso__binary_type_file

Signed-off-by: Jiri Olsa 
---
 tools/perf/builtin-top.c   |2 +-
 tools/perf/util/annotate.c |2 +-
 tools/perf/util/symbol.c   |  209 ++--
 tools/perf/util/symbol.h   |   34 
 4 files changed, 145 insertions(+), 102 deletions(-)

diff --git a/tools/perf/builtin-top.c b/tools/perf/builtin-top.c
index e3cab5f..35e86c6 100644
--- a/tools/perf/builtin-top.c
+++ b/tools/perf/builtin-top.c
@@ -125,7 +125,7 @@ static int perf_top__parse_source(struct perf_top *top, 
struct hist_entry *he)
/*
 * We can't annotate with just /proc/kallsyms
 */
-   if (map->dso->symtab_type == SYMTAB__KALLSYMS) {
+   if (map->dso->symtab_type == DSO_BINARY_TYPE__KALLSYMS) {
pr_err("Can't annotate %s: No vmlinux file was found in the "
   "path\n", sym->name);
sleep(1);
diff --git a/tools/perf/util/annotate.c b/tools/perf/util/annotate.c
index 8069dfb..7d3641f 100644
--- a/tools/perf/util/annotate.c
+++ b/tools/perf/util/annotate.c
@@ -777,7 +777,7 @@ fallback:
free_filename = false;
}
 
-   if (dso->symtab_type == SYMTAB__KALLSYMS) {
+   if (dso->symtab_type == DSO_BINARY_TYPE__KALLSYMS) {
char bf[BUILD_ID_SIZE * 2 + 16] = " with build id ";
char *build_id_msg = NULL;
 
diff --git a/tools/perf/util/symbol.c b/tools/perf/util/symbol.c
index 50958bb..79fc779 100644
--- a/tools/perf/util/symbol.c
+++ b/tools/perf/util/symbol.c
@@ -48,6 +48,23 @@ struct symbol_conf symbol_conf = {
.symfs= "",
 };
 
+static enum dso_binary_type binary_type_symtab[] = {
+   DSO_BINARY_TYPE__KALLSYMS,
+   DSO_BINARY_TYPE__GUEST_KALLSYMS,
+   DSO_BINARY_TYPE__JAVA_JIT,
+   DSO_BINARY_TYPE__DEBUGLINK,
+   DSO_BINARY_TYPE__BUILD_ID_CACHE,
+   DSO_BINARY_TYPE__FEDORA_DEBUGINFO,
+   DSO_BINARY_TYPE__UBUNTU_DEBUGINFO,
+   DSO_BINARY_TYPE__BUILDID_DEBUGINFO,
+   DSO_BINARY_TYPE__SYSTEM_PATH_DSO,
+   DSO_BINARY_TYPE__GUEST_KMODULE,
+   DSO_BINARY_TYPE__SYSTEM_PATH_KMODULE,
+   DSO_BINARY_TYPE__NOT_FOUND,
+};
+
+#define DSO_BINARY_TYPE__SYMTAB_CNT sizeof(binary_type_symtab)
+
 int dso__name_len(const struct dso *dso)
 {
if (!dso)
@@ -318,7 +335,7 @@ struct dso *dso__new(const char *name)
dso__set_short_name(dso, dso->name);
for (i = 0; i < MAP__NR_TYPES; ++i)
dso->symbols[i] = dso->symbol_names[i] = RB_ROOT;
-   dso->symtab_type = SYMTAB__NOT_FOUND;
+   dso->symtab_type = DSO_BINARY_TYPE__NOT_FOUND;
dso->loaded = 0;
dso->sorted_by_name = 0;
dso->has_build_id = 0;
@@ -806,9 +823,9 @@ int dso__load_kallsyms(struct dso *dso, const char 
*filename,
symbols__fixup_end(>symbols[map->type]);
 
if (dso->kernel == DSO_TYPE_GUEST_KERNEL)
-   dso->symtab_type = SYMTAB__GUEST_KALLSYMS;
+   dso->symtab_type = DSO_BINARY_TYPE__GUEST_KALLSYMS;
else
-   dso->symtab_type = SYMTAB__KALLSYMS;
+   dso->symtab_type = DSO_BINARY_TYPE__KALLSYMS;
 
return dso__split_kallsyms(dso, map, filter);
 }
@@ -1660,32 +1677,110 @@ out:
 char dso__symtab_origin(const struct dso *dso)
 {
static const char origin[] = {
-   [SYMTAB__KALLSYMS]= 'k',
-   [SYMTAB__JAVA_JIT]= 'j',
-   [SYMTAB__DEBUGLINK]   = 'l',
-   [SYMTAB__BUILD_ID_CACHE]  = 'B',
-   [SYMTAB__FEDORA_DEBUGINFO]= 'f',
-   [SYMTAB__UBUNTU_DEBUGINFO]= 'u',
-   [SYMTAB__BUILDID_DEBUGINFO]   = 'b',
-   [SYMTAB__SYSTEM_PATH_DSO] = 'd',
-   [SYMTAB__SYSTEM_PATH_KMODULE] = 'K',
-   [SYMTAB__GUEST_KALLSYMS]  =  'g',
-   [SYMTAB__GUEST_KMODULE]   =  'G',
+   [DSO_BINARY_TYPE__KALLSYMS] = 'k',
+   [DSO_BINARY_TYPE__JAVA_JIT] = 'j',
+   [DSO_BINARY_TYPE__DEBUGLINK]= 'l',
+   [DSO_BINARY_TYPE__BUILD_ID_CACHE]   = 'B',
+   [DSO_BINARY_TYPE__FEDORA_DEBUGINFO] = 'f',
+   [DSO_BINARY_TYPE__UBUNTU_DEBUGINFO] = 'u',
+   [DSO_BINARY_TYPE__BUILDID_DEBUGINFO]= 'b',
+   [DSO_BINARY_TYPE__SYSTEM_PATH_DSO]  = 'd',
+   [DSO_BINARY_TYPE__SYSTEM_PATH_KMODULE]  = 'K',
+   [DSO_BINARY_TYPE__GUEST_KALLSYMS]   = 'g',
+   [DSO_BINARY_TYPE__GUEST_KMODULE]= 'G',
};
 
-   if (dso == NULL || dso->symtab_type == 

[PATCH 09/17] perf, tool: Factor DSO symtab types to generic binary types

2012-07-22 Thread Jiri Olsa
Adding interface to access DSOs so it could be used
from another place.

New DSO binary type is added - making current SYMTAB__*
types more general:
   DSO_BINARY_TYPE__* = SYMTAB__*

Following function is added to return path based on the specified
binary type:
   dso__binary_type_file

Signed-off-by: Jiri Olsa jo...@redhat.com
---
 tools/perf/builtin-top.c   |2 +-
 tools/perf/util/annotate.c |2 +-
 tools/perf/util/symbol.c   |  209 ++--
 tools/perf/util/symbol.h   |   34 
 4 files changed, 145 insertions(+), 102 deletions(-)

diff --git a/tools/perf/builtin-top.c b/tools/perf/builtin-top.c
index e3cab5f..35e86c6 100644
--- a/tools/perf/builtin-top.c
+++ b/tools/perf/builtin-top.c
@@ -125,7 +125,7 @@ static int perf_top__parse_source(struct perf_top *top, 
struct hist_entry *he)
/*
 * We can't annotate with just /proc/kallsyms
 */
-   if (map-dso-symtab_type == SYMTAB__KALLSYMS) {
+   if (map-dso-symtab_type == DSO_BINARY_TYPE__KALLSYMS) {
pr_err(Can't annotate %s: No vmlinux file was found in the 
   path\n, sym-name);
sleep(1);
diff --git a/tools/perf/util/annotate.c b/tools/perf/util/annotate.c
index 8069dfb..7d3641f 100644
--- a/tools/perf/util/annotate.c
+++ b/tools/perf/util/annotate.c
@@ -777,7 +777,7 @@ fallback:
free_filename = false;
}
 
-   if (dso-symtab_type == SYMTAB__KALLSYMS) {
+   if (dso-symtab_type == DSO_BINARY_TYPE__KALLSYMS) {
char bf[BUILD_ID_SIZE * 2 + 16] =  with build id ;
char *build_id_msg = NULL;
 
diff --git a/tools/perf/util/symbol.c b/tools/perf/util/symbol.c
index 50958bb..79fc779 100644
--- a/tools/perf/util/symbol.c
+++ b/tools/perf/util/symbol.c
@@ -48,6 +48,23 @@ struct symbol_conf symbol_conf = {
.symfs= ,
 };
 
+static enum dso_binary_type binary_type_symtab[] = {
+   DSO_BINARY_TYPE__KALLSYMS,
+   DSO_BINARY_TYPE__GUEST_KALLSYMS,
+   DSO_BINARY_TYPE__JAVA_JIT,
+   DSO_BINARY_TYPE__DEBUGLINK,
+   DSO_BINARY_TYPE__BUILD_ID_CACHE,
+   DSO_BINARY_TYPE__FEDORA_DEBUGINFO,
+   DSO_BINARY_TYPE__UBUNTU_DEBUGINFO,
+   DSO_BINARY_TYPE__BUILDID_DEBUGINFO,
+   DSO_BINARY_TYPE__SYSTEM_PATH_DSO,
+   DSO_BINARY_TYPE__GUEST_KMODULE,
+   DSO_BINARY_TYPE__SYSTEM_PATH_KMODULE,
+   DSO_BINARY_TYPE__NOT_FOUND,
+};
+
+#define DSO_BINARY_TYPE__SYMTAB_CNT sizeof(binary_type_symtab)
+
 int dso__name_len(const struct dso *dso)
 {
if (!dso)
@@ -318,7 +335,7 @@ struct dso *dso__new(const char *name)
dso__set_short_name(dso, dso-name);
for (i = 0; i  MAP__NR_TYPES; ++i)
dso-symbols[i] = dso-symbol_names[i] = RB_ROOT;
-   dso-symtab_type = SYMTAB__NOT_FOUND;
+   dso-symtab_type = DSO_BINARY_TYPE__NOT_FOUND;
dso-loaded = 0;
dso-sorted_by_name = 0;
dso-has_build_id = 0;
@@ -806,9 +823,9 @@ int dso__load_kallsyms(struct dso *dso, const char 
*filename,
symbols__fixup_end(dso-symbols[map-type]);
 
if (dso-kernel == DSO_TYPE_GUEST_KERNEL)
-   dso-symtab_type = SYMTAB__GUEST_KALLSYMS;
+   dso-symtab_type = DSO_BINARY_TYPE__GUEST_KALLSYMS;
else
-   dso-symtab_type = SYMTAB__KALLSYMS;
+   dso-symtab_type = DSO_BINARY_TYPE__KALLSYMS;
 
return dso__split_kallsyms(dso, map, filter);
 }
@@ -1660,32 +1677,110 @@ out:
 char dso__symtab_origin(const struct dso *dso)
 {
static const char origin[] = {
-   [SYMTAB__KALLSYMS]= 'k',
-   [SYMTAB__JAVA_JIT]= 'j',
-   [SYMTAB__DEBUGLINK]   = 'l',
-   [SYMTAB__BUILD_ID_CACHE]  = 'B',
-   [SYMTAB__FEDORA_DEBUGINFO]= 'f',
-   [SYMTAB__UBUNTU_DEBUGINFO]= 'u',
-   [SYMTAB__BUILDID_DEBUGINFO]   = 'b',
-   [SYMTAB__SYSTEM_PATH_DSO] = 'd',
-   [SYMTAB__SYSTEM_PATH_KMODULE] = 'K',
-   [SYMTAB__GUEST_KALLSYMS]  =  'g',
-   [SYMTAB__GUEST_KMODULE]   =  'G',
+   [DSO_BINARY_TYPE__KALLSYMS] = 'k',
+   [DSO_BINARY_TYPE__JAVA_JIT] = 'j',
+   [DSO_BINARY_TYPE__DEBUGLINK]= 'l',
+   [DSO_BINARY_TYPE__BUILD_ID_CACHE]   = 'B',
+   [DSO_BINARY_TYPE__FEDORA_DEBUGINFO] = 'f',
+   [DSO_BINARY_TYPE__UBUNTU_DEBUGINFO] = 'u',
+   [DSO_BINARY_TYPE__BUILDID_DEBUGINFO]= 'b',
+   [DSO_BINARY_TYPE__SYSTEM_PATH_DSO]  = 'd',
+   [DSO_BINARY_TYPE__SYSTEM_PATH_KMODULE]  = 'K',
+   [DSO_BINARY_TYPE__GUEST_KALLSYMS]   = 'g',
+   [DSO_BINARY_TYPE__GUEST_KMODULE]= 'G',
};
 
-   if (dso == NULL || dso-symtab_type ==