Lines Matching refs:dso

21 #include "dso.h"
44 static int dso__load_kernel_sym(struct dso *dso, struct map *map);
45 static int dso__load_guest_kernel_sym(struct dso *dso, struct map *map);
236 * not assign it to the kernel dso map (kallsyms).
517 void dso__reset_find_symbol_cache(struct dso *dso)
519 dso->last_find_result.addr = 0;
520 dso->last_find_result.symbol = NULL;
523 void dso__insert_symbol(struct dso *dso, struct symbol *sym)
525 __symbols__insert(&dso->symbols, sym, dso->kernel);
528 if (dso->last_find_result.addr >= sym->start &&
529 (dso->last_find_result.addr < sym->end ||
531 dso->last_find_result.symbol = sym;
535 void dso__delete_symbol(struct dso *dso, struct symbol *sym)
537 rb_erase_cached(&sym->rb_node, &dso->symbols);
539 dso__reset_find_symbol_cache(dso);
542 struct symbol *dso__find_symbol(struct dso *dso, u64 addr)
544 if (dso->last_find_result.addr != addr || dso->last_find_result.symbol == NULL) {
545 dso->last_find_result.addr = addr;
546 dso->last_find_result.symbol = symbols__find(&dso->symbols, addr);
549 return dso->last_find_result.symbol;
552 struct symbol *dso__first_symbol(struct dso *dso)
554 return symbols__first(&dso->symbols);
557 struct symbol *dso__last_symbol(struct dso *dso)
559 return symbols__last(&dso->symbols);
578 struct symbol *dso__find_symbol_by_name(struct dso *dso, const char *name)
580 struct symbol *s = symbols__find_by_name(&dso->symbol_names, name,
583 s = symbols__find_by_name(&dso->symbol_names, name,
588 void dso__sort_by_name(struct dso *dso)
590 dso__set_sorted_by_name(dso);
591 return symbols__sort_by_name(&dso->symbol_names, &dso->symbols);
716 struct dso *dso = arg;
717 struct rb_root_cached *root = &dso->symbols;
740 * Loads the function entries in /proc/kallsyms into kernel_map->dso,
744 static int dso__load_all_kallsyms(struct dso *dso, const char *filename)
746 return kallsyms__parse(filename, dso, map__process_kallsym_symbol);
749 static int maps__split_kallsyms_for_kcore(struct maps *kmaps, struct dso *dso)
754 struct rb_root_cached old_root = dso->symbols;
755 struct rb_root_cached *root = &dso->symbols;
787 symbols__insert(&curr_map->dso->symbols, pos);
792 dso->adjust_symbols = 1;
802 static int maps__split_kallsyms(struct maps *kmaps, struct dso *dso, u64 delta,
809 struct rb_root_cached *root = &dso->symbols;
834 if (strcmp(curr_map->dso->short_name, module)) {
836 dso->kernel == DSO_SPACE__KERNEL_GUEST &&
845 dso__set_loaded(curr_map->dso);
858 if (curr_map->dso->loaded &&
880 struct dso *ndso;
893 if (dso->kernel == DSO_SPACE__KERNEL_GUEST)
906 ndso->kernel = dso->kernel;
925 symbols__insert(&curr_map->dso->symbols, pos);
937 dso->kernel == DSO_SPACE__KERNEL_GUEST &&
939 dso__set_loaded(curr_map->dso);
1118 mi = find_module(old_map->dso->short_name, &modules);
1195 struct dso *dso;
1204 map = map__new2(start, md->dso);
1295 static int dso__load_kcore(struct dso *dso, struct map *map,
1324 md.dso = dso;
1339 dso->is_64_bit = is_64_bit;
1351 * eBPF dso for source data.
1415 if (dso->kernel == DSO_SPACE__KERNEL_GUEST)
1416 dso->binary_type = DSO_BINARY_TYPE__GUEST_KCORE;
1418 dso->binary_type = DSO_BINARY_TYPE__KCORE;
1419 dso__set_long_name(dso, strdup(kcore_filename), true);
1458 int __dso__load_kallsyms(struct dso *dso, const char *filename,
1470 if (dso__load_all_kallsyms(dso, filename) < 0)
1476 symbols__fixup_end(&dso->symbols, true);
1477 symbols__fixup_duplicate(&dso->symbols);
1479 if (dso->kernel == DSO_SPACE__KERNEL_GUEST)
1480 dso->symtab_type = DSO_BINARY_TYPE__GUEST_KALLSYMS;
1482 dso->symtab_type = DSO_BINARY_TYPE__KALLSYMS;
1484 if (!no_kcore && !dso__load_kcore(dso, map, filename))
1485 return maps__split_kallsyms_for_kcore(kmap->kmaps, dso);
1487 return maps__split_kallsyms(kmap->kmaps, dso, delta, map);
1490 int dso__load_kallsyms(struct dso *dso, const char *filename,
1493 return __dso__load_kallsyms(dso, filename, map, false);
1496 static int dso__load_perf_map(const char *map_path, struct dso *dso)
1538 symbols__insert(&dso->symbols, sym);
1578 int dso__load_bfd_symbols(struct dso *dso, const char *debugfile)
1588 abfd = bfd_openr(dso->long_name, NULL);
1594 dso->long_name);
1603 dso->text_offset = section->vma - section->filepos;
1659 start = bfd_asymbol_value(sym) - dso->text_offset;
1665 symbols__insert(&dso->symbols, symbol);
1671 symbols__fixup_end(&dso->symbols, false);
1672 symbols__fixup_duplicate(&dso->symbols);
1673 dso->adjust_symbols = 1;
1684 static bool dso__is_compatible_symtab_type(struct dso *dso, bool kmod,
1696 return !kmod && dso->kernel == DSO_SPACE__USER;
1701 return dso->kernel == DSO_SPACE__KERNEL;
1706 return dso->kernel == DSO_SPACE__KERNEL_GUEST;
1714 * creating a module dso in machine__addnew_module_map().
1716 return kmod && dso->symtab_type == type;
1769 int dso__load(struct dso *dso, struct map *map)
1784 const char *map_path = dso->long_name;
1786 perfmap = strncmp(dso->name, "/tmp/perf-", 10) == 0;
1788 if (dso->nsinfo && (dso__find_perf_map(newmapname,
1789 sizeof(newmapname), &dso->nsinfo) == 0)) {
1794 nsinfo__mountns_enter(dso->nsinfo, &nsc);
1795 pthread_mutex_lock(&dso->lock);
1797 /* check again under the dso->lock */
1798 if (dso__loaded(dso)) {
1803 kmod = dso->symtab_type == DSO_BINARY_TYPE__SYSTEM_PATH_KMODULE ||
1804 dso->symtab_type == DSO_BINARY_TYPE__SYSTEM_PATH_KMODULE_COMP ||
1805 dso->symtab_type == DSO_BINARY_TYPE__GUEST_KMODULE ||
1806 dso->symtab_type == DSO_BINARY_TYPE__GUEST_KMODULE_COMP;
1808 if (dso->kernel && !kmod) {
1809 if (dso->kernel == DSO_SPACE__KERNEL)
1810 ret = dso__load_kernel_sym(dso, map);
1811 else if (dso->kernel == DSO_SPACE__KERNEL_GUEST)
1812 ret = dso__load_guest_kernel_sym(dso, map);
1816 machine__map_x86_64_entry_trampolines(machine, dso);
1820 dso->adjust_symbols = 0;
1823 ret = dso__load_perf_map(map_path, dso);
1824 dso->symtab_type = ret > 0 ? DSO_BINARY_TYPE__JAVA_JIT :
1840 if (!dso->has_build_id &&
1841 is_regular_file(dso->long_name)) {
1842 __symbol__join_symfs(name, PATH_MAX, dso->long_name);
1844 dso__set_build_id(dso, &bid);
1865 if (!dso__is_compatible_symtab_type(dso, kmod, symtab_type))
1868 if (dso__read_binary_type_filename(dso, symtab_type,
1878 bfdrc = dso__load_bfd_symbols(dso, name);
1881 sirc = symsrc__init(ss, dso, name, symtab_type);
1884 nsinfo__mountns_enter(dso->nsinfo, &nsc);
1897 if (!dso->symsrc_filename)
1898 dso->symsrc_filename = strdup(name);
1929 ret = dso__load_sym(dso, map, syms_ss, runtime_ss, kmod);
1936 nr_plt = dso__synthesize_plt_symbols(dso, runtime_ss);
1945 if (ret < 0 && strstr(dso->name, " (deleted)") != NULL)
1948 dso__set_loaded(dso);
1949 pthread_mutex_unlock(&dso->lock);
1958 return strcmp(ma->dso->short_name, mb->dso->short_name);
1964 return strcmp(name, map->dso->short_name);
2011 if (maps->last_search_by_name && strcmp(maps->last_search_by_name->dso->short_name, name) == 0) {
2026 if (strcmp(map->dso->short_name, name) == 0) {
2038 int dso__load_vmlinux(struct dso *dso, struct map *map,
2051 if (dso->kernel == DSO_SPACE__KERNEL_GUEST)
2056 if (symsrc__init(&ss, dso, symfs_vmlinux, symtab_type))
2059 err = dso__load_sym(dso, map, &ss, &ss, 0);
2063 if (dso->kernel == DSO_SPACE__KERNEL_GUEST)
2064 dso->binary_type = DSO_BINARY_TYPE__GUEST_VMLINUX;
2066 dso->binary_type = DSO_BINARY_TYPE__VMLINUX;
2067 dso__set_long_name(dso, vmlinux, vmlinux_allocated);
2068 dso__set_loaded(dso);
2075 int dso__load_vmlinux_path(struct dso *dso, struct map *map)
2084 err = dso__load_vmlinux(dso, map, vmlinux_path[i], false);
2090 filename = dso__build_id_filename(dso, NULL, 0, false);
2092 err = dso__load_vmlinux(dso, map, filename, true);
2148 static char *dso__find_kallsyms(struct dso *dso, struct map *map)
2155 if (!dso->has_build_id) {
2164 is_host = dso__build_id_equal(dso, &bid);
2180 build_id__sprintf(&dso->bid, sbuild_id);
2205 static int dso__load_kernel_sym(struct dso *dso, struct map *map)
2231 return dso__load_vmlinux(dso, map, symbol_conf.vmlinux_name, false);
2235 err = dso__load_vmlinux_path(dso, map);
2244 kallsyms_allocated_filename = dso__find_kallsyms(dso, map);
2251 err = dso__load_kallsyms(dso, kallsyms_filename, map);
2256 if (err > 0 && !dso__is_kcore(dso)) {
2257 dso->binary_type = DSO_BINARY_TYPE__KALLSYMS;
2258 dso__set_long_name(dso, DSO__NAME_KALLSYMS, false);
2266 static int dso__load_guest_kernel_sym(struct dso *dso, struct map *map)
2280 err = dso__load_vmlinux(dso, map,
2294 err = dso__load_kallsyms(dso, kallsyms_filename, map);
2297 if (err > 0 && !dso__is_kcore(dso)) {
2298 dso->binary_type = DSO_BINARY_TYPE__GUEST_KALLSYMS;
2299 dso__set_long_name(dso, machine->mmap_name, false);
2475 symbol_conf.dso_list_str, "dso") < 0)