~ubuntu-branches/debian/experimental/linux-tools/experimental

« back to all changes in this revision

Viewing changes to tools/perf/ui/browsers/map.c

  • Committer: Package Import Robot
  • Author(s): Ben Hutchings
  • Date: 2014-02-02 16:57:49 UTC
  • mfrom: (1.1.10) (0.1.21 sid)
  • Revision ID: package-import@ubuntu.com-20140202165749-tw94o9t1t0a8txk6
Tags: 3.13-1~exp2
Merge changes from sid up to 3.12.6-3

Show diffs side-by-side

added added

removed removed

Lines of Context:
18
18
        u8                addrlen;
19
19
};
20
20
 
21
 
static void map_browser__write(struct ui_browser *self, void *nd, int row)
 
21
static void map_browser__write(struct ui_browser *browser, void *nd, int row)
22
22
{
23
23
        struct symbol *sym = rb_entry(nd, struct symbol, rb_node);
24
 
        struct map_browser *mb = container_of(self, struct map_browser, b);
25
 
        bool current_entry = ui_browser__is_current_entry(self, row);
 
24
        struct map_browser *mb = container_of(browser, struct map_browser, b);
 
25
        bool current_entry = ui_browser__is_current_entry(browser, row);
26
26
        int width;
27
27
 
28
 
        ui_browser__set_percent_color(self, 0, current_entry);
 
28
        ui_browser__set_percent_color(browser, 0, current_entry);
29
29
        slsmg_printf("%*" PRIx64 " %*" PRIx64 " %c ",
30
30
                     mb->addrlen, sym->start, mb->addrlen, sym->end,
31
31
                     sym->binding == STB_GLOBAL ? 'g' :
32
32
                     sym->binding == STB_LOCAL  ? 'l' : 'w');
33
 
        width = self->width - ((mb->addrlen * 2) + 4);
 
33
        width = browser->width - ((mb->addrlen * 2) + 4);
34
34
        if (width > 0)
35
35
                slsmg_write_nstring(sym->name, width);
36
36
}
37
37
 
38
38
/* FIXME uber-kludgy, see comment on cmd_report... */
39
 
static u32 *symbol__browser_index(struct symbol *self)
 
39
static u32 *symbol__browser_index(struct symbol *browser)
40
40
{
41
 
        return ((void *)self) - sizeof(struct rb_node) - sizeof(u32);
 
41
        return ((void *)browser) - sizeof(struct rb_node) - sizeof(u32);
42
42
}
43
43
 
44
 
static int map_browser__search(struct map_browser *self)
 
44
static int map_browser__search(struct map_browser *browser)
45
45
{
46
46
        char target[512];
47
47
        struct symbol *sym;
53
53
 
54
54
        if (target[0] == '0' && tolower(target[1]) == 'x') {
55
55
                u64 addr = strtoull(target, NULL, 16);
56
 
                sym = map__find_symbol(self->map, addr, NULL);
 
56
                sym = map__find_symbol(browser->map, addr, NULL);
57
57
        } else
58
 
                sym = map__find_symbol_by_name(self->map, target, NULL);
 
58
                sym = map__find_symbol_by_name(browser->map, target, NULL);
59
59
 
60
60
        if (sym != NULL) {
61
61
                u32 *idx = symbol__browser_index(sym);
62
62
 
63
 
                self->b.top = &sym->rb_node;
64
 
                self->b.index = self->b.top_idx = *idx;
 
63
                browser->b.top = &sym->rb_node;
 
64
                browser->b.index = browser->b.top_idx = *idx;
65
65
        } else
66
66
                ui_helpline__fpush("%s not found!", target);
67
67
 
68
68
        return 0;
69
69
}
70
70
 
71
 
static int map_browser__run(struct map_browser *self)
 
71
static int map_browser__run(struct map_browser *browser)
72
72
{
73
73
        int key;
74
74
 
75
 
        if (ui_browser__show(&self->b, self->map->dso->long_name,
 
75
        if (ui_browser__show(&browser->b, browser->map->dso->long_name,
76
76
                             "Press <- or ESC to exit, %s / to search",
77
77
                             verbose ? "" : "restart with -v to use") < 0)
78
78
                return -1;
79
79
 
80
80
        while (1) {
81
 
                key = ui_browser__run(&self->b, 0);
 
81
                key = ui_browser__run(&browser->b, 0);
82
82
 
83
83
                switch (key) {
84
84
                case '/':
85
85
                        if (verbose)
86
 
                                map_browser__search(self);
 
86
                                map_browser__search(browser);
87
87
                default:
88
88
                        break;
89
89
                case K_LEFT:
94
94
                }
95
95
        }
96
96
out:
97
 
        ui_browser__hide(&self->b);
 
97
        ui_browser__hide(&browser->b);
98
98
        return key;
99
99
}
100
100
 
101
 
int map__browse(struct map *self)
 
101
int map__browse(struct map *map)
102
102
{
103
103
        struct map_browser mb = {
104
104
                .b = {
105
 
                        .entries = &self->dso->symbols[self->type],
 
105
                        .entries = &map->dso->symbols[map->type],
106
106
                        .refresh = ui_browser__rb_tree_refresh,
107
107
                        .seek    = ui_browser__rb_tree_seek,
108
108
                        .write   = map_browser__write,
109
109
                },
110
 
                .map = self,
 
110
                .map = map,
111
111
        };
112
112
        struct rb_node *nd;
113
113
        char tmp[BITS_PER_LONG / 4];