perf annotate: Adopt anotation options from symbol_conf
[linux-2.6-microblaze.git] / tools / perf / util / symbol.c
index 1466814..3f632c6 100644 (file)
@@ -5,6 +5,7 @@
 #include <stdio.h>
 #include <string.h>
 #include <linux/kernel.h>
+#include <linux/mman.h>
 #include <sys/types.h>
 #include <sys/stat.h>
 #include <sys/param.h>
@@ -39,7 +40,6 @@ char **vmlinux_path;
 struct symbol_conf symbol_conf = {
        .use_modules            = true,
        .try_vmlinux_path       = true,
-       .annotate_src           = true,
        .demangle               = true,
        .demangle_kernel        = false,
        .cumulate_callchain     = true,
@@ -70,18 +70,10 @@ static enum dso_binary_type binary_type_symtab[] = {
 
 #define DSO_BINARY_TYPE__SYMTAB_CNT ARRAY_SIZE(binary_type_symtab)
 
-bool symbol_type__is_a(char symbol_type, enum map_type map_type)
+static bool symbol_type__filter(char symbol_type)
 {
        symbol_type = toupper(symbol_type);
-
-       switch (map_type) {
-       case MAP__FUNCTION:
-               return symbol_type == 'T' || symbol_type == 'W';
-       case MAP__VARIABLE:
-               return symbol_type == 'D';
-       default:
-               return false;
-       }
+       return symbol_type == 'T' || symbol_type == 'W' || symbol_type == 'D';
 }
 
 static int prefix_underscores_count(const char *str)
@@ -228,9 +220,9 @@ void symbols__fixup_end(struct rb_root *symbols)
                curr->end = roundup(curr->start, 4096) + 4096;
 }
 
-void __map_groups__fixup_end(struct map_groups *mg, enum map_type type)
+void map_groups__fixup_end(struct map_groups *mg)
 {
-       struct maps *maps = &mg->maps[type];
+       struct maps *maps = &mg->maps;
        struct map *next, *curr;
 
        down_write(&maps->lock);
@@ -256,7 +248,7 @@ out_unlock:
        up_write(&maps->lock);
 }
 
-struct symbol *symbol__new(u64 start, u64 len, u8 binding, const char *name)
+struct symbol *symbol__new(u64 start, u64 len, u8 binding, u8 type, const char *name)
 {
        size_t namelen = strlen(name) + 1;
        struct symbol *sym = calloc(1, (symbol_conf.priv_size +
@@ -274,6 +266,7 @@ struct symbol *symbol__new(u64 start, u64 len, u8 binding, const char *name)
 
        sym->start   = start;
        sym->end     = len ? start + len : start;
+       sym->type    = type;
        sym->binding = binding;
        sym->namelen = namelen - 1;
 
@@ -484,45 +477,40 @@ static struct symbol *symbols__find_by_name(struct rb_root *symbols,
 
 void dso__reset_find_symbol_cache(struct dso *dso)
 {
-       enum map_type type;
-
-       for (type = MAP__FUNCTION; type <= MAP__VARIABLE; ++type) {
-               dso->last_find_result[type].addr   = 0;
-               dso->last_find_result[type].symbol = NULL;
-       }
+       dso->last_find_result.addr   = 0;
+       dso->last_find_result.symbol = NULL;
 }
 
-void dso__insert_symbol(struct dso *dso, enum map_type type, struct symbol *sym)
+void dso__insert_symbol(struct dso *dso, struct symbol *sym)
 {
-       __symbols__insert(&dso->symbols[type], sym, dso->kernel);
+       __symbols__insert(&dso->symbols, sym, dso->kernel);
 
        /* update the symbol cache if necessary */
-       if (dso->last_find_result[type].addr >= sym->start &&
-           (dso->last_find_result[type].addr < sym->end ||
+       if (dso->last_find_result.addr >= sym->start &&
+           (dso->last_find_result.addr < sym->end ||
            sym->start == sym->end)) {
-               dso->last_find_result[type].symbol = sym;
+               dso->last_find_result.symbol = sym;
        }
 }
 
-struct symbol *dso__find_symbol(struct dso *dso,
-                               enum map_type type, u64 addr)
+struct symbol *dso__find_symbol(struct dso *dso, u64 addr)
 {
-       if (dso->last_find_result[type].addr != addr || dso->last_find_result[type].symbol == NULL) {
-               dso->last_find_result[type].addr   = addr;
-               dso->last_find_result[type].symbol = symbols__find(&dso->symbols[type], addr);
+       if (dso->last_find_result.addr != addr || dso->last_find_result.symbol == NULL) {
+               dso->last_find_result.addr   = addr;
+               dso->last_find_result.symbol = symbols__find(&dso->symbols, addr);
        }
 
-       return dso->last_find_result[type].symbol;
+       return dso->last_find_result.symbol;
 }
 
-struct symbol *dso__first_symbol(struct dso *dso, enum map_type type)
+struct symbol *dso__first_symbol(struct dso *dso)
 {
-       return symbols__first(&dso->symbols[type]);
+       return symbols__first(&dso->symbols);
 }
 
-struct symbol *dso__last_symbol(struct dso *dso, enum map_type type)
+struct symbol *dso__last_symbol(struct dso *dso)
 {
-       return symbols__last(&dso->symbols[type]);
+       return symbols__last(&dso->symbols);
 }
 
 struct symbol *dso__next_symbol(struct symbol *sym)
@@ -539,24 +527,22 @@ struct symbol *symbol__next_by_name(struct symbol *sym)
 }
 
  /*
-  * Teturns first symbol that matched with @name.
+  * Returns first symbol that matched with @name.
   */
-struct symbol *dso__find_symbol_by_name(struct dso *dso, enum map_type type,
-                                       const char *name)
+struct symbol *dso__find_symbol_by_name(struct dso *dso, const char *name)
 {
-       struct symbol *s = symbols__find_by_name(&dso->symbol_names[type], name,
+       struct symbol *s = symbols__find_by_name(&dso->symbol_names, name,
                                                 SYMBOL_TAG_INCLUDE__NONE);
        if (!s)
-               s = symbols__find_by_name(&dso->symbol_names[type], name,
+               s = symbols__find_by_name(&dso->symbol_names, name,
                                          SYMBOL_TAG_INCLUDE__DEFAULT_ONLY);
        return s;
 }
 
-void dso__sort_by_name(struct dso *dso, enum map_type type)
+void dso__sort_by_name(struct dso *dso)
 {
-       dso__set_sorted_by_name(dso, type);
-       return symbols__sort_by_name(&dso->symbol_names[type],
-                                    &dso->symbols[type]);
+       dso__set_sorted_by_name(dso);
+       return symbols__sort_by_name(&dso->symbol_names, &dso->symbols);
 }
 
 int modules__parse(const char *filename, void *arg,
@@ -621,11 +607,6 @@ out:
        return err;
 }
 
-struct process_kallsyms_args {
-       struct map *map;
-       struct dso *dso;
-};
-
 /*
  * These are symbols in the kernel image, so make sure that
  * sym is from a kernel DSO.
@@ -661,10 +642,10 @@ static int map__process_kallsym_symbol(void *arg, const char *name,
                                       char type, u64 start)
 {
        struct symbol *sym;
-       struct process_kallsyms_args *a = arg;
-       struct rb_root *root = &a->dso->symbols[a->map->type];
+       struct dso *dso = arg;
+       struct rb_root *root = &dso->symbols;
 
-       if (!symbol_type__is_a(type, a->map->type))
+       if (!symbol_type__filter(type))
                return 0;
 
        /*
@@ -672,7 +653,7 @@ static int map__process_kallsym_symbol(void *arg, const char *name,
         * symbols, setting length to 0, and rely on
         * symbols__fixup_end() to fix it up.
         */
-       sym = symbol__new(start, 0, kallsyms2elf_binding(type), name);
+       sym = symbol__new(start, 0, kallsyms2elf_binding(type), kallsyms2elf_type(type), name);
        if (sym == NULL)
                return -ENOMEM;
        /*
@@ -689,21 +670,18 @@ static int map__process_kallsym_symbol(void *arg, const char *name,
  * so that we can in the next step set the symbol ->end address and then
  * call kernel_maps__split_kallsyms.
  */
-static int dso__load_all_kallsyms(struct dso *dso, const char *filename,
-                                 struct map *map)
+static int dso__load_all_kallsyms(struct dso *dso, const char *filename)
 {
-       struct process_kallsyms_args args = { .map = map, .dso = dso, };
-       return kallsyms__parse(filename, &args, map__process_kallsym_symbol);
+       return kallsyms__parse(filename, dso, map__process_kallsym_symbol);
 }
 
-static int dso__split_kallsyms_for_kcore(struct dso *dso, struct map *map)
+static int map_groups__split_kallsyms_for_kcore(struct map_groups *kmaps, struct dso *dso)
 {
-       struct map_groups *kmaps = map__kmaps(map);
        struct map *curr_map;
        struct symbol *pos;
        int count = 0;
-       struct rb_root old_root = dso->symbols[map->type];
-       struct rb_root *root = &dso->symbols[map->type];
+       struct rb_root old_root = dso->symbols;
+       struct rb_root *root = &dso->symbols;
        struct rb_node *next = rb_first(root);
 
        if (!kmaps)
@@ -723,7 +701,7 @@ static int dso__split_kallsyms_for_kcore(struct dso *dso, struct map *map)
                if (module)
                        *module = '\0';
 
-               curr_map = map_groups__find(kmaps, map->type, pos->start);
+               curr_map = map_groups__find(kmaps, pos->start);
 
                if (!curr_map) {
                        symbol__delete(pos);
@@ -733,7 +711,7 @@ static int dso__split_kallsyms_for_kcore(struct dso *dso, struct map *map)
                pos->start -= curr_map->start - curr_map->pgoff;
                if (pos->end)
                        pos->end -= curr_map->start - curr_map->pgoff;
-               symbols__insert(&curr_map->dso->symbols[curr_map->type], pos);
+               symbols__insert(&curr_map->dso->symbols, pos);
                ++count;
        }
 
@@ -748,22 +726,25 @@ static int dso__split_kallsyms_for_kcore(struct dso *dso, struct map *map)
  * kernel range is broken in several maps, named [kernel].N, as we don't have
  * the original ELF section names vmlinux have.
  */
-static int dso__split_kallsyms(struct dso *dso, struct map *map, u64 delta)
+static int map_groups__split_kallsyms(struct map_groups *kmaps, struct dso *dso, u64 delta,
+                                     struct map *initial_map)
 {
-       struct map_groups *kmaps = map__kmaps(map);
        struct machine *machine;
-       struct map *curr_map = map;
+       struct map *curr_map = initial_map;
        struct symbol *pos;
        int count = 0, moved = 0;
-       struct rb_root *root = &dso->symbols[map->type];
+       struct rb_root *root = &dso->symbols;
        struct rb_node *next = rb_first(root);
        int kernel_range = 0;
+       bool x86_64;
 
        if (!kmaps)
                return -1;
 
        machine = kmaps->machine;
 
+       x86_64 = machine__is(machine, "x86_64");
+
        while (next) {
                char *module;
 
@@ -778,7 +759,7 @@ static int dso__split_kallsyms(struct dso *dso, struct map *map, u64 delta)
                        *module++ = '\0';
 
                        if (strcmp(curr_map->dso->short_name, module)) {
-                               if (curr_map != map &&
+                               if (curr_map != initial_map &&
                                    dso->kernel == DSO_TYPE_GUEST_KERNEL &&
                                    machine__is_default_guest(machine)) {
                                        /*
@@ -788,18 +769,16 @@ static int dso__split_kallsyms(struct dso *dso, struct map *map, u64 delta)
                                         * symbols are in its kmap. Mark it as
                                         * loaded.
                                         */
-                                       dso__set_loaded(curr_map->dso,
-                                                       curr_map->type);
+                                       dso__set_loaded(curr_map->dso);
                                }
 
-                               curr_map = map_groups__find_by_name(kmaps,
-                                                       map->type, module);
+                               curr_map = map_groups__find_by_name(kmaps, module);
                                if (curr_map == NULL) {
                                        pr_debug("%s/proc/{kallsyms,modules} "
                                                 "inconsistency while looking "
                                                 "for \"%s\" module!\n",
                                                 machine->root_dir, module);
-                                       curr_map = map;
+                                       curr_map = initial_map;
                                        goto discard_symbol;
                                }
 
@@ -809,11 +788,21 @@ static int dso__split_kallsyms(struct dso *dso, struct map *map, u64 delta)
                        }
                        /*
                         * So that we look just like we get from .ko files,
-                        * i.e. not prelinked, relative to map->start.
+                        * i.e. not prelinked, relative to initial_map->start.
                         */
                        pos->start = curr_map->map_ip(curr_map, pos->start);
                        pos->end   = curr_map->map_ip(curr_map, pos->end);
-               } else if (curr_map != map) {
+               } else if (x86_64 && is_entry_trampoline(pos->name)) {
+                       /*
+                        * These symbols are not needed anymore since the
+                        * trampoline maps refer to the text section and it's
+                        * symbols instead. Avoid having to deal with
+                        * relocations, and the assumption that the first symbol
+                        * is the start of kernel text, by simply removing the
+                        * symbols at this point.
+                        */
+                       goto discard_symbol;
+               } else if (curr_map != initial_map) {
                        char dso_name[PATH_MAX];
                        struct dso *ndso;
 
@@ -824,7 +813,7 @@ static int dso__split_kallsyms(struct dso *dso, struct map *map, u64 delta)
                        }
 
                        if (count == 0) {
-                               curr_map = map;
+                               curr_map = initial_map;
                                goto add_symbol;
                        }
 
@@ -843,7 +832,7 @@ static int dso__split_kallsyms(struct dso *dso, struct map *map, u64 delta)
 
                        ndso->kernel = dso->kernel;
 
-                       curr_map = map__new2(pos->start, ndso, map->type);
+                       curr_map = map__new2(pos->start, ndso);
                        if (curr_map == NULL) {
                                dso__put(ndso);
                                return -1;
@@ -858,9 +847,9 @@ static int dso__split_kallsyms(struct dso *dso, struct map *map, u64 delta)
                        pos->end -= delta;
                }
 add_symbol:
-               if (curr_map != map) {
+               if (curr_map != initial_map) {
                        rb_erase(&pos->rb_node, root);
-                       symbols__insert(&curr_map->dso->symbols[curr_map->type], pos);
+                       symbols__insert(&curr_map->dso->symbols, pos);
                        ++moved;
                } else
                        ++count;
@@ -871,10 +860,10 @@ discard_symbol:
                symbol__delete(pos);
        }
 
-       if (curr_map != map &&
+       if (curr_map != initial_map &&
            dso->kernel == DSO_TYPE_GUEST_KERNEL &&
            machine__is_default_guest(kmaps->machine)) {
-               dso__set_loaded(curr_map->dso, curr_map->type);
+               dso__set_loaded(curr_map->dso);
        }
 
        return count + moved;
@@ -1035,7 +1024,12 @@ out_delete_from:
        return ret;
 }
 
-static int do_validate_kcore_modules(const char *filename, struct map *map,
+struct map *map_groups__first(struct map_groups *mg)
+{
+       return maps__first(&mg->maps);
+}
+
+static int do_validate_kcore_modules(const char *filename,
                                  struct map_groups *kmaps)
 {
        struct rb_root modules = RB_ROOT;
@@ -1046,13 +1040,12 @@ static int do_validate_kcore_modules(const char *filename, struct map *map,
        if (err)
                return err;
 
-       old_map = map_groups__first(kmaps, map->type);
+       old_map = map_groups__first(kmaps);
        while (old_map) {
                struct map *next = map_groups__next(old_map);
                struct module_info *mi;
 
-               if (old_map == map || old_map->start == map->start) {
-                       /* The kernel map */
+               if (!__map__is_kmodule(old_map)) {
                        old_map = next;
                        continue;
                }
@@ -1109,7 +1102,7 @@ static int validate_kcore_modules(const char *kallsyms_filename,
                                             kallsyms_filename))
                return -EINVAL;
 
-       if (do_validate_kcore_modules(modules_filename, map, kmaps))
+       if (do_validate_kcore_modules(modules_filename, kmaps))
                return -EINVAL;
 
        return 0;
@@ -1138,7 +1131,6 @@ static int validate_kcore_addresses(const char *kallsyms_filename,
 
 struct kcore_mapfn_data {
        struct dso *dso;
-       enum map_type type;
        struct list_head maps;
 };
 
@@ -1147,7 +1139,7 @@ static int kcore_mapfn(u64 start, u64 len, u64 pgoff, void *data)
        struct kcore_mapfn_data *md = data;
        struct map *map;
 
-       map = map__new2(start, md->dso, md->type);
+       map = map__new2(start, md->dso);
        if (map == NULL)
                return -ENOMEM;
 
@@ -1163,13 +1155,13 @@ static int dso__load_kcore(struct dso *dso, struct map *map,
                           const char *kallsyms_filename)
 {
        struct map_groups *kmaps = map__kmaps(map);
-       struct machine *machine;
        struct kcore_mapfn_data md;
        struct map *old_map, *new_map, *replacement_map = NULL;
+       struct machine *machine;
        bool is_64_bit;
        int err, fd;
        char kcore_filename[PATH_MAX];
-       struct symbol *sym;
+       u64 stext;
 
        if (!kmaps)
                return -EINVAL;
@@ -1177,7 +1169,7 @@ static int dso__load_kcore(struct dso *dso, struct map *map,
        machine = kmaps->machine;
 
        /* This function requires that the map is the kernel map */
-       if (map != machine->vmlinux_maps[map->type])
+       if (!__map__is_kernel(map))
                return -EINVAL;
 
        if (!filename_from_kallsyms_filename(kcore_filename, "kcore",
@@ -1189,7 +1181,6 @@ static int dso__load_kcore(struct dso *dso, struct map *map,
                return -EINVAL;
 
        md.dso = dso;
-       md.type = map->type;
        INIT_LIST_HEAD(&md.maps);
 
        fd = open(kcore_filename, O_RDONLY);
@@ -1200,7 +1191,7 @@ static int dso__load_kcore(struct dso *dso, struct map *map,
        }
 
        /* Read new maps into temporary lists */
-       err = file__read_maps(fd, md.type == MAP__FUNCTION, kcore_mapfn, &md,
+       err = file__read_maps(fd, map->prot & PROT_EXEC, kcore_mapfn, &md,
                              &is_64_bit);
        if (err)
                goto out_err;
@@ -1212,7 +1203,7 @@ static int dso__load_kcore(struct dso *dso, struct map *map,
        }
 
        /* Remove old maps */
-       old_map = map_groups__first(kmaps, map->type);
+       old_map = map_groups__first(kmaps);
        while (old_map) {
                struct map *next = map_groups__next(old_map);
 
@@ -1220,14 +1211,15 @@ static int dso__load_kcore(struct dso *dso, struct map *map,
                        map_groups__remove(kmaps, old_map);
                old_map = next;
        }
+       machine->trampolines_mapped = false;
 
-       /* Find the kernel map using the first symbol */
-       sym = dso__first_symbol(dso, map->type);
-       list_for_each_entry(new_map, &md.maps, node) {
-               if (sym && sym->start >= new_map->start &&
-                   sym->start < new_map->end) {
-                       replacement_map = new_map;
-                       break;
+       /* Find the kernel map using the '_stext' symbol */
+       if (!kallsyms__get_function_start(kallsyms_filename, "_stext", &stext)) {
+               list_for_each_entry(new_map, &md.maps, node) {
+                       if (stext >= new_map->start && stext < new_map->end) {
+                               replacement_map = new_map;
+                               break;
+                       }
                }
        }
 
@@ -1256,6 +1248,19 @@ static int dso__load_kcore(struct dso *dso, struct map *map,
                map__put(new_map);
        }
 
+       if (machine__is(machine, "x86_64")) {
+               u64 addr;
+
+               /*
+                * If one of the corresponding symbols is there, assume the
+                * entry trampoline maps are too.
+                */
+               if (!kallsyms__get_function_start(kallsyms_filename,
+                                                 ENTRY_TRAMPOLINE_NAME,
+                                                 &addr))
+                       machine->trampolines_mapped = true;
+       }
+
        /*
         * Set the data type and long name so that kcore can be read via
         * dso__data_read_addr().
@@ -1268,7 +1273,7 @@ static int dso__load_kcore(struct dso *dso, struct map *map,
 
        close(fd);
 
-       if (map->type == MAP__FUNCTION)
+       if (map->prot & PROT_EXEC)
                pr_debug("Using %s for kernel object code\n", kcore_filename);
        else
                pr_debug("Using %s for kernel data\n", kcore_filename);
@@ -1289,14 +1294,10 @@ out_err:
  * If the kernel is relocated at boot time, kallsyms won't match.  Compute the
  * delta based on the relocation reference symbol.
  */
-static int kallsyms__delta(struct map *map, const char *filename, u64 *delta)
+static int kallsyms__delta(struct kmap *kmap, const char *filename, u64 *delta)
 {
-       struct kmap *kmap = map__kmap(map);
        u64 addr;
 
-       if (!kmap)
-               return -1;
-
        if (!kmap->ref_reloc_sym || !kmap->ref_reloc_sym->name)
                return 0;
 
@@ -1310,19 +1311,23 @@ static int kallsyms__delta(struct map *map, const char *filename, u64 *delta)
 int __dso__load_kallsyms(struct dso *dso, const char *filename,
                         struct map *map, bool no_kcore)
 {
+       struct kmap *kmap = map__kmap(map);
        u64 delta = 0;
 
        if (symbol__restricted_filename(filename, "/proc/kallsyms"))
                return -1;
 
-       if (dso__load_all_kallsyms(dso, filename, map) < 0)
+       if (!kmap || !kmap->kmaps)
                return -1;
 
-       if (kallsyms__delta(map, filename, &delta))
+       if (dso__load_all_kallsyms(dso, filename) < 0)
                return -1;
 
-       symbols__fixup_end(&dso->symbols[map->type]);
-       symbols__fixup_duplicate(&dso->symbols[map->type]);
+       if (kallsyms__delta(kmap, filename, &delta))
+               return -1;
+
+       symbols__fixup_end(&dso->symbols);
+       symbols__fixup_duplicate(&dso->symbols);
 
        if (dso->kernel == DSO_TYPE_GUEST_KERNEL)
                dso->symtab_type = DSO_BINARY_TYPE__GUEST_KALLSYMS;
@@ -1330,9 +1335,9 @@ int __dso__load_kallsyms(struct dso *dso, const char *filename,
                dso->symtab_type = DSO_BINARY_TYPE__KALLSYMS;
 
        if (!no_kcore && !dso__load_kcore(dso, map, filename))
-               return dso__split_kallsyms_for_kcore(dso, map);
+               return map_groups__split_kallsyms_for_kcore(kmap->kmaps, dso);
        else
-               return dso__split_kallsyms(dso, map, delta);
+               return map_groups__split_kallsyms(kmap->kmaps, dso, delta, map);
 }
 
 int dso__load_kallsyms(struct dso *dso, const char *filename,
@@ -1341,8 +1346,7 @@ int dso__load_kallsyms(struct dso *dso, const char *filename,
        return __dso__load_kallsyms(dso, filename, map, false);
 }
 
-static int dso__load_perf_map(const char *map_path, struct dso *dso,
-                             struct map *map)
+static int dso__load_perf_map(const char *map_path, struct dso *dso)
 {
        char *line = NULL;
        size_t n;
@@ -1379,12 +1383,12 @@ static int dso__load_perf_map(const char *map_path, struct dso *dso,
                if (len + 2 >= line_len)
                        continue;
 
-               sym = symbol__new(start, size, STB_GLOBAL, line + len);
+               sym = symbol__new(start, size, STB_GLOBAL, STT_FUNC, line + len);
 
                if (sym == NULL)
                        goto out_delete_line;
 
-               symbols__insert(&dso->symbols[map->type], sym);
+               symbols__insert(&dso->symbols, sym);
                nr_syms++;
        }
 
@@ -1509,25 +1513,27 @@ int dso__load(struct dso *dso, struct map *map)
        pthread_mutex_lock(&dso->lock);
 
        /* check again under the dso->lock */
-       if (dso__loaded(dso, map->type)) {
+       if (dso__loaded(dso)) {
                ret = 1;
                goto out;
        }
 
+       if (map->groups && map->groups->machine)
+               machine = map->groups->machine;
+       else
+               machine = NULL;
+
        if (dso->kernel) {
                if (dso->kernel == DSO_TYPE_KERNEL)
                        ret = dso__load_kernel_sym(dso, map);
                else if (dso->kernel == DSO_TYPE_GUEST_KERNEL)
                        ret = dso__load_guest_kernel_sym(dso, map);
 
+               if (machine__is(machine, "x86_64"))
+                       machine__map_x86_64_entry_trampolines(machine, dso);
                goto out;
        }
 
-       if (map->groups && map->groups->machine)
-               machine = map->groups->machine;
-       else
-               machine = NULL;
-
        dso->adjust_symbols = 0;
 
        if (perfmap) {
@@ -1542,7 +1548,7 @@ int dso__load(struct dso *dso, struct map *map)
                        goto out;
                }
 
-               ret = dso__load_perf_map(map_path, dso, map);
+               ret = dso__load_perf_map(map_path, dso);
                dso->symtab_type = ret > 0 ? DSO_BINARY_TYPE__JAVA_JIT :
                                             DSO_BINARY_TYPE__NOT_FOUND;
                goto out;
@@ -1651,7 +1657,7 @@ int dso__load(struct dso *dso, struct map *map)
        if (ret > 0) {
                int nr_plt;
 
-               nr_plt = dso__synthesize_plt_symbols(dso, runtime_ss, map);
+               nr_plt = dso__synthesize_plt_symbols(dso, runtime_ss);
                if (nr_plt > 0)
                        ret += nr_plt;
        }
@@ -1663,17 +1669,16 @@ out_free:
        if (ret < 0 && strstr(dso->name, " (deleted)") != NULL)
                ret = 0;
 out:
-       dso__set_loaded(dso, map->type);
+       dso__set_loaded(dso);
        pthread_mutex_unlock(&dso->lock);
        nsinfo__mountns_exit(&nsc);
 
        return ret;
 }
 
-struct map *map_groups__find_by_name(struct map_groups *mg,
-                                    enum map_type type, const char *name)
+struct map *map_groups__find_by_name(struct map_groups *mg, const char *name)
 {
-       struct maps *maps = &mg->maps[type];
+       struct maps *maps = &mg->maps;
        struct map *map;
 
        down_read(&maps->lock);
@@ -1720,7 +1725,7 @@ int dso__load_vmlinux(struct dso *dso, struct map *map,
                else
                        dso->binary_type = DSO_BINARY_TYPE__VMLINUX;
                dso__set_long_name(dso, vmlinux, vmlinux_allocated);
-               dso__set_loaded(dso, map->type);
+               dso__set_loaded(dso);
                pr_debug("Using %s for symbols\n", symfs_vmlinux);
        }