Lines Matching refs:dso
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);
524 void dso__reset_find_symbol_cache(struct dso *dso) in dso__reset_find_symbol_cache() argument
526 dso->last_find_result.addr = 0; in dso__reset_find_symbol_cache()
527 dso->last_find_result.symbol = NULL; in dso__reset_find_symbol_cache()
530 void dso__insert_symbol(struct dso *dso, struct symbol *sym) in dso__insert_symbol() argument
532 __symbols__insert(&dso->symbols, sym, dso->kernel); in dso__insert_symbol()
535 if (dso->last_find_result.addr >= sym->start && in dso__insert_symbol()
536 (dso->last_find_result.addr < sym->end || in dso__insert_symbol()
538 dso->last_find_result.symbol = sym; in dso__insert_symbol()
542 void dso__delete_symbol(struct dso *dso, struct symbol *sym) in dso__delete_symbol() argument
544 rb_erase_cached(&sym->rb_node, &dso->symbols); in dso__delete_symbol()
546 dso__reset_find_symbol_cache(dso); in dso__delete_symbol()
549 struct symbol *dso__find_symbol(struct dso *dso, u64 addr) in dso__find_symbol() argument
551 if (dso->last_find_result.addr != addr || dso->last_find_result.symbol == NULL) { in dso__find_symbol()
552 dso->last_find_result.addr = addr; in dso__find_symbol()
553 dso->last_find_result.symbol = symbols__find(&dso->symbols, addr); in dso__find_symbol()
556 return dso->last_find_result.symbol; in dso__find_symbol()
559 struct symbol *dso__first_symbol(struct dso *dso) in dso__first_symbol() argument
561 return symbols__first(&dso->symbols); in dso__first_symbol()
564 struct symbol *dso__last_symbol(struct dso *dso) in dso__last_symbol() argument
566 return symbols__last(&dso->symbols); in dso__last_symbol()
585 struct symbol *dso__find_symbol_by_name(struct dso *dso, const char *name) in dso__find_symbol_by_name() argument
587 struct symbol *s = symbols__find_by_name(&dso->symbol_names, name, in dso__find_symbol_by_name()
590 s = symbols__find_by_name(&dso->symbol_names, name, in dso__find_symbol_by_name()
595 void dso__sort_by_name(struct dso *dso) in dso__sort_by_name() argument
597 dso__set_sorted_by_name(dso); in dso__sort_by_name()
598 return symbols__sort_by_name(&dso->symbol_names, &dso->symbols); in dso__sort_by_name()
723 struct dso *dso = arg; in map__process_kallsym_symbol() local
724 struct rb_root_cached *root = &dso->symbols; in map__process_kallsym_symbol()
755 static int dso__load_all_kallsyms(struct dso *dso, const char *filename) in dso__load_all_kallsyms() argument
757 return kallsyms__parse(filename, dso, map__process_kallsym_symbol); in dso__load_all_kallsyms()
760 static int maps__split_kallsyms_for_kcore(struct maps *kmaps, struct dso *dso) in maps__split_kallsyms_for_kcore() argument
765 struct rb_root_cached old_root = dso->symbols; in maps__split_kallsyms_for_kcore()
766 struct rb_root_cached *root = &dso->symbols; in maps__split_kallsyms_for_kcore()
798 symbols__insert(&curr_map->dso->symbols, pos); in maps__split_kallsyms_for_kcore()
803 dso->adjust_symbols = 1; in maps__split_kallsyms_for_kcore()
813 static int maps__split_kallsyms(struct maps *kmaps, struct dso *dso, u64 delta, in maps__split_kallsyms() argument
820 struct rb_root_cached *root = &dso->symbols; in maps__split_kallsyms()
845 if (strcmp(curr_map->dso->short_name, module)) { in maps__split_kallsyms()
847 dso->kernel == DSO_SPACE__KERNEL_GUEST && in maps__split_kallsyms()
856 dso__set_loaded(curr_map->dso); in maps__split_kallsyms()
869 if (curr_map->dso->loaded && in maps__split_kallsyms()
891 struct dso *ndso; in maps__split_kallsyms()
904 if (dso->kernel == DSO_SPACE__KERNEL_GUEST) in maps__split_kallsyms()
917 ndso->kernel = dso->kernel; in maps__split_kallsyms()
936 symbols__insert(&curr_map->dso->symbols, pos); in maps__split_kallsyms()
948 dso->kernel == DSO_SPACE__KERNEL_GUEST && in maps__split_kallsyms()
950 dso__set_loaded(curr_map->dso); in maps__split_kallsyms()
1129 mi = find_module(old_map->dso->short_name, &modules); in do_validate_kcore_modules()
1206 struct dso *dso; member
1215 map = map__new2(start, md->dso); in kcore_mapfn()
1306 static int dso__load_kcore(struct dso *dso, struct map *map, in dso__load_kcore() argument
1335 md.dso = dso; in dso__load_kcore()
1350 dso->is_64_bit = is_64_bit; in dso__load_kcore()
1426 if (dso->kernel == DSO_SPACE__KERNEL_GUEST) in dso__load_kcore()
1427 dso->binary_type = DSO_BINARY_TYPE__GUEST_KCORE; in dso__load_kcore()
1429 dso->binary_type = DSO_BINARY_TYPE__KCORE; in dso__load_kcore()
1430 dso__set_long_name(dso, strdup(kcore_filename), true); in dso__load_kcore()
1469 int __dso__load_kallsyms(struct dso *dso, const char *filename, in __dso__load_kallsyms() argument
1481 if (dso__load_all_kallsyms(dso, filename) < 0) in __dso__load_kallsyms()
1487 symbols__fixup_end(&dso->symbols, true); in __dso__load_kallsyms()
1488 symbols__fixup_duplicate(&dso->symbols); in __dso__load_kallsyms()
1490 if (dso->kernel == DSO_SPACE__KERNEL_GUEST) in __dso__load_kallsyms()
1491 dso->symtab_type = DSO_BINARY_TYPE__GUEST_KALLSYMS; in __dso__load_kallsyms()
1493 dso->symtab_type = DSO_BINARY_TYPE__KALLSYMS; in __dso__load_kallsyms()
1495 if (!no_kcore && !dso__load_kcore(dso, map, filename)) in __dso__load_kallsyms()
1496 return maps__split_kallsyms_for_kcore(kmap->kmaps, dso); in __dso__load_kallsyms()
1498 return maps__split_kallsyms(kmap->kmaps, dso, delta, map); in __dso__load_kallsyms()
1501 int dso__load_kallsyms(struct dso *dso, const char *filename, in dso__load_kallsyms() argument
1504 return __dso__load_kallsyms(dso, filename, map, false); in dso__load_kallsyms()
1507 static int dso__load_perf_map(const char *map_path, struct dso *dso) in dso__load_perf_map() argument
1549 symbols__insert(&dso->symbols, sym); in dso__load_perf_map()
1589 int dso__load_bfd_symbols(struct dso *dso, const char *debugfile) in dso__load_bfd_symbols() argument
1605 dso->long_name); in dso__load_bfd_symbols()
1638 dso->text_offset = section->vma - (u32)section->vma; in dso__load_bfd_symbols()
1639 dso->text_offset += (u32)bfd_asymbol_value(symbols[i]); in dso__load_bfd_symbols()
1641 dso->text_offset = section->vma - section->filepos; in dso__load_bfd_symbols()
1667 start = bfd_asymbol_value(sym) - dso->text_offset; in dso__load_bfd_symbols()
1673 symbols__insert(&dso->symbols, symbol); in dso__load_bfd_symbols()
1679 symbols__fixup_end(&dso->symbols, false); in dso__load_bfd_symbols()
1680 symbols__fixup_duplicate(&dso->symbols); in dso__load_bfd_symbols()
1681 dso->adjust_symbols = 1; in dso__load_bfd_symbols()
1692 static bool dso__is_compatible_symtab_type(struct dso *dso, bool kmod, in dso__is_compatible_symtab_type() argument
1704 return !kmod && dso->kernel == DSO_SPACE__USER; in dso__is_compatible_symtab_type()
1709 return dso->kernel == DSO_SPACE__KERNEL; in dso__is_compatible_symtab_type()
1714 return dso->kernel == DSO_SPACE__KERNEL_GUEST; in dso__is_compatible_symtab_type()
1724 return kmod && dso->symtab_type == type; in dso__is_compatible_symtab_type()
1777 int dso__load(struct dso *dso, struct map *map) in dso__load() argument
1792 const char *map_path = dso->long_name; in dso__load()
1794 mutex_lock(&dso->lock); in dso__load()
1795 perfmap = strncmp(dso->name, "/tmp/perf-", 10) == 0; in dso__load()
1797 if (dso->nsinfo && (dso__find_perf_map(newmapname, in dso__load()
1798 sizeof(newmapname), &dso->nsinfo) == 0)) { in dso__load()
1803 nsinfo__mountns_enter(dso->nsinfo, &nsc); in dso__load()
1806 if (dso__loaded(dso)) { in dso__load()
1811 kmod = dso->symtab_type == DSO_BINARY_TYPE__SYSTEM_PATH_KMODULE || in dso__load()
1812 dso->symtab_type == DSO_BINARY_TYPE__SYSTEM_PATH_KMODULE_COMP || in dso__load()
1813 dso->symtab_type == DSO_BINARY_TYPE__GUEST_KMODULE || in dso__load()
1814 dso->symtab_type == DSO_BINARY_TYPE__GUEST_KMODULE_COMP; in dso__load()
1816 if (dso->kernel && !kmod) { in dso__load()
1817 if (dso->kernel == DSO_SPACE__KERNEL) in dso__load()
1818 ret = dso__load_kernel_sym(dso, map); in dso__load()
1819 else if (dso->kernel == DSO_SPACE__KERNEL_GUEST) in dso__load()
1820 ret = dso__load_guest_kernel_sym(dso, map); in dso__load()
1824 machine__map_x86_64_entry_trampolines(machine, dso); in dso__load()
1828 dso->adjust_symbols = 0; in dso__load()
1831 ret = dso__load_perf_map(map_path, dso); in dso__load()
1832 dso->symtab_type = ret > 0 ? DSO_BINARY_TYPE__JAVA_JIT : in dso__load()
1848 if (!dso->has_build_id && in dso__load()
1849 is_regular_file(dso->long_name)) { in dso__load()
1850 __symbol__join_symfs(name, PATH_MAX, dso->long_name); in dso__load()
1852 dso__set_build_id(dso, &bid); in dso__load()
1873 if (!dso__is_compatible_symtab_type(dso, kmod, symtab_type)) in dso__load()
1876 if (dso__read_binary_type_filename(dso, symtab_type, in dso__load()
1884 if (!is_reg && errno == ENOENT && dso->nsinfo) { in dso__load()
1885 char *new_name = filename_with_chroot(dso->nsinfo->pid, in dso__load()
1896 bfdrc = dso__load_bfd_symbols(dso, name); in dso__load()
1899 sirc = symsrc__init(ss, dso, name, symtab_type); in dso__load()
1902 nsinfo__mountns_enter(dso->nsinfo, &nsc); in dso__load()
1915 if (!dso->symsrc_filename) in dso__load()
1916 dso->symsrc_filename = strdup(name); in dso__load()
1947 ret = dso__load_sym(dso, map, syms_ss, runtime_ss, kmod); in dso__load()
1954 nr_plt = dso__synthesize_plt_symbols(dso, runtime_ss); in dso__load()
1963 if (ret < 0 && strstr(dso->name, " (deleted)") != NULL) in dso__load()
1966 dso__set_loaded(dso); in dso__load()
1967 mutex_unlock(&dso->lock); in dso__load()
1976 return strcmp(ma->dso->short_name, mb->dso->short_name); in map__strcmp()
1982 return strcmp(name, map->dso->short_name); in map__strcmp_name()
2029 if (maps->last_search_by_name && strcmp(maps->last_search_by_name->dso->short_name, name) == 0) { in maps__find_by_name()
2044 if (strcmp(map->dso->short_name, name) == 0) { in maps__find_by_name()
2056 int dso__load_vmlinux(struct dso *dso, struct map *map, in dso__load_vmlinux() argument
2069 if (dso->kernel == DSO_SPACE__KERNEL_GUEST) in dso__load_vmlinux()
2074 if (symsrc__init(&ss, dso, symfs_vmlinux, symtab_type)) in dso__load_vmlinux()
2077 err = dso__load_sym(dso, map, &ss, &ss, 0); in dso__load_vmlinux()
2081 if (dso->kernel == DSO_SPACE__KERNEL_GUEST) in dso__load_vmlinux()
2082 dso->binary_type = DSO_BINARY_TYPE__GUEST_VMLINUX; in dso__load_vmlinux()
2084 dso->binary_type = DSO_BINARY_TYPE__VMLINUX; in dso__load_vmlinux()
2085 dso__set_long_name(dso, vmlinux, vmlinux_allocated); in dso__load_vmlinux()
2086 dso__set_loaded(dso); in dso__load_vmlinux()
2093 int dso__load_vmlinux_path(struct dso *dso, struct map *map) in dso__load_vmlinux_path() argument
2102 err = dso__load_vmlinux(dso, map, vmlinux_path[i], false); in dso__load_vmlinux_path()
2108 filename = dso__build_id_filename(dso, NULL, 0, false); in dso__load_vmlinux_path()
2110 err = dso__load_vmlinux(dso, map, filename, true); in dso__load_vmlinux_path()
2166 static char *dso__find_kallsyms(struct dso *dso, struct map *map) in dso__find_kallsyms() argument
2173 if (!dso->has_build_id) { in dso__find_kallsyms()
2182 is_host = dso__build_id_equal(dso, &bid); in dso__find_kallsyms()
2198 build_id__sprintf(&dso->bid, sbuild_id); in dso__find_kallsyms()
2223 static int dso__load_kernel_sym(struct dso *dso, struct map *map) in dso__load_kernel_sym() argument
2251 return dso__load_vmlinux(dso, map, symbol_conf.vmlinux_name, false); in dso__load_kernel_sym()
2260 filename = __dso__build_id_filename(dso, NULL, 0, false, false); in dso__load_kernel_sym()
2262 err = dso__load_vmlinux(dso, map, filename, true); in dso__load_kernel_sym()
2269 err = dso__load_vmlinux_path(dso, map); in dso__load_kernel_sym()
2278 kallsyms_allocated_filename = dso__find_kallsyms(dso, map); in dso__load_kernel_sym()
2285 err = dso__load_kallsyms(dso, kallsyms_filename, map); in dso__load_kernel_sym()
2290 if (err > 0 && !dso__is_kcore(dso)) { in dso__load_kernel_sym()
2291 dso->binary_type = DSO_BINARY_TYPE__KALLSYMS; in dso__load_kernel_sym()
2292 dso__set_long_name(dso, DSO__NAME_KALLSYMS, false); in dso__load_kernel_sym()
2300 static int dso__load_guest_kernel_sym(struct dso *dso, struct map *map) in dso__load_guest_kernel_sym() argument
2316 err = dso__load_vmlinux(dso, map, in dso__load_guest_kernel_sym()
2330 err = dso__load_kallsyms(dso, kallsyms_filename, map); in dso__load_guest_kernel_sym()
2333 if (err > 0 && !dso__is_kcore(dso)) { in dso__load_guest_kernel_sym()
2334 dso->binary_type = DSO_BINARY_TYPE__GUEST_KALLSYMS; in dso__load_guest_kernel_sym()
2335 dso__set_long_name(dso, machine->mmap_name, false); in dso__load_guest_kernel_sym()