Lines Matching refs:dso
26 static int dso__load_kernel_sym(struct dso *dso, struct map *map,
28 static int dso__load_guest_kernel_sym(struct dso *dso, struct map *map,
444 void dso__reset_find_symbol_cache(struct dso *dso) in dso__reset_find_symbol_cache() argument
449 dso->last_find_result[type].addr = 0; in dso__reset_find_symbol_cache()
450 dso->last_find_result[type].symbol = NULL; in dso__reset_find_symbol_cache()
454 struct symbol *dso__find_symbol(struct dso *dso, in dso__find_symbol() argument
457 if (dso->last_find_result[type].addr != addr) { in dso__find_symbol()
458 dso->last_find_result[type].addr = addr; in dso__find_symbol()
459 dso->last_find_result[type].symbol = symbols__find(&dso->symbols[type], addr); in dso__find_symbol()
462 return dso->last_find_result[type].symbol; in dso__find_symbol()
465 struct symbol *dso__first_symbol(struct dso *dso, enum map_type type) in dso__first_symbol() argument
467 return symbols__first(&dso->symbols[type]); in dso__first_symbol()
486 struct symbol *dso__find_symbol_by_name(struct dso *dso, enum map_type type, in dso__find_symbol_by_name() argument
489 return symbols__find_by_name(&dso->symbol_names[type], name); in dso__find_symbol_by_name()
492 void dso__sort_by_name(struct dso *dso, enum map_type type) in dso__sort_by_name() argument
494 dso__set_sorted_by_name(dso, type); in dso__sort_by_name()
495 return symbols__sort_by_name(&dso->symbol_names[type], in dso__sort_by_name()
496 &dso->symbols[type]); in dso__sort_by_name()
499 size_t dso__fprintf_symbols_by_name(struct dso *dso, in dso__fprintf_symbols_by_name() argument
506 for (nd = rb_first(&dso->symbol_names[type]); nd; nd = rb_next(nd)) { in dso__fprintf_symbols_by_name()
574 struct dso *dso; member
617 struct rb_root *root = &a->dso->symbols[a->map->type]; in map__process_kallsym_symbol()
644 static int dso__load_all_kallsyms(struct dso *dso, const char *filename, in dso__load_all_kallsyms() argument
647 struct process_kallsyms_args args = { .map = map, .dso = dso, }; in dso__load_all_kallsyms()
651 static int dso__split_kallsyms_for_kcore(struct dso *dso, struct map *map, in dso__split_kallsyms_for_kcore() argument
658 struct rb_root old_root = dso->symbols[map->type]; in dso__split_kallsyms_for_kcore()
659 struct rb_root *root = &dso->symbols[map->type]; in dso__split_kallsyms_for_kcore()
689 symbols__insert(&curr_map->dso->symbols[curr_map->type], pos); in dso__split_kallsyms_for_kcore()
694 dso->adjust_symbols = 1; in dso__split_kallsyms_for_kcore()
704 static int dso__split_kallsyms(struct dso *dso, struct map *map, u64 delta, in dso__split_kallsyms() argument
712 struct rb_root *root = &dso->symbols[map->type]; in dso__split_kallsyms()
734 if (strcmp(curr_map->dso->short_name, module)) { in dso__split_kallsyms()
736 dso->kernel == DSO_TYPE_GUEST_KERNEL && in dso__split_kallsyms()
745 dso__set_loaded(curr_map->dso, in dso__split_kallsyms()
760 if (curr_map->dso->loaded && in dso__split_kallsyms()
772 struct dso *ndso; in dso__split_kallsyms()
785 if (dso->kernel == DSO_TYPE_GUEST_KERNEL) in dso__split_kallsyms()
798 ndso->kernel = dso->kernel; in dso__split_kallsyms()
821 symbols__insert(&curr_map->dso->symbols[curr_map->type], pos); in dso__split_kallsyms()
829 dso->kernel == DSO_TYPE_GUEST_KERNEL && in dso__split_kallsyms()
831 dso__set_loaded(curr_map->dso, curr_map->type); in dso__split_kallsyms()
1014 mi = find_module(old_map->dso->short_name, &modules); in do_validate_kcore_modules()
1092 struct dso *dso; member
1102 map = map__new2(start, md->dso, md->type); in kcore_mapfn()
1114 static int dso__load_kcore(struct dso *dso, struct map *map, in dso__load_kcore() argument
1143 md.dso = dso; in dso__load_kcore()
1159 dso->is_64_bit = is_64_bit; in dso__load_kcore()
1177 sym = dso__first_symbol(dso, map->type); in dso__load_kcore()
1215 if (dso->kernel == DSO_TYPE_GUEST_KERNEL) in dso__load_kcore()
1216 dso->binary_type = DSO_BINARY_TYPE__GUEST_KCORE; in dso__load_kcore()
1218 dso->binary_type = DSO_BINARY_TYPE__KCORE; in dso__load_kcore()
1219 dso__set_long_name(dso, strdup(kcore_filename), true); in dso__load_kcore()
1264 int dso__load_kallsyms(struct dso *dso, const char *filename, in dso__load_kallsyms() argument
1272 if (dso__load_all_kallsyms(dso, filename, map) < 0) in dso__load_kallsyms()
1278 symbols__fixup_duplicate(&dso->symbols[map->type]); in dso__load_kallsyms()
1279 symbols__fixup_end(&dso->symbols[map->type]); in dso__load_kallsyms()
1281 if (dso->kernel == DSO_TYPE_GUEST_KERNEL) in dso__load_kallsyms()
1282 dso->symtab_type = DSO_BINARY_TYPE__GUEST_KALLSYMS; in dso__load_kallsyms()
1284 dso->symtab_type = DSO_BINARY_TYPE__KALLSYMS; in dso__load_kallsyms()
1286 if (!dso__load_kcore(dso, map, filename)) in dso__load_kallsyms()
1287 return dso__split_kallsyms_for_kcore(dso, map, filter); in dso__load_kallsyms()
1289 return dso__split_kallsyms(dso, map, delta, filter); in dso__load_kallsyms()
1292 static int dso__load_perf_map(struct dso *dso, struct map *map, in dso__load_perf_map() argument
1300 file = fopen(dso->long_name, "r"); in dso__load_perf_map()
1338 symbols__insert(&dso->symbols[map->type], sym); in dso__load_perf_map()
1354 static bool dso__is_compatible_symtab_type(struct dso *dso, bool kmod, in dso__is_compatible_symtab_type() argument
1365 return !kmod && dso->kernel == DSO_TYPE_USER; in dso__is_compatible_symtab_type()
1370 return dso->kernel == DSO_TYPE_KERNEL; in dso__is_compatible_symtab_type()
1375 return dso->kernel == DSO_TYPE_GUEST_KERNEL; in dso__is_compatible_symtab_type()
1385 return kmod && dso->symtab_type == type; in dso__is_compatible_symtab_type()
1396 int dso__load(struct dso *dso, struct map *map, symbol_filter_t filter) in dso__load() argument
1409 pthread_mutex_lock(&dso->lock); in dso__load()
1412 if (dso__loaded(dso, map->type)) { in dso__load()
1417 if (dso->kernel) { in dso__load()
1418 if (dso->kernel == DSO_TYPE_KERNEL) in dso__load()
1419 ret = dso__load_kernel_sym(dso, map, filter); in dso__load()
1420 else if (dso->kernel == DSO_TYPE_GUEST_KERNEL) in dso__load()
1421 ret = dso__load_guest_kernel_sym(dso, map, filter); in dso__load()
1431 dso->adjust_symbols = 0; in dso__load()
1433 if (strncmp(dso->name, "/tmp/perf-", 10) == 0) { in dso__load()
1436 if (lstat(dso->name, &st) < 0) in dso__load()
1441 "ignoring it (use -f to override).\n", dso->name); in dso__load()
1445 ret = dso__load_perf_map(dso, map, filter); in dso__load()
1446 dso->symtab_type = ret > 0 ? DSO_BINARY_TYPE__JAVA_JIT : in dso__load()
1458 kmod = dso->symtab_type == DSO_BINARY_TYPE__SYSTEM_PATH_KMODULE || in dso__load()
1459 dso->symtab_type == DSO_BINARY_TYPE__SYSTEM_PATH_KMODULE_COMP || in dso__load()
1460 dso->symtab_type == DSO_BINARY_TYPE__GUEST_KMODULE || in dso__load()
1461 dso->symtab_type == DSO_BINARY_TYPE__GUEST_KMODULE_COMP; in dso__load()
1468 if (filename__read_build_id(dso->name, build_id, BUILD_ID_SIZE) > 0) in dso__load()
1469 dso__set_build_id(dso, build_id); in dso__load()
1482 if (!dso__is_compatible_symtab_type(dso, kmod, symtab_type)) in dso__load()
1485 if (dso__read_binary_type_filename(dso, symtab_type, in dso__load()
1490 if (symsrc__init(ss, dso, name, symtab_type) < 0) in dso__load()
1496 if (!dso->symsrc_filename) in dso__load()
1497 dso->symsrc_filename = strdup(name); in dso__load()
1528 ret = dso__load_sym(dso, map, syms_ss, runtime_ss, filter, kmod); in dso__load()
1535 nr_plt = dso__synthesize_plt_symbols(dso, runtime_ss, map, filter); in dso__load()
1544 if (ret < 0 && strstr(dso->name, " (deleted)") != NULL) in dso__load()
1547 dso__set_loaded(dso, map->type); in dso__load()
1548 pthread_mutex_unlock(&dso->lock); in dso__load()
1562 if (map->dso && strcmp(map->dso->short_name, name) == 0) in map_groups__find_by_name()
1573 int dso__load_vmlinux(struct dso *dso, struct map *map, in dso__load_vmlinux() argument
1587 if (dso->kernel == DSO_TYPE_GUEST_KERNEL) in dso__load_vmlinux()
1592 if (symsrc__init(&ss, dso, symfs_vmlinux, symtab_type)) in dso__load_vmlinux()
1595 err = dso__load_sym(dso, map, &ss, &ss, filter, 0); in dso__load_vmlinux()
1599 if (dso->kernel == DSO_TYPE_GUEST_KERNEL) in dso__load_vmlinux()
1600 dso->binary_type = DSO_BINARY_TYPE__GUEST_VMLINUX; in dso__load_vmlinux()
1602 dso->binary_type = DSO_BINARY_TYPE__VMLINUX; in dso__load_vmlinux()
1603 dso__set_long_name(dso, vmlinux, vmlinux_allocated); in dso__load_vmlinux()
1604 dso__set_loaded(dso, map->type); in dso__load_vmlinux()
1611 int dso__load_vmlinux_path(struct dso *dso, struct map *map, in dso__load_vmlinux_path() argument
1621 err = dso__load_vmlinux(dso, map, vmlinux_path[i], false, filter); in dso__load_vmlinux_path()
1627 filename = dso__build_id_filename(dso, NULL, 0); in dso__load_vmlinux_path()
1629 err = dso__load_vmlinux(dso, map, filename, true, filter); in dso__load_vmlinux_path()
1669 static char *dso__find_kallsyms(struct dso *dso, struct map *map) in dso__find_kallsyms() argument
1676 if (!dso->has_build_id) { in dso__find_kallsyms()
1686 is_host = dso__build_id_equal(dso, host_build_id); in dso__find_kallsyms()
1688 build_id__sprintf(dso->build_id, sizeof(dso->build_id), sbuild_id); in dso__find_kallsyms()
1742 static int dso__load_kernel_sym(struct dso *dso, struct map *map, in dso__load_kernel_sym() argument
1769 return dso__load_vmlinux(dso, map, symbol_conf.vmlinux_name, in dso__load_kernel_sym()
1774 err = dso__load_vmlinux_path(dso, map, filter); in dso__load_kernel_sym()
1783 kallsyms_allocated_filename = dso__find_kallsyms(dso, map); in dso__load_kernel_sym()
1790 err = dso__load_kallsyms(dso, kallsyms_filename, map, filter); in dso__load_kernel_sym()
1795 if (err > 0 && !dso__is_kcore(dso)) { in dso__load_kernel_sym()
1796 dso->binary_type = DSO_BINARY_TYPE__KALLSYMS; in dso__load_kernel_sym()
1797 dso__set_long_name(dso, "[kernel.kallsyms]", false); in dso__load_kernel_sym()
1805 static int dso__load_guest_kernel_sym(struct dso *dso, struct map *map, in dso__load_guest_kernel_sym() argument
1826 err = dso__load_vmlinux(dso, map, in dso__load_guest_kernel_sym()
1840 err = dso__load_kallsyms(dso, kallsyms_filename, map, filter); in dso__load_guest_kernel_sym()
1843 if (err > 0 && !dso__is_kcore(dso)) { in dso__load_guest_kernel_sym()
1844 dso->binary_type = DSO_BINARY_TYPE__GUEST_KALLSYMS; in dso__load_guest_kernel_sym()
1846 dso__set_long_name(dso, strdup(path), true); in dso__load_guest_kernel_sym()