]> git.kernelconcepts.de Git - karo-tx-linux.git/blobdiff - tools/perf/util/symbol.c
Merge remote-tracking branch 'ipsec/master'
[karo-tx-linux.git] / tools / perf / util / symbol.c
index 1f97ffb158a6af43e95cd1428ae0339d5fed3386..b4cc7662677ec858cddf6dd90e906f75c5a14200 100644 (file)
@@ -624,7 +624,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_type(type), name);
+       sym = symbol__new(start, 0, kallsyms2elf_binding(type), name);
        if (sym == NULL)
                return -ENOMEM;
        /*
@@ -680,7 +680,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;
-                       if (curr_map != map) {
+                       if (curr_map->dso != map->dso) {
                                rb_erase_init(&pos->rb_node, root);
                                symbols__insert(
                                        &curr_map->dso->symbols[curr_map->type],
@@ -1406,6 +1406,7 @@ int dso__load(struct dso *dso, struct map *map, symbol_filter_t filter)
        struct symsrc ss_[2];
        struct symsrc *syms_ss = NULL, *runtime_ss = NULL;
        bool kmod;
+       unsigned char build_id[BUILD_ID_SIZE];
 
        pthread_mutex_lock(&dso->lock);
 
@@ -1461,6 +1462,14 @@ int dso__load(struct dso *dso, struct map *map, symbol_filter_t filter)
                dso->symtab_type == DSO_BINARY_TYPE__GUEST_KMODULE ||
                dso->symtab_type == DSO_BINARY_TYPE__GUEST_KMODULE_COMP;
 
+
+       /*
+        * Read the build id if possible. This is required for
+        * DSO_BINARY_TYPE__BUILDID_DEBUGINFO to work
+        */
+       if (filename__read_build_id(dso->name, build_id, BUILD_ID_SIZE) > 0)
+               dso__set_build_id(dso, build_id);
+
        /*
         * Iterate over candidate debug images.
         * Keep track of "interesting" ones (those which have a symtab, dynsym,
@@ -1607,6 +1616,15 @@ int dso__load_vmlinux_path(struct dso *dso, struct map *map,
        int i, err = 0;
        char *filename = NULL;
 
+       pr_debug("Looking at the vmlinux_path (%d entries long)\n",
+                vmlinux_path__nr_entries + 1);
+
+       for (i = 0; i < vmlinux_path__nr_entries; ++i) {
+               err = dso__load_vmlinux(dso, map, vmlinux_path[i], false, filter);
+               if (err > 0)
+                       goto out;
+       }
+
        if (!symbol_conf.ignore_vmlinux_buildid)
                filename = dso__build_id_filename(dso, NULL, 0);
        if (filename != NULL) {
@@ -1615,15 +1633,6 @@ int dso__load_vmlinux_path(struct dso *dso, struct map *map,
                        goto out;
                free(filename);
        }
-
-       pr_debug("Looking at the vmlinux_path (%d entries long)\n",
-                vmlinux_path__nr_entries + 1);
-
-       for (i = 0; i < vmlinux_path__nr_entries; ++i) {
-               err = dso__load_vmlinux(dso, map, vmlinux_path[i], false, filter);
-               if (err > 0)
-                       break;
-       }
 out:
        return err;
 }