Lines Matching refs:dso
52 static int dso__load_kernel_sym(struct dso *dso, struct map *map);
53 static int dso__load_guest_kernel_sym(struct dso *dso, struct map *map);
551 void dso__reset_find_symbol_cache(struct dso *dso) in dso__reset_find_symbol_cache() argument
553 dso__set_last_find_result_addr(dso, 0); in dso__reset_find_symbol_cache()
554 dso__set_last_find_result_symbol(dso, NULL); in dso__reset_find_symbol_cache()
557 void dso__insert_symbol(struct dso *dso, struct symbol *sym) in dso__insert_symbol() argument
559 __symbols__insert(dso__symbols(dso), sym, dso__kernel(dso)); in dso__insert_symbol()
562 if (dso__last_find_result_addr(dso) >= sym->start && in dso__insert_symbol()
563 (dso__last_find_result_addr(dso) < sym->end || in dso__insert_symbol()
565 dso__set_last_find_result_symbol(dso, sym); in dso__insert_symbol()
569 void dso__delete_symbol(struct dso *dso, struct symbol *sym) in dso__delete_symbol() argument
571 rb_erase_cached(&sym->rb_node, dso__symbols(dso)); in dso__delete_symbol()
573 dso__reset_find_symbol_cache(dso); in dso__delete_symbol()
576 struct symbol *dso__find_symbol(struct dso *dso, u64 addr) in dso__find_symbol() argument
578 if (dso__last_find_result_addr(dso) != addr || dso__last_find_result_symbol(dso) == NULL) { in dso__find_symbol()
579 dso__set_last_find_result_addr(dso, addr); in dso__find_symbol()
580 dso__set_last_find_result_symbol(dso, symbols__find(dso__symbols(dso), addr)); in dso__find_symbol()
583 return dso__last_find_result_symbol(dso); in dso__find_symbol()
586 struct symbol *dso__find_symbol_nocache(struct dso *dso, u64 addr) in dso__find_symbol_nocache() argument
588 return symbols__find(dso__symbols(dso), addr); in dso__find_symbol_nocache()
591 struct symbol *dso__first_symbol(struct dso *dso) in dso__first_symbol() argument
593 return symbols__first(dso__symbols(dso)); in dso__first_symbol()
596 struct symbol *dso__last_symbol(struct dso *dso) in dso__last_symbol() argument
598 return symbols__last(dso__symbols(dso)); in dso__last_symbol()
606 struct symbol *dso__next_symbol_by_name(struct dso *dso, size_t *idx) in dso__next_symbol_by_name() argument
608 if (*idx + 1 >= dso__symbol_names_len(dso)) in dso__next_symbol_by_name()
612 return dso__symbol_names(dso)[*idx]; in dso__next_symbol_by_name()
618 struct symbol *dso__find_symbol_by_name(struct dso *dso, const char *name, size_t *idx) in dso__find_symbol_by_name() argument
620 struct symbol *s = symbols__find_by_name(dso__symbol_names(dso), in dso__find_symbol_by_name()
621 dso__symbol_names_len(dso), in dso__find_symbol_by_name()
624 s = symbols__find_by_name(dso__symbol_names(dso), dso__symbol_names_len(dso), in dso__find_symbol_by_name()
630 void dso__sort_by_name(struct dso *dso) in dso__sort_by_name() argument
632 mutex_lock(dso__lock(dso)); in dso__sort_by_name()
633 if (!dso__sorted_by_name(dso)) { in dso__sort_by_name()
636 dso__set_symbol_names(dso, symbols__sort_by_name(dso__symbols(dso), &len)); in dso__sort_by_name()
637 if (dso__symbol_names(dso)) { in dso__sort_by_name()
638 dso__set_symbol_names_len(dso, len); in dso__sort_by_name()
639 dso__set_sorted_by_name(dso); in dso__sort_by_name()
642 mutex_unlock(dso__lock(dso)); in dso__sort_by_name()
768 struct dso *dso = arg; in map__process_kallsym_symbol() local
769 struct rb_root_cached *root = dso__symbols(dso); in map__process_kallsym_symbol()
800 static int dso__load_all_kallsyms(struct dso *dso, const char *filename) in dso__load_all_kallsyms() argument
802 return kallsyms__parse(filename, dso, map__process_kallsym_symbol); in dso__load_all_kallsyms()
805 static int maps__split_kallsyms_for_kcore(struct maps *kmaps, struct dso *dso) in maps__split_kallsyms_for_kcore() argument
809 struct rb_root_cached *root = dso__symbols(dso); in maps__split_kallsyms_for_kcore()
820 struct dso *curr_map_dso; in maps__split_kallsyms_for_kcore()
850 dso__set_adjust_symbols(dso, true); in maps__split_kallsyms_for_kcore()
860 static int maps__split_kallsyms(struct maps *kmaps, struct dso *dso, u64 delta, in maps__split_kallsyms() argument
867 struct rb_root_cached *root = dso__symbols(dso); in maps__split_kallsyms()
887 struct dso *curr_map_dso; in maps__split_kallsyms()
896 dso__kernel(dso) == DSO_SPACE__KERNEL_GUEST && in maps__split_kallsyms()
941 struct dso *ndso; in maps__split_kallsyms()
955 if (dso__kernel(dso) == DSO_SPACE__KERNEL_GUEST) in maps__split_kallsyms()
969 dso__set_kernel(ndso, dso__kernel(dso)); in maps__split_kallsyms()
991 struct dso *curr_map_dso = map__dso(curr_map); in maps__split_kallsyms()
1006 dso__kernel(dso) == DSO_SPACE__KERNEL_GUEST && in maps__split_kallsyms()
1173 struct dso *dso; in do_validate_kcore_modules_cb() local
1178 dso = map__dso(old_map); in do_validate_kcore_modules_cb()
1180 mi = find_module(dso__short_name(dso), modules); in do_validate_kcore_modules_cb()
1268 struct dso *dso; member
1280 list_node->map = map__new2(start, md->dso); in kcore_mapfn()
1305 static int dso__load_kcore(struct dso *dso, struct map *map, in dso__load_kcore() argument
1334 md.dso = dso; in dso__load_kcore()
1349 dso__set_is_64_bit(dso, is_64_bit); in dso__load_kcore()
1446 if (dso__kernel(dso) == DSO_SPACE__KERNEL_GUEST) in dso__load_kcore()
1447 dso__set_binary_type(dso, DSO_BINARY_TYPE__GUEST_KCORE); in dso__load_kcore()
1449 dso__set_binary_type(dso, DSO_BINARY_TYPE__KCORE); in dso__load_kcore()
1450 dso__set_long_name(dso, strdup(kcore_filename), true); in dso__load_kcore()
1492 int __dso__load_kallsyms(struct dso *dso, const char *filename, in __dso__load_kallsyms() argument
1504 if (dso__load_all_kallsyms(dso, filename) < 0) in __dso__load_kallsyms()
1510 symbols__fixup_end(dso__symbols(dso), true); in __dso__load_kallsyms()
1511 symbols__fixup_duplicate(dso__symbols(dso)); in __dso__load_kallsyms()
1513 if (dso__kernel(dso) == DSO_SPACE__KERNEL_GUEST) in __dso__load_kallsyms()
1514 dso__set_symtab_type(dso, DSO_BINARY_TYPE__GUEST_KALLSYMS); in __dso__load_kallsyms()
1516 dso__set_symtab_type(dso, DSO_BINARY_TYPE__KALLSYMS); in __dso__load_kallsyms()
1518 if (!no_kcore && !dso__load_kcore(dso, map, filename)) in __dso__load_kallsyms()
1519 return maps__split_kallsyms_for_kcore(kmap->kmaps, dso); in __dso__load_kallsyms()
1521 return maps__split_kallsyms(kmap->kmaps, dso, delta, map); in __dso__load_kallsyms()
1524 int dso__load_kallsyms(struct dso *dso, const char *filename, in dso__load_kallsyms() argument
1527 return __dso__load_kallsyms(dso, filename, map, false); in dso__load_kallsyms()
1530 static int dso__load_perf_map(const char *map_path, struct dso *dso) in dso__load_perf_map() argument
1572 symbols__insert(dso__symbols(dso), sym); in dso__load_perf_map()
1612 int dso__load_bfd_symbols(struct dso *dso, const char *debugfile) in dso__load_bfd_symbols() argument
1628 dso__long_name(dso)); in dso__load_bfd_symbols()
1663 dso__set_text_offset(dso, text_offset); in dso__load_bfd_symbols()
1664 dso__set_text_end(dso, (section->vma - text_offset) + section->size); in dso__load_bfd_symbols()
1666 dso__set_text_offset(dso, section->vma - section->filepos); in dso__load_bfd_symbols()
1667 dso__set_text_end(dso, section->filepos + section->size); in dso__load_bfd_symbols()
1693 start = bfd_asymbol_value(sym) - dso__text_offset(dso); in dso__load_bfd_symbols()
1699 symbols__insert(dso__symbols(dso), symbol); in dso__load_bfd_symbols()
1705 symbols__fixup_end(dso__symbols(dso), false); in dso__load_bfd_symbols()
1706 symbols__fixup_duplicate(dso__symbols(dso)); in dso__load_bfd_symbols()
1707 dso__set_adjust_symbols(dso, true); in dso__load_bfd_symbols()
1718 static bool dso__is_compatible_symtab_type(struct dso *dso, bool kmod, in dso__is_compatible_symtab_type() argument
1731 return !kmod && dso__kernel(dso) == DSO_SPACE__USER; in dso__is_compatible_symtab_type()
1736 return dso__kernel(dso) == DSO_SPACE__KERNEL; in dso__is_compatible_symtab_type()
1741 return dso__kernel(dso) == DSO_SPACE__KERNEL_GUEST; in dso__is_compatible_symtab_type()
1751 return kmod && dso__symtab_type(dso) == type; in dso__is_compatible_symtab_type()
1804 int dso__load(struct dso *dso, struct map *map) in dso__load() argument
1818 const char *map_path = dso__long_name(dso); in dso__load()
1820 mutex_lock(dso__lock(dso)); in dso__load()
1824 if (dso__nsinfo(dso) && in dso__load()
1826 dso__nsinfo_ptr(dso)) == 0)) { in dso__load()
1831 nsinfo__mountns_enter(dso__nsinfo(dso), &nsc); in dso__load()
1834 if (dso__loaded(dso)) { in dso__load()
1839 kmod = dso__is_kmod(dso); in dso__load()
1841 if (dso__kernel(dso) && !kmod) { in dso__load()
1842 if (dso__kernel(dso) == DSO_SPACE__KERNEL) in dso__load()
1843 ret = dso__load_kernel_sym(dso, map); in dso__load()
1844 else if (dso__kernel(dso) == DSO_SPACE__KERNEL_GUEST) in dso__load()
1845 ret = dso__load_guest_kernel_sym(dso, map); in dso__load()
1849 machine__map_x86_64_entry_trampolines(machine, dso); in dso__load()
1853 dso__set_adjust_symbols(dso, false); in dso__load()
1856 ret = dso__load_perf_map(map_path, dso); in dso__load()
1857 dso__set_symtab_type(dso, ret > 0 in dso__load()
1874 if (!dso__has_build_id(dso) && in dso__load()
1875 is_regular_file(dso__long_name(dso))) { in dso__load()
1878 __symbol__join_symfs(name, PATH_MAX, dso__long_name(dso)); in dso__load()
1880 dso__set_build_id(dso, &bid); in dso__load()
1901 if (!dso__is_compatible_symtab_type(dso, kmod, symtab_type)) in dso__load()
1904 if (dso__read_binary_type_filename(dso, symtab_type, in dso__load()
1912 if (!is_reg && errno == ENOENT && dso__nsinfo(dso)) { in dso__load()
1913 char *new_name = dso__filename_with_chroot(dso, name); in dso__load()
1923 bfdrc = dso__load_bfd_symbols(dso, name); in dso__load()
1926 sirc = symsrc__init(ss, dso, name, symtab_type); in dso__load()
1929 nsinfo__mountns_enter(dso__nsinfo(dso), &nsc); in dso__load()
1942 if (!dso__symsrc_filename(dso)) in dso__load()
1943 dso__set_symsrc_filename(dso, strdup(name)); in dso__load()
1954 if (dso__binary_type(dso) == DSO_BINARY_TYPE__NOT_FOUND) in dso__load()
1955 dso__set_binary_type(dso, symtab_type); in dso__load()
1977 ret = dso__load_sym(dso, map, syms_ss, runtime_ss, kmod); in dso__load()
1984 nr_plt = dso__synthesize_plt_symbols(dso, runtime_ss); in dso__load()
1993 if (ret < 0 && strstr(dso__name(dso), " (deleted)") != NULL) in dso__load()
1996 dso__set_loaded(dso); in dso__load()
1997 mutex_unlock(dso__lock(dso)); in dso__load()
2007 int dso__load_vmlinux(struct dso *dso, struct map *map, in dso__load_vmlinux() argument
2020 if (dso__kernel(dso) == DSO_SPACE__KERNEL_GUEST) in dso__load_vmlinux()
2025 if (symsrc__init(&ss, dso, symfs_vmlinux, symtab_type)) { in dso__load_vmlinux()
2035 dso__set_long_name(dso, vmlinux, vmlinux_allocated); in dso__load_vmlinux()
2036 if (dso__kernel(dso) == DSO_SPACE__KERNEL_GUEST) in dso__load_vmlinux()
2037 dso__set_binary_type(dso, DSO_BINARY_TYPE__GUEST_VMLINUX); in dso__load_vmlinux()
2039 dso__set_binary_type(dso, DSO_BINARY_TYPE__VMLINUX); in dso__load_vmlinux()
2041 err = dso__load_sym(dso, map, &ss, &ss, 0); in dso__load_vmlinux()
2045 dso__set_loaded(dso); in dso__load_vmlinux()
2052 int dso__load_vmlinux_path(struct dso *dso, struct map *map) in dso__load_vmlinux_path() argument
2061 err = dso__load_vmlinux(dso, map, vmlinux_path[i], false); in dso__load_vmlinux_path()
2067 filename = dso__build_id_filename(dso, NULL, 0, false); in dso__load_vmlinux_path()
2069 err = dso__load_vmlinux(dso, map, filename, true); in dso__load_vmlinux_path()
2124 static char *dso__find_kallsyms(struct dso *dso, struct map *map) in dso__find_kallsyms() argument
2131 if (!dso__has_build_id(dso)) { in dso__find_kallsyms()
2140 is_host = dso__build_id_equal(dso, &bid); in dso__find_kallsyms()
2156 build_id__snprintf(dso__bid(dso), sbuild_id, sizeof(sbuild_id)); in dso__find_kallsyms()
2181 static int dso__load_kernel_sym(struct dso *dso, struct map *map) in dso__load_kernel_sym() argument
2209 return dso__load_vmlinux(dso, map, symbol_conf.vmlinux_name, false); in dso__load_kernel_sym()
2218 filename = __dso__build_id_filename(dso, NULL, 0, false, false); in dso__load_kernel_sym()
2220 err = dso__load_vmlinux(dso, map, filename, true); in dso__load_kernel_sym()
2226 err = dso__load_vmlinux_path(dso, map); in dso__load_kernel_sym()
2235 kallsyms_allocated_filename = dso__find_kallsyms(dso, map); in dso__load_kernel_sym()
2242 err = dso__load_kallsyms(dso, kallsyms_filename, map); in dso__load_kernel_sym()
2247 if (err > 0 && !dso__is_kcore(dso)) { in dso__load_kernel_sym()
2248 dso__set_binary_type(dso, DSO_BINARY_TYPE__KALLSYMS); in dso__load_kernel_sym()
2249 dso__set_long_name(dso, DSO__NAME_KALLSYMS, false); in dso__load_kernel_sym()
2257 static int dso__load_guest_kernel_sym(struct dso *dso, struct map *map) in dso__load_guest_kernel_sym() argument
2273 err = dso__load_vmlinux(dso, map, in dso__load_guest_kernel_sym()
2287 err = dso__load_kallsyms(dso, kallsyms_filename, map); in dso__load_guest_kernel_sym()
2290 if (err > 0 && !dso__is_kcore(dso)) { in dso__load_guest_kernel_sym()
2291 dso__set_binary_type(dso, DSO_BINARY_TYPE__GUEST_KALLSYMS); in dso__load_guest_kernel_sym()
2292 dso__set_long_name(dso, machine->mmap_name, false); in dso__load_guest_kernel_sym()
2687 char *dso__demangle_sym(struct dso *dso, int kmodule, const char *elf_name) in dso__demangle_sym() argument
2699 if (!want_demangle((dso && dso__kernel(dso)) || kmodule)) in dso__demangle_sym()