diff options
author | Ingo Molnar <mingo@elte.hu> | 2010-12-23 08:19:45 -0500 |
---|---|---|
committer | Ingo Molnar <mingo@elte.hu> | 2010-12-23 08:20:21 -0500 |
commit | 104db7ff1d9d01a03a2568a156b19e1fd972e8bf (patch) | |
tree | 838e7f4c1cce62d44edfc31f4463d7b599ce23b6 /tools/perf/builtin-test.c | |
parent | 4a7863cc2eb5f9804f1c4e9156619a801cd7f14f (diff) | |
parent | 32b2b6ec57a3adb3ab7215fbf36ec61c15de06ee (diff) |
Merge branch 'perf/core' of git://git.kernel.org/pub/scm/linux/kernel/git/acme/linux-2.6 into perf/core
Diffstat (limited to 'tools/perf/builtin-test.c')
-rw-r--r-- | tools/perf/builtin-test.c | 23 |
1 files changed, 19 insertions, 4 deletions
diff --git a/tools/perf/builtin-test.c b/tools/perf/builtin-test.c index 035b9fa063a9..e0c3f471f22d 100644 --- a/tools/perf/builtin-test.c +++ b/tools/perf/builtin-test.c | |||
@@ -119,10 +119,16 @@ static int test__vmlinux_matches_kallsyms(void) | |||
119 | * end addresses too. | 119 | * end addresses too. |
120 | */ | 120 | */ |
121 | for (nd = rb_first(&vmlinux_map->dso->symbols[type]); nd; nd = rb_next(nd)) { | 121 | for (nd = rb_first(&vmlinux_map->dso->symbols[type]); nd; nd = rb_next(nd)) { |
122 | struct symbol *pair; | 122 | struct symbol *pair, *first_pair; |
123 | bool backwards = true; | ||
123 | 124 | ||
124 | sym = rb_entry(nd, struct symbol, rb_node); | 125 | sym = rb_entry(nd, struct symbol, rb_node); |
125 | pair = machine__find_kernel_symbol(&kallsyms, type, sym->start, NULL, NULL); | 126 | |
127 | if (sym->start == sym->end) | ||
128 | continue; | ||
129 | |||
130 | first_pair = machine__find_kernel_symbol(&kallsyms, type, sym->start, NULL, NULL); | ||
131 | pair = first_pair; | ||
126 | 132 | ||
127 | if (pair && pair->start == sym->start) { | 133 | if (pair && pair->start == sym->start) { |
128 | next_pair: | 134 | next_pair: |
@@ -143,8 +149,10 @@ next_pair: | |||
143 | pr_debug("%#Lx: diff end addr for %s v: %#Lx k: %#Lx\n", | 149 | pr_debug("%#Lx: diff end addr for %s v: %#Lx k: %#Lx\n", |
144 | sym->start, sym->name, sym->end, pair->end); | 150 | sym->start, sym->name, sym->end, pair->end); |
145 | } else { | 151 | } else { |
146 | struct rb_node *nnd = rb_prev(&pair->rb_node); | 152 | struct rb_node *nnd; |
147 | 153 | detour: | |
154 | nnd = backwards ? rb_prev(&pair->rb_node) : | ||
155 | rb_next(&pair->rb_node); | ||
148 | if (nnd) { | 156 | if (nnd) { |
149 | struct symbol *next = rb_entry(nnd, struct symbol, rb_node); | 157 | struct symbol *next = rb_entry(nnd, struct symbol, rb_node); |
150 | 158 | ||
@@ -153,6 +161,13 @@ next_pair: | |||
153 | goto next_pair; | 161 | goto next_pair; |
154 | } | 162 | } |
155 | } | 163 | } |
164 | |||
165 | if (backwards) { | ||
166 | backwards = false; | ||
167 | pair = first_pair; | ||
168 | goto detour; | ||
169 | } | ||
170 | |||
156 | pr_debug("%#Lx: diff name v: %s k: %s\n", | 171 | pr_debug("%#Lx: diff name v: %s k: %s\n", |
157 | sym->start, sym->name, pair->name); | 172 | sym->start, sym->name, pair->name); |
158 | } | 173 | } |