diff options
| -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 | } |
