aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAdrian Hunter <adrian.hunter@intel.com>2014-07-14 06:02:50 -0400
committerArnaldo Carvalho de Melo <acme@redhat.com>2014-07-16 16:57:35 -0400
commit9c00a81b6aafc4ed375a43e7a54e6cf2d720c7c6 (patch)
tree829d9d0c0c23acdaaa9fc1a5dbec7e5e5b36adba
parentbdac0bcf779250e89b96d4a3f381ebaf02c2f4a9 (diff)
perf symbols: Add ability to iterate over a dso's symbols
Expose dso__first_symbol() and dso__next_symbol() to make it possible to iterate over a dso's symbols. Signed-off-by: Adrian Hunter <adrian.hunter@intel.com> Cc: David Ahern <dsahern@gmail.com> Cc: Frederic Weisbecker <fweisbec@gmail.com> Cc: Jiri Olsa <jolsa@redhat.com> Cc: Namhyung Kim <namhyung@gmail.com> Cc: Paul Mackerras <paulus@samba.org> Cc: Peter Zijlstra <peterz@infradead.org> Cc: Stephane Eranian <eranian@google.com> Link: http://lkml.kernel.org/r/1405332185-4050-27-git-send-email-adrian.hunter@intel.com Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
-rw-r--r--tools/perf/util/symbol.c17
-rw-r--r--tools/perf/util/symbol.h3
2 files changed, 19 insertions, 1 deletions
diff --git a/tools/perf/util/symbol.c b/tools/perf/util/symbol.c
index 156ae36dfcfc..eb06746b06b2 100644
--- a/tools/perf/util/symbol.c
+++ b/tools/perf/util/symbol.c
@@ -342,6 +342,16 @@ static struct symbol *symbols__first(struct rb_root *symbols)
342 return NULL; 342 return NULL;
343} 343}
344 344
345static struct symbol *symbols__next(struct symbol *sym)
346{
347 struct rb_node *n = rb_next(&sym->rb_node);
348
349 if (n)
350 return rb_entry(n, struct symbol, rb_node);
351
352 return NULL;
353}
354
345struct symbol_name_rb_node { 355struct symbol_name_rb_node {
346 struct rb_node rb_node; 356 struct rb_node rb_node;
347 struct symbol sym; 357 struct symbol sym;
@@ -412,11 +422,16 @@ struct symbol *dso__find_symbol(struct dso *dso,
412 return symbols__find(&dso->symbols[type], addr); 422 return symbols__find(&dso->symbols[type], addr);
413} 423}
414 424
415static struct symbol *dso__first_symbol(struct dso *dso, enum map_type type) 425struct symbol *dso__first_symbol(struct dso *dso, enum map_type type)
416{ 426{
417 return symbols__first(&dso->symbols[type]); 427 return symbols__first(&dso->symbols[type]);
418} 428}
419 429
430struct symbol *dso__next_symbol(struct symbol *sym)
431{
432 return symbols__next(sym);
433}
434
420struct symbol *dso__find_symbol_by_name(struct dso *dso, enum map_type type, 435struct symbol *dso__find_symbol_by_name(struct dso *dso, enum map_type type,
421 const char *name) 436 const char *name)
422{ 437{
diff --git a/tools/perf/util/symbol.h b/tools/perf/util/symbol.h
index 436169dd1d84..ee2d3ccd3ad1 100644
--- a/tools/perf/util/symbol.h
+++ b/tools/perf/util/symbol.h
@@ -240,6 +240,9 @@ struct symbol *dso__find_symbol(struct dso *dso, enum map_type type,
240struct symbol *dso__find_symbol_by_name(struct dso *dso, enum map_type type, 240struct symbol *dso__find_symbol_by_name(struct dso *dso, enum map_type type,
241 const char *name); 241 const char *name);
242 242
243struct symbol *dso__first_symbol(struct dso *dso, enum map_type type);
244struct symbol *dso__next_symbol(struct symbol *sym);
245
243int filename__read_build_id(const char *filename, void *bf, size_t size); 246int filename__read_build_id(const char *filename, void *bf, size_t size);
244int sysfs__read_build_id(const char *filename, void *bf, size_t size); 247int sysfs__read_build_id(const char *filename, void *bf, size_t size);
245int modules__parse(const char *filename, void *arg, 248int modules__parse(const char *filename, void *arg,